{"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-bead75b0f9233e05", "name": "No API endpoints detected", "shortDescription": {"text": "No API endpoints detected"}, "fullDescription": {"text": "The scanner did not find FastAPI/Flask/Express/NestJS/GraphQL/gRPC routes. If this repo exposes APIs, the framework may be unsupported."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b33047cff90d6951", "name": "Stray `console.log` in TS/JS \u2014 ops/legal-update-2026-06/send-emails.ts:138", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 ops/legal-update-2026-06/send-emails.ts:138"}, "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-3add0c85080c223b", "name": "Stray `console.log` in TS/JS \u2014 api/webhooks/revenuecat.ts:55", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 api/webhooks/revenuecat.ts:55"}, "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-86946629841256a9", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-backfill-merge.ts:8", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-backfill-merge.ts:8"}, "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-61eb07bc89347ca4", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-legacy-local-state.ts:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-legacy-local-state.ts:7"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e0b5c370d2ee42dc", "name": "Stray `console.log` in TS/JS \u2014 scripts/generate-module-intro-audio.ts:96", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/generate-module-intro-audio.ts:96"}, "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-1308ff2a34892e93", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-jwt.ts:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-jwt.ts:13"}, "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-42e88196f8d44c74", "name": "Stray `console.log` in TS/JS \u2014 app/api/daily-news-challenge/cron+api.ts:30", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/daily-news-challenge/cron+api.ts:30"}, "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-d56e1684bb7776dc", "name": "Stray `console.log` in TS/JS \u2014 app/api/webhooks/revenuecat+api.ts:128", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/webhooks/revenuecat+api.ts:128"}, "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-5198311fbbb8d1bc", "name": "TODO/FIXME marker in shipping code \u2014 .claude/workflows/pre-release-audit.js:106", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 .claude/workflows/pre-release-audit.js:106"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b4a06a247353bcca", "name": "Stray `console.log` in TS/JS \u2014 src/lib/sentry.ts:12", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/sentry.ts:12"}, "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-89e43c98a4e2f75b", "name": "Stray `console.log` in TS/JS \u2014 src/lib/posthog.ts:21", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/posthog.ts:21"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5546407bed80fa70", "name": "Stray `console.log` in TS/JS \u2014 src/lib/api/client.ts:67", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/api/client.ts:67"}, "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-ce9e55584813b6fe", "name": "Stray `console.log` in TS/JS \u2014 src/hooks/useRewardedAd.ts:63", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/hooks/useRewardedAd.ts:63"}, "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-02f49b331e2fd0fd", "name": "TODO/FIXME marker in shipping code \u2014 src/features/chapter-intro/mindMapModuleMap.ts:34", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/features/chapter-intro/mindMapModuleMap.ts:34"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cb09955664d66ac7", "name": "Stray `console.log` in TS/JS \u2014 plugins/with-modular-podfile.js:68", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 plugins/with-modular-podfile.js:68"}, "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-054dcd6e2cf72e5d", "name": "Insecure pattern 'cors_wildcard' in api/ai/stock-analyze-quick.ts:47", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/ai/stock-analyze-quick.ts:47"}, "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-4aefc34f6ce43562", "name": "Insecure pattern 'cors_wildcard' in api/ai/insights.ts:98", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/ai/insights.ts:98"}, "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-4b2a3375d33d9182", "name": "Insecure pattern 'cors_wildcard' in api/ai/quiz.ts:10", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/ai/quiz.ts:10"}, "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-02d05a181266aab7", "name": "Insecure pattern 'cors_wildcard' in api/ai/chat.ts:28", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/ai/chat.ts:28"}, "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-31965311f6759fff", "name": "Insecure pattern 'cors_wildcard' in api/ai/banner-tip.ts:35", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/ai/banner-tip.ts:35"}, "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-1ca09446acd06497", "name": "Insecure pattern 'cors_wildcard' in api/ai/stock-analyze-deep.ts:56", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/ai/stock-analyze-deep.ts:56"}, "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-97888aed710ede0b", "name": "Insecure pattern 'cors_wildcard' in api/auth/verify.ts:51", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/auth/verify.ts:51"}, "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-e28520ae38ebf03e", "name": "Insecure pattern 'cors_wildcard' in api/voice/session.ts:18", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/voice/session.ts:18"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d8dd88205bedbd09", "name": "Insecure pattern 'cors_wildcard' in api/voice/usage.ts:23", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/voice/usage.ts:23"}, "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-a9b86c3b94b4e16b", "name": "Insecure pattern 'cors_wildcard' in api/_shared/withAuth.ts:22", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/_shared/withAuth.ts:22"}, "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-725e4d668c219806", "name": "Insecure pattern 'node_child_process' in scripts/dev-phone.mjs:10", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/dev-phone.mjs:10"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-301b35ca2536ae9a", "name": "Insecure pattern 'node_child_process' in scripts/vercel-dev-local.mjs:22", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/vercel-dev-local.mjs:22"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a180032b8b0eb4ee", "name": "Insecure pattern 'exec_used' in scripts/db-diagram.mjs:91", "shortDescription": {"text": "Insecure pattern 'exec_used' in scripts/db-diagram.mjs:91"}, "fullDescription": {"text": "Found a known-risky pattern (exec_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0e4431fe34cb9c7b", "name": "Insecure pattern 'node_child_process' in scripts/db-diagram.mjs:14", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/db-diagram.mjs:14"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cb639d9a10a47b23", "name": "package.json defines install-time lifecycle scripts", "shortDescription": {"text": "package.json defines install-time lifecycle scripts"}, "fullDescription": {"text": "preinstall/install/postinstall/prepare scripts execute during dependency installation. Review them carefully for network calls, obfuscation, shell execution, or credential access."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4601e3ad3bb28677", "name": "No CI/CD pipelines detected", "shortDescription": {"text": "No CI/CD pipelines detected"}, "fullDescription": {"text": "No GitHub Actions, GitLab CI, or CircleCI configs found. Without CI you can't gate deploys on tests/lints."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9dcf5cd099e4f206", "name": "Very large file: src/features/chapter-5-content/chapter5Data.ts (829 lines)", "shortDescription": {"text": "Very large file: src/features/chapter-5-content/chapter5Data.ts (829 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-d63178dc63c040f6", "name": "Very large file: src/features/daily-quests/DailyQuestsSheet.tsx (1343 lines)", "shortDescription": {"text": "Very large file: src/features/daily-quests/DailyQuestsSheet.tsx (1343 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-5a9c56fa6d510130", "name": "Very large file: src/features/daily-challenges/dilemma-data.ts (1023 lines)", "shortDescription": {"text": "Very large file: src/features/daily-challenges/dilemma-data.ts (1023 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-568e875ea213b189", "name": "Very large file: src/features/chapter-4-content/chapter4Data.ts (2100 lines)", "shortDescription": {"text": "Very large file: src/features/chapter-4-content/chapter4Data.ts (2100 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-2c927bf748b898ef", "name": "Very large file: src/features/chat/ChatScreen.tsx (1445 lines)", "shortDescription": {"text": "Very large file: src/features/chat/ChatScreen.tsx (1445 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-df97b14723b3a94f", "name": "Very large file: src/features/assets/MarketScreen.tsx (1364 lines)", "shortDescription": {"text": "Very large file: src/features/assets/MarketScreen.tsx (1364 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-a0c2ece038516edc", "name": "Very large file: src/features/glossary/glossaryData.ts (960 lines)", "shortDescription": {"text": "Very large file: src/features/glossary/glossaryData.ts (960 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-82a3d84a08dac7e0", "name": "Very large file: src/features/onboarding/ProfilingFlow.tsx (3582 lines)", "shortDescription": {"text": "Very large file: src/features/onboarding/ProfilingFlow.tsx (3582 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-79be9dbe8022e675", "name": "Very large file: src/features/chapter-1-content/LessonFlowScreen.tsx (6241 lines)", "shortDescription": {"text": "Very large file: src/features/chapter-1-content/LessonFlowScreen.tsx (6241 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-bcbc802494e11883", "name": "Very large file: src/features/chapter-1-content/chapter1Data.ts (1574 lines)", "shortDescription": {"text": "Very large file: src/features/chapter-1-content/chapter1Data.ts (1574 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-d36c8f28cbaf2fd6", "name": "Very large file: src/features/pyramid/DuoLearnScreen.tsx (3181 lines)", "shortDescription": {"text": "Very large file: src/features/pyramid/DuoLearnScreen.tsx (3181 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-50c9eab915ac11b2", "name": "Very large file: src/features/macro-events/macroEventsData.ts (839 lines)", "shortDescription": {"text": "Very large file: src/features/macro-events/macroEventsData.ts (839 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-294acdf2145338f0", "name": "Very large file: src/features/shop/ShopScreen.tsx (1410 lines)", "shortDescription": {"text": "Very large file: src/features/shop/ShopScreen.tsx (1410 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "5 test file(s) for 1149 source file(s) (ratio 0.00). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-faccb9061e9b52a0", "name": "No README detected", "shortDescription": {"text": "No README detected"}, "fullDescription": {"text": "No README file was found. Generated repos without README context are hard to operate, validate, or safely hand off."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 61 console/debugger/print-style debug statements in non-test source. This is a common fast-generation residue before production cleanup."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-72b2a6250083a784", "name": "Placeholder or mock-heavy implementation detected", "shortDescription": {"text": "Placeholder or mock-heavy implementation detected"}, "fullDescription": {"text": "Found 153 placeholder/mock markers across 69 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-9d79c4077342a7d0", "name": "Runtime service client appears to use placeholder configuration", "shortDescription": {"text": "Runtime service client appears to use placeholder configuration"}, "fullDescription": {"text": "A runtime source file appears to wire Supabase/Firebase/AI/payment-style clients to placeholder URLs, keys, or fallback values. In the Fable corpus this often means the UI/API shape is present while the backend service is not actually configured."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, ci, tests, operator-readme. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license, ci, tests, operator-readme. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-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-17a6d73621ee96f8", "name": "Agent instruction/config may expose a secret: .claude/settings.json", "shortDescription": {"text": "Agent instruction/config may expose a secret: .claude/settings.json"}, "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-14f869ac413a559f", "name": "Agent authority lacks a verifier contract: .claude/commands/\u05d5\u05d0\u05e8\u05df.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/\u05d5\u05d0\u05e8\u05df.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1b81c215e887ef1b", "name": "Agent authority lacks a verifier contract: .claude/agents/\u05d8\u05e8\u05e0\u05d3\u05d5\u05df.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/agents/\u05d8\u05e8\u05e0\u05d3\u05d5\u05df.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-19e850817d44e32f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 ops/legal-update-2026-06/send-emails.ts:81", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 ops/legal-update-2026-06/send-emails.ts:81"}, "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-c009c0f90d597cae", "name": "`fetch()` without try/.catch or AbortSignal \u2014 api/ai/insights.ts:199", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 api/ai/insights.ts:199"}, "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-316fe84eb30c2150", "name": "`fetch()` without try/.catch or AbortSignal \u2014 api/ai/quiz.ts:31", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 api/ai/quiz.ts:31"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-02de5eee88f20346", "name": "`fetch()` without try/.catch or AbortSignal \u2014 api/ai/chat.ts:62", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 api/ai/chat.ts:62"}, "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-522aeb8f53d7bb45", "name": "`fetch()` without try/.catch or AbortSignal \u2014 api/ai/banner-tip.ts:74", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 api/ai/banner-tip.ts:74"}, "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-710283278f0440b9", "name": "Commented-code block (5 lines) in api/ai/stock-analyze-deep.ts:81", "shortDescription": {"text": "Commented-code block (5 lines) in api/ai/stock-analyze-deep.ts:81"}, "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-e785c5956a9007cf", "name": "`fetch()` without try/.catch or AbortSignal \u2014 api/auth/link.ts:24", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 api/auth/link.ts:24"}, "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-277851fe67f43fa7", "name": "Commented-code block (7 lines) in api/auth/verify.ts:97", "shortDescription": {"text": "Commented-code block (7 lines) in api/auth/verify.ts:97"}, "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-43c58c015b8a7cfa", "name": "`fetch()` without try/.catch or AbortSignal \u2014 api/auth/verify.ts:37", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 api/auth/verify.ts:37"}, "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-f77eb2ea2010ebd6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 api/trading/quote.ts:76", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 api/trading/quote.ts:76"}, "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-355be53e9c398b77", "name": "Commented-code block (6 lines) in api/_shared/sendDailyEmails.ts:91", "shortDescription": {"text": "Commented-code block (6 lines) in api/_shared/sendDailyEmails.ts: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-5539a666994590d9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/generate-module-intro-audio.ts:48", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/generate-module-intro-audio.ts:48"}, "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-180edcd712e931f3", "name": "Commented-code block (5 lines) in scripts/migrate-local.mjs:1", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/migrate-local.mjs:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-521101d499dba885", "name": "Commented-code block (8 lines) in scripts/vercel-dev-local.mjs:4", "shortDescription": {"text": "Commented-code block (8 lines) in scripts/vercel-dev-local.mjs: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-c587035ebd89a62d", "name": "Commented-code block (5 lines) in scripts/db-diagram.mjs:4", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/db-diagram.mjs: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-cb3e71fd27a406b0", "name": "Commented-code block (8 lines) in app/tower-defense-boss.tsx:12", "shortDescription": {"text": "Commented-code block (8 lines) in app/tower-defense-boss.tsx:12"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e84e4470b32d146f", "name": "Legacy-named symbol `install_referrer_checked_v1` in app/_layout.tsx:471", "shortDescription": {"text": "Legacy-named symbol `install_referrer_checked_v1` in app/_layout.tsx:471"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9330f636922443f2", "name": "Commented-code block (5 lines) in app/_layout.tsx:233", "shortDescription": {"text": "Commented-code block (5 lines) in app/_layout.tsx:233"}, "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-36fe0c33b7f90625", "name": "Commented-code block (5 lines) in app/interstitial/bullshit-ch0.tsx:87", "shortDescription": {"text": "Commented-code block (5 lines) in app/interstitial/bullshit-ch0.tsx:87"}, "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-a1dc86f684176b46", "name": "Commented-code block (6 lines) in app/api/sync/profile+api.ts:169", "shortDescription": {"text": "Commented-code block (6 lines) in app/api/sync/profile+api.ts:169"}, "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-61cfb6aff04cf089", "name": "Commented-code block (5 lines) in app/api/email/track-click+api.ts:9", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/email/track-click+api.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-3e7bb4230f87e9b8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/ai/quiz+api.ts:36", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/ai/quiz+api.ts:36"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-33669333961a7e89", "name": "Commented-code block (5 lines) in app/api/ai/payslip-analyze+api.ts:388", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/ai/payslip-analyze+api.ts:388"}, "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-316559678a3feb7d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/ai/banner-tip+api.ts:76", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/ai/banner-tip+api.ts:76"}, "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-c07a76f5d953347b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/ai/insights+api.ts:206", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/ai/insights+api.ts:206"}, "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-40fbb3417442a3e7", "name": "Commented-code block (8 lines) in app/api/auth/verify+api.ts:108", "shortDescription": {"text": "Commented-code block (8 lines) in app/api/auth/verify+api.ts:108"}, "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-10c0b348b2d62ba1", "name": "Commented-code block (8 lines) in app/api/breaking-news/_lib.ts:105", "shortDescription": {"text": "Commented-code block (8 lines) in app/api/breaking-news/_lib.ts:105"}, "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-cdc89b392a59b475", "name": "Commented-code block (5 lines) in app/api/daily-news-challenge/today+api.ts:37", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/daily-news-challenge/today+api.ts:37"}, "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-298bcd446bdb8c6f", "name": "Commented-code block (5 lines) in app/api/daily-news-challenge/cron+api.ts:44", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/daily-news-challenge/cron+api.ts:44"}, "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-fbb708f3de4b7ce1", "name": "Commented-code block (7 lines) in app/api/daily-news-challenge/_lib.ts:245", "shortDescription": {"text": "Commented-code block (7 lines) in app/api/daily-news-challenge/_lib.ts:245"}, "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-7fd058343935c57e", "name": "Commented-code block (6 lines) in app/api/trading/quote+api.ts:23", "shortDescription": {"text": "Commented-code block (6 lines) in app/api/trading/quote+api.ts:23"}, "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-b4af70c40fdd08da", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/trading/quote+api.ts:102", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/trading/quote+api.ts:102"}, "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-e3156ba106ec9d02", "name": "Commented-code block (6 lines) in app/api/webhooks/revenuecat+api.ts:16", "shortDescription": {"text": "Commented-code block (6 lines) in app/api/webhooks/revenuecat+api.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-9afb925481f48105", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/_shared/perplexityNews.ts:60", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/_shared/perplexityNews.ts:60"}, "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-cb51c876526e7dea", "name": "Commented-code block (5 lines) in app/quest/swipe-game.tsx:18", "shortDescription": {"text": "Commented-code block (5 lines) in app/quest/swipe-game.tsx:18"}, "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-8aae9a69d77eaae0", "name": "Commented-code block (5 lines) in app/bridge/index.tsx:4", "shortDescription": {"text": "Commented-code block (5 lines) in app/bridge/index.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-e17ba209954d2932", "name": "`fetch()` without try/.catch or AbortSignal \u2014 .claude/workflows/code-efficiency-audit.js:218", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 .claude/workflows/code-efficiency-audit.js:218"}, "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-804a6e3460c1c51a", "name": "Commented-code block (13 lines) in src/components/ui/AppIntroSplash.tsx:5", "shortDescription": {"text": "Commented-code block (13 lines) in src/components/ui/AppIntroSplash.tsx: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-dba13e8a0f55147f", "name": "Commented-code block (6 lines) in src/components/ui/GlobalWealthHeader.tsx:210", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/ui/GlobalWealthHeader.tsx:210"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-accc3c37c404d553", "name": "Commented-code block (8 lines) in src/components/ui/SharkCTAModals.tsx:148", "shortDescription": {"text": "Commented-code block (8 lines) in src/components/ui/SharkCTAModals.tsx:148"}, "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-f63ce732fd97d322", "name": "Commented-code block (5 lines) in src/components/ui/SharkLoveModal.tsx:67", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/ui/SharkLoveModal.tsx: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-1dab1ff4ff6f78d2", "name": "Commented-code block (6 lines) in src/lib/queryClient.ts:11", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/queryClient.ts:11"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1d673239cad7137c", "name": "Commented-code block (5 lines) in src/lib/version.ts:7", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/version.ts:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c45ed5e60b6c9510", "name": "Commented-code block (7 lines) in src/lib/auth/lifecycle.ts:104", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/auth/lifecycle.ts:104"}, "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-2ae80c6c6f37ac5d", "name": "Commented-code block (6 lines) in src/lib/analytics/events.ts:5", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/analytics/events.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-fdb8092ec4a06fe5", "name": "Commented-code block (5 lines) in src/lib/api/client.ts:21", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/api/client.ts:21"}, "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-3fe5e93d655dd9a1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/api/client.ts:70", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/api/client.ts:70"}, "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-196d6f170d7e87ae", "name": "Commented-code block (6 lines) in src/hooks/useSoundEffect.ts:17", "shortDescription": {"text": "Commented-code block (6 lines) in src/hooks/useSoundEffect.ts:17"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3389b927c4482765", "name": "Commented-code block (12 lines) in src/hooks/useModulePrefetch.ts:33", "shortDescription": {"text": "Commented-code block (12 lines) in src/hooks/useModulePrefetch.ts:33"}, "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-fd8ea9132fecdf51", "name": "Commented-code block (7 lines) in src/hooks/useRewardedAd.ts:69", "shortDescription": {"text": "Commented-code block (7 lines) in src/hooks/useRewardedAd.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-fbd5ccafabd6a93d", "name": "Commented-code block (15 lines) in src/hooks/useIntroAudio.ts:25", "shortDescription": {"text": "Commented-code block (15 lines) in src/hooks/useIntroAudio.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-af23156ee379bb34", "name": "Commented-code block (7 lines) in src/hooks/useStreakCelebration.tsx:86", "shortDescription": {"text": "Commented-code block (7 lines) in src/hooks/useStreakCelebration.tsx:86"}, "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-c8ce9a4e18d13a80", "name": "Commented-code block (5 lines) in src/services/revenueCat.ts:10", "shortDescription": {"text": "Commented-code block (5 lines) in src/services/revenueCat.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-1406b2633bd42b90", "name": "Commented-code block (5 lines) in src/db/schema.ts:329", "shortDescription": {"text": "Commented-code block (5 lines) in src/db/schema.ts:329"}, "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-a11ffdc207be4b55", "name": "Commented-code block (5 lines) in src/db/apiBase.ts:24", "shortDescription": {"text": "Commented-code block (5 lines) in src/db/apiBase.ts:24"}, "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-e611e187a8057e81", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/db/sync/syncModuleProgress.ts:22", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/db/sync/syncModuleProgress.ts:22"}, "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-6ce8d3f05c432e18", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/db/sync/syncPaperTrading.ts:63", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/db/sync/syncPaperTrading.ts:63"}, "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-805b7a7abd5eadae", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/db/sync/syncReferral.ts:78", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/db/sync/syncReferral.ts:78"}, "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-d771b7f605406c44", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/db/sync/syncCrowdQuestion.ts:25", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/db/sync/syncCrowdQuestion.ts:25"}, "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-063d1033acdcd69c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/db/sync/syncUserProfile.ts:33", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/db/sync/syncUserProfile.ts:33"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-95e6c94f49d59209", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/db/sync/syncInventory.ts:13", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/db/sync/syncInventory.ts:13"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b8cb314bc70f1bfd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/db/sync/syncBandit.ts:23", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/db/sync/syncBandit.ts:23"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2ec4a1a1107da679", "name": "Commented-code block (8 lines) in src/features/topic-learning/useTopicTreeAssetPrefetch.ts:69", "shortDescription": {"text": "Commented-code block (8 lines) in src/features/topic-learning/useTopicTreeAssetPrefetch.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-d65978e559adf694", "name": "Commented-code block (5 lines) in src/features/topic-learning/topicSvgs.ts:142", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/topic-learning/topicSvgs.ts:142"}, "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-0ec071f81b655c08", "name": "Commented-code block (5 lines) in src/features/topic-learning/ChestCelebrationModal.tsx:120", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/topic-learning/ChestCelebrationModal.tsx:120"}, "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-ac76c4336ca3e5f0", "name": "Commented-code block (5 lines) in src/features/topic-learning/pathScenes.ts:33", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/topic-learning/pathScenes.ts:33"}, "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-abcb11be9282d365", "name": "Commented-code block (5 lines) in src/features/topic-learning/TopicChatScreen.tsx:112", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/topic-learning/TopicChatScreen.tsx:112"}, "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-74dfd198c28839a3", "name": "Commented-code block (5 lines) in src/features/topic-learning/moduleGameMap.ts:46", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/topic-learning/moduleGameMap.ts:46"}, "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-950ab8bb09fb62e3", "name": "Commented-code block (11 lines) in src/features/topic-learning/TopicTreeAccordion.tsx:120", "shortDescription": {"text": "Commented-code block (11 lines) in src/features/topic-learning/TopicTreeAccordion.tsx:120"}, "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-8978a13727798537", "name": "Commented-code block (22 lines) in src/features/topic-learning/topicResolver.ts:18", "shortDescription": {"text": "Commented-code block (22 lines) in src/features/topic-learning/topicResolver.ts:18"}, "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-5583e42fa746dc75", "name": "Commented-code block (7 lines) in src/features/topic-learning/components/TopicChip.tsx:100", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/topic-learning/components/TopicChip.tsx:100"}, "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-587343b9668afeae", "name": "Commented-code block (6 lines) in src/features/topic-learning/components/ModuleTopicLayout.tsx:20", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/topic-learning/components/ModuleTopicLayout.tsx:20"}, "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-0c300c695c7bc52a", "name": "Commented-code block (5 lines) in src/features/financial-tools/components/ToolTutorialOverlay.tsx:118", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/financial-tools/components/ToolTutorialOverlay.tsx:118"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0b554d10b2d5c10d", "name": "Legacy-named symbol `streak_repair_offer_v1` in src/features/bandit/banditConfig.ts:35", "shortDescription": {"text": "Legacy-named symbol `streak_repair_offer_v1` in src/features/bandit/banditConfig.ts:35"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c5e016b874ada1ff", "name": "Commented-code block (9 lines) in src/features/bandit/useBanditStore.ts:49", "shortDescription": {"text": "Commented-code block (9 lines) in src/features/bandit/useBanditStore.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-f727eb776c642f5e", "name": "Commented-code block (5 lines) in src/features/trading-hub/marketApiService.ts:6", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/trading-hub/marketApiService.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-23743a4354acc3e2", "name": "Commented-code block (7 lines) in src/features/trading-hub/TradingHubScreen.tsx:372", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/trading-hub/TradingHubScreen.tsx:372"}, "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-a02161caec28601b", "name": "Commented-code block (8 lines) in src/features/trading-hub/TradingChart.tsx:38", "shortDescription": {"text": "Commented-code block (8 lines) in src/features/trading-hub/TradingChart.tsx:38"}, "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-dfb1431107a32049", "name": "Commented-code block (5 lines) in src/features/trading-hub/chartHtml.ts:82", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/trading-hub/chartHtml.ts:82"}, "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-e8d37d3ce765cde1", "name": "Commented-code block (5 lines) in src/features/monetization/monetizationNotificationCopy.ts:11", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/monetization/monetizationNotificationCopy.ts:11"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d71126162c267294", "name": "Commented-code block (5 lines) in src/features/shark-dilemma/VideoSharkDilemmaCard.tsx:64", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/shark-dilemma/VideoSharkDilemmaCard.tsx:64"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4e185e581dfefaa2", "name": "Legacy-named symbol `shark_meta_v1` in src/features/email/emailTemplates.ts:353", "shortDescription": {"text": "Legacy-named symbol `shark_meta_v1` in src/features/email/emailTemplates.ts:353"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-36f1924d7ffd77b3", "name": "Commented-code block (5 lines) in src/features/email/emailTemplates.ts:317", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/email/emailTemplates.ts:317"}, "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-9530f486b3684d86", "name": "Commented-code block (5 lines) in src/features/email/parentalConsentEmail.ts:148", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/email/parentalConsentEmail.ts:148"}, "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-d0624f892a1700b9", "name": "Commented-code block (5 lines) in src/features/auth/LoginScreen.tsx:92", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/auth/LoginScreen.tsx:92"}, "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-e6663149364c9f6a", "name": "Commented-code block (6 lines) in src/features/auth/PostWalkthroughRegisterCTA.tsx:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/auth/PostWalkthroughRegisterCTA.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-f90f7f3b6f95c3e7", "name": "Commented-code block (6 lines) in src/features/auth/useAppleAuth.ts:115", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/auth/useAppleAuth.ts:115"}, "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-d49be93414591fee", "name": "Commented-code block (5 lines) in src/features/auth/RegisterScreen.tsx:105", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/auth/RegisterScreen.tsx:105"}, "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-fb1c17fb50abf7ed", "name": "Commented-code block (7 lines) in src/features/auth/ModuleEndSignupGate.tsx:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/auth/ModuleEndSignupGate.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-5a946197e7e2faae", "name": "Commented-code block (7 lines) in src/features/auth/useAuthStore.ts:130", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/auth/useAuthStore.ts:130"}, "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-f32a2cb21aaaac65", "name": "Commented-code block (6 lines) in src/features/auth/useGoogleAuth.ts:168", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/auth/useGoogleAuth.ts:168"}, "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-307c856fca813f28", "name": "Commented-code block (5 lines) in src/features/ai-personalization/analyzeProfile.ts:108", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/ai-personalization/analyzeProfile.ts:108"}, "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-00581c11adc604ba", "name": "Commented-code block (5 lines) in src/features/subscription/UpgradeModal.tsx:84", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/subscription/UpgradeModal.tsx:84"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-74c7a316d0e0366a", "name": "Commented-code block (9 lines) in src/features/subscription/subscriptionConstants.ts:16", "shortDescription": {"text": "Commented-code block (9 lines) in src/features/subscription/subscriptionConstants.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-7bc5521a61c77339", "name": "Commented-code block (6 lines) in src/features/subscription/useUsageStore.ts:6", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/subscription/useUsageStore.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-08f50584d8e16819", "name": "Commented-code block (5 lines) in src/features/subscription/PricingScreen.tsx:82", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/subscription/PricingScreen.tsx:82"}, "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-a4b5165853b84817", "name": "Commented-code block (6 lines) in src/features/the-bridge/BridgeScreen.tsx:223", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/the-bridge/BridgeScreen.tsx:223"}, "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-8e173a18f24ab741", "name": "Commented-code block (5 lines) in src/features/the-bridge/bridgeData.ts:85", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/the-bridge/bridgeData.ts:85"}, "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-3a61554f67756c54", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/ai-insights/useAIInsightBanner.ts:31", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/ai-insights/useAIInsightBanner.ts:31"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6d37dc063f046e86", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/ai-insights/AIInsightsScreen.tsx:86", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/ai-insights/AIInsightsScreen.tsx:86"}, "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-d8130ee4e82ccccb", "name": "Commented-code block (5 lines) in src/features/chapter-5-content/simulations/realEstateData.ts:51", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/chapter-5-content/simulations/realEstateData.ts:51"}, "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-16ff0403e37da36b", "name": "Commented-code block (7 lines) in src/features/chapter-5-content/simulations/fireCalcData.ts:12", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/chapter-5-content/simulations/fireCalcData.ts:12"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b6cf8559934d5e21", "name": "Commented-code block (5 lines) in src/features/finfeed/minigames/bullshit-swipe/BullshitSwipeCard.tsx:421", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/finfeed/minigames/bullshit-swipe/BullshitSwipeCard.tsx:421"}, "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-310c33584810810e", "name": "Commented-code block (11 lines) in src/features/finfeed/minigames/shared/FeedGameShell.tsx:107", "shortDescription": {"text": "Commented-code block (11 lines) in src/features/finfeed/minigames/shared/FeedGameShell.tsx:107"}, "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-98c4fdda0392fc9f", "name": "Commented-code block (6 lines) in src/features/finfeed/minigames/fomo-killer/FomoKillerCard.tsx:177", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/finfeed/minigames/fomo-killer/FomoKillerCard.tsx:177"}, "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-2900bd7fee1a2603", "name": "Commented-code block (7 lines) in src/features/premium-learning/data.ts:368", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/premium-learning/data.ts:368"}, "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-9f174476e3195504", "name": "Commented-code block (6 lines) in src/features/pearls/PearlNode.tsx:272", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/pearls/PearlNode.tsx:272"}, "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-76bb85f3bb303047", "name": "Commented-code block (5 lines) in src/features/pearls/PearlSheet.tsx:143", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/pearls/PearlSheet.tsx:143"}, "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-66b04bd95d75b659", "name": "Commented-code block (8 lines) in src/features/pearls/pearlContentMap.ts:54", "shortDescription": {"text": "Commented-code block (8 lines) in src/features/pearls/pearlContentMap.ts:54"}, "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-6b594ecb5367dc15", "name": "Commented-code block (6 lines) in src/features/pearls/pearlConfig.ts:99", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/pearls/pearlConfig.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-e22c1aef450a2c48", "name": "Commented-code block (7 lines) in src/features/pearls/stages/PearlGameStage.tsx:70", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/pearls/stages/PearlGameStage.tsx:70"}, "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-6aab5e9d8cbe0ff2", "name": "Commented-code block (5 lines) in src/features/pearls/stages/PearlSwipeStage.tsx:4", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/pearls/stages/PearlSwipeStage.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-0d0c0be223680ca2", "name": "Commented-code block (8 lines) in src/features/pearls/stages/PearlScenarioStage.tsx:54", "shortDescription": {"text": "Commented-code block (8 lines) in src/features/pearls/stages/PearlScenarioStage.tsx:54"}, "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-582692a37268e5df", "name": "Commented-code block (5 lines) in src/features/pearls/stages/PearlVideoStage.tsx:27", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/pearls/stages/PearlVideoStage.tsx:27"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8bab7f5083568ced", "name": "Commented-code block (6 lines) in src/features/pearls/stages/cards/FeedTradingNudgeCard.tsx:106", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/pearls/stages/cards/FeedTradingNudgeCard.tsx:106"}, "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-180bc0e6649284ea", "name": "Commented-code block (7 lines) in src/features/pearls/stages/cards/FeedWhatsAppNudgeCard.tsx:191", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/pearls/stages/cards/FeedWhatsAppNudgeCard.tsx:191"}, "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-1cff257142ae9dda", "name": "Commented-code block (6 lines) in src/features/pearls/stages/cards/FeedReferralNudgeCard.tsx:99", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/pearls/stages/cards/FeedReferralNudgeCard.tsx: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-a339c9e83242efe7", "name": "Commented-code block (5 lines) in src/features/daily-quests/useDailyQuestsStore.ts:178", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/daily-quests/useDailyQuestsStore.ts:178"}, "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-0daa43937b64cda5", "name": "Commented-code block (7 lines) in src/features/daily-quests/daily-quest-types.ts:95", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/daily-quests/daily-quest-types.ts:95"}, "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-b36d5e4e971c4890", "name": "Commented-code block (5 lines) in src/features/daily-quests/DailyQuestsSheet.tsx:43", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/daily-quests/DailyQuestsSheet.tsx:43"}, "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-caaf8329f16866e2", "name": "Commented-code block (9 lines) in src/features/podcast-segment/PodcastSegmentScreen.tsx:142", "shortDescription": {"text": "Commented-code block (9 lines) in src/features/podcast-segment/PodcastSegmentScreen.tsx:142"}, "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-b8b232517a10634b", "name": "Commented-code block (5 lines) in src/features/podcast-segment/PodcastSummaryCard.tsx:126", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/podcast-segment/PodcastSummaryCard.tsx:126"}, "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-e19089d6f3116809", "name": "Commented-code block (7 lines) in src/features/podcast-segment/PodcastIntroCard.tsx:56", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/podcast-segment/PodcastIntroCard.tsx:56"}, "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-50b098416e4a309e", "name": "Commented-code block (5 lines) in src/features/podcast-segment/usePodcastPlayer.ts:103", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/podcast-segment/usePodcastPlayer.ts:103"}, "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-d723062e872c9bd6", "name": "Commented-code block (5 lines) in src/features/daily-challenges/SwipeGameCard.tsx:79", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/daily-challenges/SwipeGameCard.tsx:79"}, "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-c12e86d61fb7ad7b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/breaking-news/breakingNewsApi.ts:52", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/breaking-news/breakingNewsApi.ts:52"}, "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-23b764d9f69bcc06", "name": "Commented-code block (5 lines) in src/features/breaking-news/BreakingNewsScreen.tsx:129", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/breaking-news/BreakingNewsScreen.tsx:129"}, "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-0373b9b96bb6038d", "name": "Commented-code block (5 lines) in src/features/chapter-4-content/components/TA125WarRecoveryChart.tsx:492", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/chapter-4-content/components/TA125WarRecoveryChart.tsx:492"}, "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-aff677f071389639", "name": "Commented-code block (6 lines) in src/features/chapter-4-content/simulations/priceValueData.ts:23", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/chapter-4-content/simulations/priceValueData.ts:23"}, "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-f92136008b65dbe5", "name": "Commented-code block (6 lines) in src/features/chat/MarkdownText.tsx:16", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/chat/MarkdownText.tsx: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-81f5ec2bc754f75d", "name": "Commented-code block (7 lines) in src/features/chat/buildChatPrompt.ts:60", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/chat/buildChatPrompt.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-e07a813a310336d7", "name": "Commented-code block (5 lines) in src/features/chat/ChatScreen.tsx:99", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/chat/ChatScreen.tsx: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-74641b5cec8dd17b", "name": "Commented-code block (6 lines) in src/features/chat/generateFollowups.ts:66", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/chat/generateFollowups.ts:66"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9b861005ad197406", "name": "Commented-code block (5 lines) in src/features/more/MoreScreen.tsx:224", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/more/MoreScreen.tsx:224"}, "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-73fced13949af153", "name": "Commented-code block (5 lines) in src/features/social/ReferralScreen.tsx:4", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/social/ReferralScreen.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-5df37e482050d9e0", "name": "Legacy-named symbol `pending_referral_code_v1` in src/features/social/InviteRedemptionScreen.tsx:32", "shortDescription": {"text": "Legacy-named symbol `pending_referral_code_v1` in src/features/social/InviteRedemptionScreen.tsx:32"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d559981cb66b196a", "name": "Commented-code block (7 lines) in src/features/social/useReferralStore.ts:108", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/social/useReferralStore.ts:108"}, "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-37945783edd557f6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/live-market/LiveMarketCard.tsx:79", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/live-market/LiveMarketCard.tsx:79"}, "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-dca75146fbfaf9ab", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/live-news/LiveNewsQuizCard.tsx:92", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/live-news/LiveNewsQuizCard.tsx:92"}, "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-a8ccf2bccb73f15d", "name": "Commented-code block (6 lines) in src/features/retention-loops/ComebackRewardModal.tsx:56", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/retention-loops/ComebackRewardModal.tsx:56"}, "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-f0be9a8e27a60b77", "name": "Commented-code block (6 lines) in src/features/retention-loops/useStreakSkinWatcher.ts:38", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/retention-loops/useStreakSkinWatcher.ts:38"}, "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-cd82070a950e7c7e", "name": "Commented-code block (8 lines) in src/features/daily-news-challenge/DailyNewsChallengeSheet.tsx:59", "shortDescription": {"text": "Commented-code block (8 lines) in src/features/daily-news-challenge/DailyNewsChallengeSheet.tsx:59"}, "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-65c2f4fa0e4b9629", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/daily-news-challenge/DailyNewsChallengeSheet.tsx:152", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/daily-news-challenge/DailyNewsChallengeSheet.tsx:152"}, "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-4165a89772cb5e3b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/daily-news-challenge/dailyNewsChallengeApi.ts:30", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/daily-news-challenge/dailyNewsChallengeApi.ts:30"}, "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-059c800c5b26aec4", "name": "Commented-code block (7 lines) in src/features/daily-news-challenge/useDailyNewsChallengeStore.ts:213", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/daily-news-challenge/useDailyNewsChallengeStore.ts:213"}, "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-38549dde63a83b1e", "name": "Commented-code block (5 lines) in src/features/daily-news-challenge/components/ChallengePage.tsx:47", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/daily-news-challenge/components/ChallengePage.tsx:47"}, "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-6bac8e40e7d3e6d8", "name": "Commented-code block (7 lines) in src/features/daily-news-challenge/components/ItemChatOverlay.tsx:103", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/daily-news-challenge/components/ItemChatOverlay.tsx:103"}, "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-a69ad8ede7e2b401", "name": "Commented-code block (5 lines) in src/features/daily-news-challenge/components/RecapCard.tsx:132", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/daily-news-challenge/components/RecapCard.tsx:132"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7777ee577997ef01", "name": "Commented-code block (5 lines) in src/features/onboarding/SignupGateStep.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/onboarding/SignupGateStep.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-330beabbb2cd15d8", "name": "Commented-code block (5 lines) in src/features/onboarding/AppWalkthroughOverlay.tsx:155", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/onboarding/AppWalkthroughOverlay.tsx:155"}, "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-b59f14a8c2135420", "name": "Commented-code block (7 lines) in src/features/onboarding/ProfilingFlow.tsx:972", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/onboarding/ProfilingFlow.tsx:972"}, "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-cafa6c5fc2e64092", "name": "Commented-code block (5 lines) in src/features/economy/useStreak.ts:91", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/economy/useStreak.ts: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-ba8a9cc239bbe80b", "name": "Commented-code block (9 lines) in src/features/economy/useEconomyUIStore.ts:36", "shortDescription": {"text": "Commented-code block (9 lines) in src/features/economy/useEconomyUIStore.ts:36"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-59afe965803c6a8f", "name": "Commented-code block (9 lines) in src/features/economy/useCompletedModulesStore.ts:5", "shortDescription": {"text": "Commented-code block (9 lines) in src/features/economy/useCompletedModulesStore.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-ce0ddf89faf1f927", "name": "Commented-code block (5 lines) in src/features/payslip-analyzer/PayslipAnalyzerScreen.tsx:178", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/payslip-analyzer/PayslipAnalyzerScreen.tsx:178"}, "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-c20090ae3fcbbf89", "name": "Commented-code block (5 lines) in src/features/payslip-analyzer/lib/clientValidate.ts:23", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/payslip-analyzer/lib/clientValidate.ts:23"}, "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-d93c01c3d894b676", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/payslip-analyzer/lib/uploadFile.ts:53", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/payslip-analyzer/lib/uploadFile.ts:53"}, "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-fbc9231f7df4482d", "name": "Commented-code block (7 lines) in src/features/chapter-1-content/FlashcardInfographic.tsx:55", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/chapter-1-content/FlashcardInfographic.tsx:55"}, "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-048a9236cb93e753", "name": "Commented-code block (5 lines) in src/features/chapter-1-content/moduleIntroConfigs.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/chapter-1-content/moduleIntroConfigs.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-2178dd0b3478cf75", "name": "Commented-code block (5 lines) in src/features/chapter-1-content/moduleAssetMaps.ts:22", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/chapter-1-content/moduleAssetMaps.ts:22"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bd32722e871df011", "name": "Commented-code block (5 lines) in src/features/chapter-1-content/LessonFlowScreen.tsx:187", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/chapter-1-content/LessonFlowScreen.tsx:187"}, "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-e1c0bc52fab2b1d4", "name": "Commented-code block (6 lines) in src/features/chapter-1-content/useChapterUIStore.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/chapter-1-content/useChapterUIStore.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-a949681703e480aa", "name": "Commented-code block (5 lines) in src/features/chapter-1-content/simulations/CompoundSimScreen.tsx:595", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/chapter-1-content/simulations/CompoundSimScreen.tsx:595"}, "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-7a2406af4f46bc35", "name": "Commented-code block (5 lines) in src/features/stock-analyst/StockAnalystScreen.tsx:470", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/stock-analyst/StockAnalystScreen.tsx:470"}, "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-5b1b02db443377df", "name": "Commented-code block (5 lines) in src/features/stock-analyst/components/LoadingBubble.tsx:228", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/stock-analyst/components/LoadingBubble.tsx:228"}, "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-e18e675fd057e7f0", "name": "Commented-code block (5 lines) in src/features/stock-analyst/components/AnalysisReadyToast.tsx:115", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/stock-analyst/components/AnalysisReadyToast.tsx:115"}, "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-a96b446a653b970c", "name": "Commented-code block (6 lines) in src/features/stock-analyst/components/DeepAnalysisCard.tsx:263", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/stock-analyst/components/DeepAnalysisCard.tsx:263"}, "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-866613371af9a824", "name": "Commented-code block (5 lines) in src/features/stock-analyst/components/IntroVideo.tsx:16", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/stock-analyst/components/IntroVideo.tsx: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-32b97542d35cc3e8", "name": "Commented-code block (6 lines) in src/features/stock-analyst/hooks/useAnalystSubmit.ts:54", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/stock-analyst/hooks/useAnalystSubmit.ts:54"}, "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-82114e18a473b57b", "name": "Commented-code block (5 lines) in src/features/pyramid/DuoLearnScreen.tsx:47", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/pyramid/DuoLearnScreen.tsx:47"}, "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-e066fd3a735783ef", "name": "Commented-code block (5 lines) in src/features/force-update/ForceUpdateScreen.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/force-update/ForceUpdateScreen.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-304f30053e8c1d4e", "name": "Commented-code block (5 lines) in src/features/sentence-exercise/TimelineOrderCard.tsx:285", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/sentence-exercise/TimelineOrderCard.tsx:285"}, "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-486d4682573687d9", "name": "Commented-code block (5 lines) in src/features/sentence-exercise/InteractiveRecallScreen.tsx:48", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/sentence-exercise/InteractiveRecallScreen.tsx:48"}, "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-d795c10fc0ad5404", "name": "Commented-code block (5 lines) in src/features/sentence-exercise/FillBlankCard.tsx:36", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/sentence-exercise/FillBlankCard.tsx:36"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5e6102fda3f97926", "name": "Commented-code block (5 lines) in src/features/inter-module-games/bullshit-swipe/BullshitSwipeCard.tsx:414", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/inter-module-games/bullshit-swipe/BullshitSwipeCard.tsx:414"}, "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-50d253108eb34c92", "name": "Commented-code block (6 lines) in src/features/inter-module-games/fomo-killer/FomoKillerCard.tsx:177", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/inter-module-games/fomo-killer/FomoKillerCard.tsx:177"}, "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-29e6e9719612ed3c", "name": "Commented-code block (5 lines) in src/features/shop/ShopItemCard.tsx:104", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/shop/ShopItemCard.tsx:104"}, "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-5b9ac2b9b5cd8c21", "name": "Commented-code block (5 lines) in src/features/chapter-0-content/chapter0Data.ts:19", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/chapter-0-content/chapter0Data.ts:19"}, "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-f5157d576009db08", "name": "Commented-code block (6 lines) in src/features/chapter-0-content/simulations/BarterPuzzleScreen.tsx:507", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/chapter-0-content/simulations/BarterPuzzleScreen.tsx:507"}, "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-2cd248cc4ded6355", "name": "Commented-code block (5 lines) in src/features/myth-or-tachles/MythFeedCard.tsx:98", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/myth-or-tachles/MythFeedCard.tsx:98"}, "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-9a82cf7d16234d20", "name": "21 env vars used in code but missing from .env.example", "shortDescription": {"text": "21 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `ADMIN_API_SECRET`, `AUTH_JWT_SECRET`, `BACKFILL_V1_ENABLED`, `BLOB_READ_WRITE_TOKEN`, `ELEVENLABS_AGENT_ID`, `EXPO_PUBLIC_ADMOB_REWARDED_ANDROID`, `EXPO_PUBLIC_ADMOB_REWARDED_IOS`, `EXPO_PUBLIC_DEV_API_PORT` + 13 more. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/23277"}, "properties": {"repository": "YoavRubin00/finpl", "repoUrl": "https://github.com/YoavRubin00/finpl", "branch": "main"}, "results": [{"ruleId": "scanner-bead75b0f9233e05", "level": "none", "message": {"text": "No API endpoints detected"}, "properties": {"repobilityId": "0f8bb852027c38f8", "scanner": "scanner-primary", "fingerprint": "bead75b0f9233e05", "layer": "api", "severity": "info", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-b33047cff90d6951", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 ops/legal-update-2026-06/send-emails.ts:138"}, "properties": {"repobilityId": "82b16ee967cf5dbc", "scanner": "scanner-primary", "fingerprint": "b33047cff90d6951", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3add0c85080c223b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 api/webhooks/revenuecat.ts:55"}, "properties": {"repobilityId": "a1275331e5f65fc7", "scanner": "scanner-primary", "fingerprint": "3add0c85080c223b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-86946629841256a9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-backfill-merge.ts:8"}, "properties": {"repobilityId": "e3054446c89f95be", "scanner": "scanner-primary", "fingerprint": "86946629841256a9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-61eb07bc89347ca4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-legacy-local-state.ts:7"}, "properties": {"repobilityId": "226f92a922af366d", "scanner": "scanner-primary", "fingerprint": "61eb07bc89347ca4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e0b5c370d2ee42dc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/generate-module-intro-audio.ts:96"}, "properties": {"repobilityId": "0e2833c8062a8dfc", "scanner": "scanner-primary", "fingerprint": "e0b5c370d2ee42dc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1308ff2a34892e93", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-jwt.ts:13"}, "properties": {"repobilityId": "9c1222c2bd3441e2", "scanner": "scanner-primary", "fingerprint": "1308ff2a34892e93", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-42e88196f8d44c74", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/daily-news-challenge/cron+api.ts:30"}, "properties": {"repobilityId": "ff9a41bafabdf54f", "scanner": "scanner-primary", "fingerprint": "42e88196f8d44c74", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d56e1684bb7776dc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/webhooks/revenuecat+api.ts:128"}, "properties": {"repobilityId": "1e0500a871c838c4", "scanner": "scanner-primary", "fingerprint": "d56e1684bb7776dc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5198311fbbb8d1bc", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 .claude/workflows/pre-release-audit.js:106"}, "properties": {"repobilityId": "4ced0c392cdcba75", "scanner": "scanner-primary", "fingerprint": "5198311fbbb8d1bc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-b4a06a247353bcca", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/sentry.ts:12"}, "properties": {"repobilityId": "73c0c5133fe3fb09", "scanner": "scanner-primary", "fingerprint": "b4a06a247353bcca", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-89e43c98a4e2f75b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/posthog.ts:21"}, "properties": {"repobilityId": "e8be652b8e2d6f7a", "scanner": "scanner-primary", "fingerprint": "89e43c98a4e2f75b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5546407bed80fa70", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/api/client.ts:67"}, "properties": {"repobilityId": "9214681dd5193d5e", "scanner": "scanner-primary", "fingerprint": "5546407bed80fa70", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ce9e55584813b6fe", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/hooks/useRewardedAd.ts:63"}, "properties": {"repobilityId": "05b87ad7afa283b3", "scanner": "scanner-primary", "fingerprint": "ce9e55584813b6fe", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-02f49b331e2fd0fd", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/features/chapter-intro/mindMapModuleMap.ts:34"}, "properties": {"repobilityId": "7a6c5c5c5e25a71b", "scanner": "scanner-primary", "fingerprint": "02f49b331e2fd0fd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-cb09955664d66ac7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 plugins/with-modular-podfile.js:68"}, "properties": {"repobilityId": "f3a3866946c3adee", "scanner": "scanner-primary", "fingerprint": "cb09955664d66ac7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-054dcd6e2cf72e5d", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/ai/stock-analyze-quick.ts:47"}, "properties": {"repobilityId": "75372fb45c2e8574", "scanner": "scanner-primary", "fingerprint": "054dcd6e2cf72e5d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/ai/stock-analyze-quick.ts"}, "region": {"startLine": 47}}}]}, {"ruleId": "scanner-4aefc34f6ce43562", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/ai/insights.ts:98"}, "properties": {"repobilityId": "60545e017ce497ac", "scanner": "scanner-primary", "fingerprint": "4aefc34f6ce43562", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/ai/insights.ts"}, "region": {"startLine": 98}}}]}, {"ruleId": "scanner-4b2a3375d33d9182", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/ai/quiz.ts:10"}, "properties": {"repobilityId": "cd8c9e5ffb9757d1", "scanner": "scanner-primary", "fingerprint": "4b2a3375d33d9182", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/ai/quiz.ts"}, "region": {"startLine": 10}}}]}, {"ruleId": "scanner-02d05a181266aab7", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/ai/chat.ts:28"}, "properties": {"repobilityId": "579f968374513810", "scanner": "scanner-primary", "fingerprint": "02d05a181266aab7", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/ai/chat.ts"}, "region": {"startLine": 28}}}]}, {"ruleId": "scanner-31965311f6759fff", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/ai/banner-tip.ts:35"}, "properties": {"repobilityId": "2744689d19b51cb9", "scanner": "scanner-primary", "fingerprint": "31965311f6759fff", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/ai/banner-tip.ts"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-1ca09446acd06497", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/ai/stock-analyze-deep.ts:56"}, "properties": {"repobilityId": "3d1c46f1768baa9c", "scanner": "scanner-primary", "fingerprint": "1ca09446acd06497", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/ai/stock-analyze-deep.ts"}, "region": {"startLine": 56}}}]}, {"ruleId": "scanner-97888aed710ede0b", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/auth/verify.ts:51"}, "properties": {"repobilityId": "461600428e363445", "scanner": "scanner-primary", "fingerprint": "97888aed710ede0b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/auth/verify.ts"}, "region": {"startLine": 51}}}]}, {"ruleId": "scanner-e28520ae38ebf03e", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/voice/session.ts:18"}, "properties": {"repobilityId": "e55bbaadfec4e553", "scanner": "scanner-primary", "fingerprint": "e28520ae38ebf03e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/voice/session.ts"}, "region": {"startLine": 18}}}]}, {"ruleId": "scanner-d8dd88205bedbd09", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/voice/usage.ts:23"}, "properties": {"repobilityId": "d97a21a797f6c26a", "scanner": "scanner-primary", "fingerprint": "d8dd88205bedbd09", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/voice/usage.ts"}, "region": {"startLine": 23}}}]}, {"ruleId": "scanner-a9b86c3b94b4e16b", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/_shared/withAuth.ts:22"}, "properties": {"repobilityId": "d359fa2b2a9ca4d9", "scanner": "scanner-primary", "fingerprint": "a9b86c3b94b4e16b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/_shared/withAuth.ts"}, "region": {"startLine": 22}}}]}, {"ruleId": "scanner-725e4d668c219806", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/dev-phone.mjs:10"}, "properties": {"repobilityId": "4ce90d0b1d86d279", "scanner": "scanner-primary", "fingerprint": "725e4d668c219806", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/dev-phone.mjs"}, "region": {"startLine": 10}}}]}, {"ruleId": "scanner-301b35ca2536ae9a", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/vercel-dev-local.mjs:22"}, "properties": {"repobilityId": "1db1e6d8ef6d55eb", "scanner": "scanner-primary", "fingerprint": "301b35ca2536ae9a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/vercel-dev-local.mjs"}, "region": {"startLine": 22}}}]}, {"ruleId": "scanner-a180032b8b0eb4ee", "level": "error", "message": {"text": "Insecure pattern 'exec_used' in scripts/db-diagram.mjs:91"}, "properties": {"repobilityId": "6d9884fa8cc464bf", "scanner": "scanner-primary", "fingerprint": "a180032b8b0eb4ee", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "exec_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/db-diagram.mjs"}, "region": {"startLine": 91}}}]}, {"ruleId": "scanner-0e4431fe34cb9c7b", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/db-diagram.mjs:14"}, "properties": {"repobilityId": "9538bbce773de4ef", "scanner": "scanner-primary", "fingerprint": "0e4431fe34cb9c7b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/db-diagram.mjs"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-cb639d9a10a47b23", "level": "note", "message": {"text": "package.json defines install-time lifecycle scripts"}, "properties": {"repobilityId": "edeab51902066991", "scanner": "scanner-primary", "fingerprint": "cb639d9a10a47b23", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "npm", "install-scripts"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4601e3ad3bb28677", "level": "warning", "message": {"text": "No CI/CD pipelines detected"}, "properties": {"repobilityId": "c3ee439bce2bc51e", "scanner": "scanner-primary", "fingerprint": "4601e3ad3bb28677", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-9dcf5cd099e4f206", "level": "note", "message": {"text": "Very large file: src/features/chapter-5-content/chapter5Data.ts (829 lines)"}, "properties": {"repobilityId": "16cc173b99430a5b", "scanner": "scanner-primary", "fingerprint": "9dcf5cd099e4f206", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d63178dc63c040f6", "level": "note", "message": {"text": "Very large file: src/features/daily-quests/DailyQuestsSheet.tsx (1343 lines)"}, "properties": {"repobilityId": "a71b8ae8b607532b", "scanner": "scanner-primary", "fingerprint": "d63178dc63c040f6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-5a9c56fa6d510130", "level": "note", "message": {"text": "Very large file: src/features/daily-challenges/dilemma-data.ts (1023 lines)"}, "properties": {"repobilityId": "0fffa83058ed2678", "scanner": "scanner-primary", "fingerprint": "5a9c56fa6d510130", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-568e875ea213b189", "level": "note", "message": {"text": "Very large file: src/features/chapter-4-content/chapter4Data.ts (2100 lines)"}, "properties": {"repobilityId": "b3a4495d47772385", "scanner": "scanner-primary", "fingerprint": "568e875ea213b189", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-2c927bf748b898ef", "level": "note", "message": {"text": "Very large file: src/features/chat/ChatScreen.tsx (1445 lines)"}, "properties": {"repobilityId": "89338e9750a16b46", "scanner": "scanner-primary", "fingerprint": "2c927bf748b898ef", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-df97b14723b3a94f", "level": "note", "message": {"text": "Very large file: src/features/assets/MarketScreen.tsx (1364 lines)"}, "properties": {"repobilityId": "57ebc846119dc46d", "scanner": "scanner-primary", "fingerprint": "df97b14723b3a94f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a0c2ece038516edc", "level": "note", "message": {"text": "Very large file: src/features/glossary/glossaryData.ts (960 lines)"}, "properties": {"repobilityId": "106e479266ec6852", "scanner": "scanner-primary", "fingerprint": "a0c2ece038516edc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-82a3d84a08dac7e0", "level": "note", "message": {"text": "Very large file: src/features/onboarding/ProfilingFlow.tsx (3582 lines)"}, "properties": {"repobilityId": "e166cc3e90de90a7", "scanner": "scanner-primary", "fingerprint": "82a3d84a08dac7e0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-79be9dbe8022e675", "level": "note", "message": {"text": "Very large file: src/features/chapter-1-content/LessonFlowScreen.tsx (6241 lines)"}, "properties": {"repobilityId": "f9b6991bcced27ef", "scanner": "scanner-primary", "fingerprint": "79be9dbe8022e675", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-bcbc802494e11883", "level": "note", "message": {"text": "Very large file: src/features/chapter-1-content/chapter1Data.ts (1574 lines)"}, "properties": {"repobilityId": "e492e3711363bec3", "scanner": "scanner-primary", "fingerprint": "bcbc802494e11883", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d36c8f28cbaf2fd6", "level": "note", "message": {"text": "Very large file: src/features/pyramid/DuoLearnScreen.tsx (3181 lines)"}, "properties": {"repobilityId": "ef75b76cda3e4572", "scanner": "scanner-primary", "fingerprint": "d36c8f28cbaf2fd6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-50c9eab915ac11b2", "level": "note", "message": {"text": "Very large file: src/features/macro-events/macroEventsData.ts (839 lines)"}, "properties": {"repobilityId": "22a6347a29afb87a", "scanner": "scanner-primary", "fingerprint": "50c9eab915ac11b2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-294acdf2145338f0", "level": "note", "message": {"text": "Very large file: src/features/shop/ShopScreen.tsx (1410 lines)"}, "properties": {"repobilityId": "88dd382e5e7e5d47", "scanner": "scanner-primary", "fingerprint": "294acdf2145338f0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6893a6c8b0861585", "level": "warning", "message": {"text": "Very low test-to-source ratio"}, "properties": {"repobilityId": "54a7de3f06314bf0", "scanner": "scanner-primary", "fingerprint": "6893a6c8b0861585", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "coverage"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "a56da58be2619926", "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": "24e7b120f0109695", "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": "161514e5f966b288", "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": "03a17d0bc42090dc", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-9d79c4077342a7d0", "level": "warning", "message": {"text": "Runtime service client appears to use placeholder configuration"}, "properties": {"repobilityId": "b721d08edf1c69bd", "scanner": "scanner-primary", "fingerprint": "9d79c4077342a7d0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "runtime-config", "service-client", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "2cae2bca92b0e440", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "warning", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "9a75d2025f26bf97", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "7aa5b5f762f061fd", "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": "80570a030ceaf7fe", "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": "49cb58092d83cc8f", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-17a6d73621ee96f8", "level": "error", "message": {"text": "Agent instruction/config may expose a secret: .claude/settings.json"}, "properties": {"repobilityId": "1464265ec8f68102", "scanner": "scanner-primary", "fingerprint": "17a6d73621ee96f8", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["agent-instructions", "secrets", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/settings.json"}, "region": {"startLine": 23}}}]}, {"ruleId": "scanner-14f869ac413a559f", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/\u05d5\u05d0\u05e8\u05df.md"}, "properties": {"repobilityId": "eec19cedc169447a", "scanner": "scanner-primary", "fingerprint": "14f869ac413a559f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/\u05d5\u05d0\u05e8\u05df.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1b81c215e887ef1b", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/agents/\u05d8\u05e8\u05e0\u05d3\u05d5\u05df.md"}, "properties": {"repobilityId": "c218fd9330385d9a", "scanner": "scanner-primary", "fingerprint": "1b81c215e887ef1b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/agents/\u05d8\u05e8\u05e0\u05d3\u05d5\u05df.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-19e850817d44e32f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 ops/legal-update-2026-06/send-emails.ts:81"}, "properties": {"repobilityId": "10a98f2a42f3dc0f", "scanner": "scanner-primary", "fingerprint": "19e850817d44e32f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c009c0f90d597cae", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 api/ai/insights.ts:199"}, "properties": {"repobilityId": "a2d4dcc9cb4968b7", "scanner": "scanner-primary", "fingerprint": "c009c0f90d597cae", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-316fe84eb30c2150", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 api/ai/quiz.ts:31"}, "properties": {"repobilityId": "93b22cae5f1556f8", "scanner": "scanner-primary", "fingerprint": "316fe84eb30c2150", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-02de5eee88f20346", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 api/ai/chat.ts:62"}, "properties": {"repobilityId": "030c01888fc7b4da", "scanner": "scanner-primary", "fingerprint": "02de5eee88f20346", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-522aeb8f53d7bb45", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 api/ai/banner-tip.ts:74"}, "properties": {"repobilityId": "0496dc84ec74b43a", "scanner": "scanner-primary", "fingerprint": "522aeb8f53d7bb45", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-710283278f0440b9", "level": "none", "message": {"text": "Commented-code block (5 lines) in api/ai/stock-analyze-deep.ts:81"}, "properties": {"repobilityId": "3e4ba63a49445cc8", "scanner": "scanner-primary", "fingerprint": "710283278f0440b9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e785c5956a9007cf", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 api/auth/link.ts:24"}, "properties": {"repobilityId": "922c00690870c0d6", "scanner": "scanner-primary", "fingerprint": "e785c5956a9007cf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-277851fe67f43fa7", "level": "none", "message": {"text": "Commented-code block (7 lines) in api/auth/verify.ts:97"}, "properties": {"repobilityId": "77646d8311bd5bed", "scanner": "scanner-primary", "fingerprint": "277851fe67f43fa7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-43c58c015b8a7cfa", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 api/auth/verify.ts:37"}, "properties": {"repobilityId": "3a18787e24247f87", "scanner": "scanner-primary", "fingerprint": "43c58c015b8a7cfa", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f77eb2ea2010ebd6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 api/trading/quote.ts:76"}, "properties": {"repobilityId": "8ba1e881ad1e4c7a", "scanner": "scanner-primary", "fingerprint": "f77eb2ea2010ebd6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-355be53e9c398b77", "level": "none", "message": {"text": "Commented-code block (6 lines) in api/_shared/sendDailyEmails.ts:91"}, "properties": {"repobilityId": "b60bf7cfcbc43715", "scanner": "scanner-primary", "fingerprint": "355be53e9c398b77", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5539a666994590d9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/generate-module-intro-audio.ts:48"}, "properties": {"repobilityId": "5f54e38be0b6134d", "scanner": "scanner-primary", "fingerprint": "5539a666994590d9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-180edcd712e931f3", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/migrate-local.mjs:1"}, "properties": {"repobilityId": "93afb8b99aa3f774", "scanner": "scanner-primary", "fingerprint": "180edcd712e931f3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-521101d499dba885", "level": "none", "message": {"text": "Commented-code block (8 lines) in scripts/vercel-dev-local.mjs:4"}, "properties": {"repobilityId": "8bdd915b1d272ad7", "scanner": "scanner-primary", "fingerprint": "521101d499dba885", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c587035ebd89a62d", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/db-diagram.mjs:4"}, "properties": {"repobilityId": "843d4215af53a00c", "scanner": "scanner-primary", "fingerprint": "c587035ebd89a62d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cb3e71fd27a406b0", "level": "none", "message": {"text": "Commented-code block (8 lines) in app/tower-defense-boss.tsx:12"}, "properties": {"repobilityId": "a756a22a2f6fbc82", "scanner": "scanner-primary", "fingerprint": "cb3e71fd27a406b0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e84e4470b32d146f", "level": "note", "message": {"text": "Legacy-named symbol `install_referrer_checked_v1` in app/_layout.tsx:471"}, "properties": {"repobilityId": "0782c5c508db9a54", "scanner": "scanner-primary", "fingerprint": "e84e4470b32d146f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-9330f636922443f2", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/_layout.tsx:233"}, "properties": {"repobilityId": "d47a7aff47a7de17", "scanner": "scanner-primary", "fingerprint": "9330f636922443f2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-36fe0c33b7f90625", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/interstitial/bullshit-ch0.tsx:87"}, "properties": {"repobilityId": "6af04286db1feacc", "scanner": "scanner-primary", "fingerprint": "36fe0c33b7f90625", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a1dc86f684176b46", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/api/sync/profile+api.ts:169"}, "properties": {"repobilityId": "4f5687f6cc215e1a", "scanner": "scanner-primary", "fingerprint": "a1dc86f684176b46", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-61cfb6aff04cf089", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/email/track-click+api.ts:9"}, "properties": {"repobilityId": "d8c06ff0e3f08df8", "scanner": "scanner-primary", "fingerprint": "61cfb6aff04cf089", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3e7bb4230f87e9b8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/ai/quiz+api.ts:36"}, "properties": {"repobilityId": "f065b200a966508e", "scanner": "scanner-primary", "fingerprint": "3e7bb4230f87e9b8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-33669333961a7e89", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/ai/payslip-analyze+api.ts:388"}, "properties": {"repobilityId": "b06cb6d2a7aa4f92", "scanner": "scanner-primary", "fingerprint": "33669333961a7e89", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-316559678a3feb7d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/ai/banner-tip+api.ts:76"}, "properties": {"repobilityId": "e2bbf093c2f51e8c", "scanner": "scanner-primary", "fingerprint": "316559678a3feb7d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c07a76f5d953347b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/ai/insights+api.ts:206"}, "properties": {"repobilityId": "da63e3b8d259af22", "scanner": "scanner-primary", "fingerprint": "c07a76f5d953347b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-40fbb3417442a3e7", "level": "none", "message": {"text": "Commented-code block (8 lines) in app/api/auth/verify+api.ts:108"}, "properties": {"repobilityId": "3b8cb52ae843a7ee", "scanner": "scanner-primary", "fingerprint": "40fbb3417442a3e7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-10c0b348b2d62ba1", "level": "none", "message": {"text": "Commented-code block (8 lines) in app/api/breaking-news/_lib.ts:105"}, "properties": {"repobilityId": "5068a838bd1a036b", "scanner": "scanner-primary", "fingerprint": "10c0b348b2d62ba1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cdc89b392a59b475", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/daily-news-challenge/today+api.ts:37"}, "properties": {"repobilityId": "9ca43a947565c54f", "scanner": "scanner-primary", "fingerprint": "cdc89b392a59b475", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-298bcd446bdb8c6f", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/daily-news-challenge/cron+api.ts:44"}, "properties": {"repobilityId": "70d5e91691adfcfa", "scanner": "scanner-primary", "fingerprint": "298bcd446bdb8c6f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fbb708f3de4b7ce1", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/api/daily-news-challenge/_lib.ts:245"}, "properties": {"repobilityId": "b07fa4fde3e70eb3", "scanner": "scanner-primary", "fingerprint": "fbb708f3de4b7ce1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7fd058343935c57e", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/api/trading/quote+api.ts:23"}, "properties": {"repobilityId": "7f7aaa7904348d4a", "scanner": "scanner-primary", "fingerprint": "7fd058343935c57e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b4af70c40fdd08da", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/trading/quote+api.ts:102"}, "properties": {"repobilityId": "2fc705607dcf4e9b", "scanner": "scanner-primary", "fingerprint": "b4af70c40fdd08da", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e3156ba106ec9d02", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/api/webhooks/revenuecat+api.ts:16"}, "properties": {"repobilityId": "358b81a273cf1ed9", "scanner": "scanner-primary", "fingerprint": "e3156ba106ec9d02", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9afb925481f48105", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/_shared/perplexityNews.ts:60"}, "properties": {"repobilityId": "9ea9d4984eaf241a", "scanner": "scanner-primary", "fingerprint": "9afb925481f48105", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cb51c876526e7dea", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/quest/swipe-game.tsx:18"}, "properties": {"repobilityId": "138608f092db06d0", "scanner": "scanner-primary", "fingerprint": "cb51c876526e7dea", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8aae9a69d77eaae0", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/bridge/index.tsx:4"}, "properties": {"repobilityId": "1ad442bc582075bd", "scanner": "scanner-primary", "fingerprint": "8aae9a69d77eaae0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e17ba209954d2932", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 .claude/workflows/code-efficiency-audit.js:218"}, "properties": {"repobilityId": "914f2dbf94a245e5", "scanner": "scanner-primary", "fingerprint": "e17ba209954d2932", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-804a6e3460c1c51a", "level": "none", "message": {"text": "Commented-code block (13 lines) in src/components/ui/AppIntroSplash.tsx:5"}, "properties": {"repobilityId": "82c6a386914c8c77", "scanner": "scanner-primary", "fingerprint": "804a6e3460c1c51a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dba13e8a0f55147f", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/ui/GlobalWealthHeader.tsx:210"}, "properties": {"repobilityId": "95adc075dc1211e5", "scanner": "scanner-primary", "fingerprint": "dba13e8a0f55147f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-accc3c37c404d553", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/components/ui/SharkCTAModals.tsx:148"}, "properties": {"repobilityId": "bc05baa3dcbd40ce", "scanner": "scanner-primary", "fingerprint": "accc3c37c404d553", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f63ce732fd97d322", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/ui/SharkLoveModal.tsx:67"}, "properties": {"repobilityId": "4cd1d3186d75db2f", "scanner": "scanner-primary", "fingerprint": "f63ce732fd97d322", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1dab1ff4ff6f78d2", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/queryClient.ts:11"}, "properties": {"repobilityId": "d4bc1cb6b579353d", "scanner": "scanner-primary", "fingerprint": "1dab1ff4ff6f78d2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1d673239cad7137c", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/version.ts:7"}, "properties": {"repobilityId": "54408acba198ec01", "scanner": "scanner-primary", "fingerprint": "1d673239cad7137c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c45ed5e60b6c9510", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/auth/lifecycle.ts:104"}, "properties": {"repobilityId": "cd81c3aa7a45ca59", "scanner": "scanner-primary", "fingerprint": "c45ed5e60b6c9510", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2ae80c6c6f37ac5d", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/analytics/events.ts:5"}, "properties": {"repobilityId": "d6b6dcf6a200910c", "scanner": "scanner-primary", "fingerprint": "2ae80c6c6f37ac5d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fdb8092ec4a06fe5", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/api/client.ts:21"}, "properties": {"repobilityId": "ff7bdc1815d5557f", "scanner": "scanner-primary", "fingerprint": "fdb8092ec4a06fe5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3fe5e93d655dd9a1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/api/client.ts:70"}, "properties": {"repobilityId": "cd788082293fb564", "scanner": "scanner-primary", "fingerprint": "3fe5e93d655dd9a1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-196d6f170d7e87ae", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/hooks/useSoundEffect.ts:17"}, "properties": {"repobilityId": "9491bd7a254306bc", "scanner": "scanner-primary", "fingerprint": "196d6f170d7e87ae", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3389b927c4482765", "level": "none", "message": {"text": "Commented-code block (12 lines) in src/hooks/useModulePrefetch.ts:33"}, "properties": {"repobilityId": "50e79eb6a80f1b33", "scanner": "scanner-primary", "fingerprint": "3389b927c4482765", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fd8ea9132fecdf51", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/hooks/useRewardedAd.ts:69"}, "properties": {"repobilityId": "d76314e5883fe33c", "scanner": "scanner-primary", "fingerprint": "fd8ea9132fecdf51", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fbd5ccafabd6a93d", "level": "none", "message": {"text": "Commented-code block (15 lines) in src/hooks/useIntroAudio.ts:25"}, "properties": {"repobilityId": "757f751c61775619", "scanner": "scanner-primary", "fingerprint": "fbd5ccafabd6a93d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-af23156ee379bb34", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/hooks/useStreakCelebration.tsx:86"}, "properties": {"repobilityId": "f62161682c4fb822", "scanner": "scanner-primary", "fingerprint": "af23156ee379bb34", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c8ce9a4e18d13a80", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/services/revenueCat.ts:10"}, "properties": {"repobilityId": "aab546c8e38cb61a", "scanner": "scanner-primary", "fingerprint": "c8ce9a4e18d13a80", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1406b2633bd42b90", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/db/schema.ts:329"}, "properties": {"repobilityId": "9d75ab5602e7c3ed", "scanner": "scanner-primary", "fingerprint": "1406b2633bd42b90", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a11ffdc207be4b55", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/db/apiBase.ts:24"}, "properties": {"repobilityId": "f9d847fd158b3538", "scanner": "scanner-primary", "fingerprint": "a11ffdc207be4b55", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e611e187a8057e81", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/db/sync/syncModuleProgress.ts:22"}, "properties": {"repobilityId": "e333dec8a83a797e", "scanner": "scanner-primary", "fingerprint": "e611e187a8057e81", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6ce8d3f05c432e18", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/db/sync/syncPaperTrading.ts:63"}, "properties": {"repobilityId": "1f96b1626b84f861", "scanner": "scanner-primary", "fingerprint": "6ce8d3f05c432e18", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-805b7a7abd5eadae", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/db/sync/syncReferral.ts:78"}, "properties": {"repobilityId": "ec1753ab037892b5", "scanner": "scanner-primary", "fingerprint": "805b7a7abd5eadae", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d771b7f605406c44", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/db/sync/syncCrowdQuestion.ts:25"}, "properties": {"repobilityId": "73f2642c677b50c9", "scanner": "scanner-primary", "fingerprint": "d771b7f605406c44", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-063d1033acdcd69c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/db/sync/syncUserProfile.ts:33"}, "properties": {"repobilityId": "9cca6bb3377f3950", "scanner": "scanner-primary", "fingerprint": "063d1033acdcd69c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-95e6c94f49d59209", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/db/sync/syncInventory.ts:13"}, "properties": {"repobilityId": "3eeb0b16734f8ae6", "scanner": "scanner-primary", "fingerprint": "95e6c94f49d59209", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b8cb314bc70f1bfd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/db/sync/syncBandit.ts:23"}, "properties": {"repobilityId": "c8fdcec04b772fef", "scanner": "scanner-primary", "fingerprint": "b8cb314bc70f1bfd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2ec4a1a1107da679", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/features/topic-learning/useTopicTreeAssetPrefetch.ts:69"}, "properties": {"repobilityId": "4ffadbf54a48e28e", "scanner": "scanner-primary", "fingerprint": "2ec4a1a1107da679", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d65978e559adf694", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/topic-learning/topicSvgs.ts:142"}, "properties": {"repobilityId": "25ffaa6ad4caa8ef", "scanner": "scanner-primary", "fingerprint": "d65978e559adf694", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0ec071f81b655c08", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/topic-learning/ChestCelebrationModal.tsx:120"}, "properties": {"repobilityId": "d445c1cbff1a860f", "scanner": "scanner-primary", "fingerprint": "0ec071f81b655c08", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ac76c4336ca3e5f0", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/topic-learning/pathScenes.ts:33"}, "properties": {"repobilityId": "c8e3c1061b969364", "scanner": "scanner-primary", "fingerprint": "ac76c4336ca3e5f0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-abcb11be9282d365", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/topic-learning/TopicChatScreen.tsx:112"}, "properties": {"repobilityId": "9eedf03287a2a405", "scanner": "scanner-primary", "fingerprint": "abcb11be9282d365", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-74dfd198c28839a3", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/topic-learning/moduleGameMap.ts:46"}, "properties": {"repobilityId": "ec46de203bd34824", "scanner": "scanner-primary", "fingerprint": "74dfd198c28839a3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-950ab8bb09fb62e3", "level": "none", "message": {"text": "Commented-code block (11 lines) in src/features/topic-learning/TopicTreeAccordion.tsx:120"}, "properties": {"repobilityId": "e5cd2c7b145cde33", "scanner": "scanner-primary", "fingerprint": "950ab8bb09fb62e3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8978a13727798537", "level": "none", "message": {"text": "Commented-code block (22 lines) in src/features/topic-learning/topicResolver.ts:18"}, "properties": {"repobilityId": "d9c9722af22d7ef4", "scanner": "scanner-primary", "fingerprint": "8978a13727798537", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5583e42fa746dc75", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/topic-learning/components/TopicChip.tsx:100"}, "properties": {"repobilityId": "e94720093e7ab079", "scanner": "scanner-primary", "fingerprint": "5583e42fa746dc75", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-587343b9668afeae", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/topic-learning/components/ModuleTopicLayout.tsx:20"}, "properties": {"repobilityId": "47286e94bae6aa82", "scanner": "scanner-primary", "fingerprint": "587343b9668afeae", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0c300c695c7bc52a", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/financial-tools/components/ToolTutorialOverlay.tsx:118"}, "properties": {"repobilityId": "34261770276ee779", "scanner": "scanner-primary", "fingerprint": "0c300c695c7bc52a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0b554d10b2d5c10d", "level": "note", "message": {"text": "Legacy-named symbol `streak_repair_offer_v1` in src/features/bandit/banditConfig.ts:35"}, "properties": {"repobilityId": "26a6d76f744aedf3", "scanner": "scanner-primary", "fingerprint": "0b554d10b2d5c10d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-c5e016b874ada1ff", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/features/bandit/useBanditStore.ts:49"}, "properties": {"repobilityId": "e99a3c599f319d60", "scanner": "scanner-primary", "fingerprint": "c5e016b874ada1ff", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f727eb776c642f5e", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/trading-hub/marketApiService.ts:6"}, "properties": {"repobilityId": "7b96e88936d6bc79", "scanner": "scanner-primary", "fingerprint": "f727eb776c642f5e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-23743a4354acc3e2", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/trading-hub/TradingHubScreen.tsx:372"}, "properties": {"repobilityId": "6368fa01bfa1a814", "scanner": "scanner-primary", "fingerprint": "23743a4354acc3e2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a02161caec28601b", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/features/trading-hub/TradingChart.tsx:38"}, "properties": {"repobilityId": "17c8254fb79ac5b9", "scanner": "scanner-primary", "fingerprint": "a02161caec28601b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dfb1431107a32049", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/trading-hub/chartHtml.ts:82"}, "properties": {"repobilityId": "b729669cf0a24c6b", "scanner": "scanner-primary", "fingerprint": "dfb1431107a32049", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e8d37d3ce765cde1", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/monetization/monetizationNotificationCopy.ts:11"}, "properties": {"repobilityId": "c9ff11269b87a538", "scanner": "scanner-primary", "fingerprint": "e8d37d3ce765cde1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d71126162c267294", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/shark-dilemma/VideoSharkDilemmaCard.tsx:64"}, "properties": {"repobilityId": "0b5e0f938ec74f8c", "scanner": "scanner-primary", "fingerprint": "d71126162c267294", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4e185e581dfefaa2", "level": "note", "message": {"text": "Legacy-named symbol `shark_meta_v1` in src/features/email/emailTemplates.ts:353"}, "properties": {"repobilityId": "4fe9ef5fa48ddb30", "scanner": "scanner-primary", "fingerprint": "4e185e581dfefaa2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-36f1924d7ffd77b3", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/email/emailTemplates.ts:317"}, "properties": {"repobilityId": "c496c93f8b7f3339", "scanner": "scanner-primary", "fingerprint": "36f1924d7ffd77b3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9530f486b3684d86", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/email/parentalConsentEmail.ts:148"}, "properties": {"repobilityId": "6c16845fea926005", "scanner": "scanner-primary", "fingerprint": "9530f486b3684d86", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d0624f892a1700b9", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/auth/LoginScreen.tsx:92"}, "properties": {"repobilityId": "2c3e4fbd60afab54", "scanner": "scanner-primary", "fingerprint": "d0624f892a1700b9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e6663149364c9f6a", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/auth/PostWalkthroughRegisterCTA.tsx:1"}, "properties": {"repobilityId": "91912dc02670d8f4", "scanner": "scanner-primary", "fingerprint": "e6663149364c9f6a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f90f7f3b6f95c3e7", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/auth/useAppleAuth.ts:115"}, "properties": {"repobilityId": "ebc7be5b1340a81a", "scanner": "scanner-primary", "fingerprint": "f90f7f3b6f95c3e7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d49be93414591fee", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/auth/RegisterScreen.tsx:105"}, "properties": {"repobilityId": "68f55da0b68723fb", "scanner": "scanner-primary", "fingerprint": "d49be93414591fee", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fb1c17fb50abf7ed", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/auth/ModuleEndSignupGate.tsx:1"}, "properties": {"repobilityId": "e2a2b900a1e5dcb1", "scanner": "scanner-primary", "fingerprint": "fb1c17fb50abf7ed", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5a946197e7e2faae", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/auth/useAuthStore.ts:130"}, "properties": {"repobilityId": "bbf89fff7e0c7e39", "scanner": "scanner-primary", "fingerprint": "5a946197e7e2faae", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f32a2cb21aaaac65", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/auth/useGoogleAuth.ts:168"}, "properties": {"repobilityId": "c6ed06b5844f1e48", "scanner": "scanner-primary", "fingerprint": "f32a2cb21aaaac65", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-307c856fca813f28", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/ai-personalization/analyzeProfile.ts:108"}, "properties": {"repobilityId": "dda6baba06fe6f9e", "scanner": "scanner-primary", "fingerprint": "307c856fca813f28", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-00581c11adc604ba", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/subscription/UpgradeModal.tsx:84"}, "properties": {"repobilityId": "6cf528fd5c8d00d6", "scanner": "scanner-primary", "fingerprint": "00581c11adc604ba", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-74c7a316d0e0366a", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/features/subscription/subscriptionConstants.ts:16"}, "properties": {"repobilityId": "9abd23f2d7999676", "scanner": "scanner-primary", "fingerprint": "74c7a316d0e0366a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7bc5521a61c77339", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/subscription/useUsageStore.ts:6"}, "properties": {"repobilityId": "1ae4c3e8159f4cbf", "scanner": "scanner-primary", "fingerprint": "7bc5521a61c77339", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-08f50584d8e16819", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/subscription/PricingScreen.tsx:82"}, "properties": {"repobilityId": "d38252532c6a8d4a", "scanner": "scanner-primary", "fingerprint": "08f50584d8e16819", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a4b5165853b84817", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/the-bridge/BridgeScreen.tsx:223"}, "properties": {"repobilityId": "fe0ca2924abbba73", "scanner": "scanner-primary", "fingerprint": "a4b5165853b84817", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8e173a18f24ab741", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/the-bridge/bridgeData.ts:85"}, "properties": {"repobilityId": "c98e7b45f1d8e4b7", "scanner": "scanner-primary", "fingerprint": "8e173a18f24ab741", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3a61554f67756c54", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/ai-insights/useAIInsightBanner.ts:31"}, "properties": {"repobilityId": "32af7c22efa25b16", "scanner": "scanner-primary", "fingerprint": "3a61554f67756c54", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6d37dc063f046e86", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/ai-insights/AIInsightsScreen.tsx:86"}, "properties": {"repobilityId": "b147c8a2c847c9ad", "scanner": "scanner-primary", "fingerprint": "6d37dc063f046e86", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d8130ee4e82ccccb", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/chapter-5-content/simulations/realEstateData.ts:51"}, "properties": {"repobilityId": "4649dda289de39a7", "scanner": "scanner-primary", "fingerprint": "d8130ee4e82ccccb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-16ff0403e37da36b", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/chapter-5-content/simulations/fireCalcData.ts:12"}, "properties": {"repobilityId": "01a15b266c170d9c", "scanner": "scanner-primary", "fingerprint": "16ff0403e37da36b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b6cf8559934d5e21", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/finfeed/minigames/bullshit-swipe/BullshitSwipeCard.tsx:421"}, "properties": {"repobilityId": "67ce62f0de1cb937", "scanner": "scanner-primary", "fingerprint": "b6cf8559934d5e21", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-310c33584810810e", "level": "none", "message": {"text": "Commented-code block (11 lines) in src/features/finfeed/minigames/shared/FeedGameShell.tsx:107"}, "properties": {"repobilityId": "11cc6bc854665e66", "scanner": "scanner-primary", "fingerprint": "310c33584810810e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-98c4fdda0392fc9f", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/finfeed/minigames/fomo-killer/FomoKillerCard.tsx:177"}, "properties": {"repobilityId": "3373697ac9ed03d1", "scanner": "scanner-primary", "fingerprint": "98c4fdda0392fc9f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2900bd7fee1a2603", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/premium-learning/data.ts:368"}, "properties": {"repobilityId": "f6a35284ae7bf839", "scanner": "scanner-primary", "fingerprint": "2900bd7fee1a2603", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9f174476e3195504", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/pearls/PearlNode.tsx:272"}, "properties": {"repobilityId": "9ccda7db6a8412f4", "scanner": "scanner-primary", "fingerprint": "9f174476e3195504", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-76bb85f3bb303047", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/pearls/PearlSheet.tsx:143"}, "properties": {"repobilityId": "7632fd0a23085202", "scanner": "scanner-primary", "fingerprint": "76bb85f3bb303047", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-66b04bd95d75b659", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/features/pearls/pearlContentMap.ts:54"}, "properties": {"repobilityId": "57d632edd4069bf5", "scanner": "scanner-primary", "fingerprint": "66b04bd95d75b659", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6b594ecb5367dc15", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/pearls/pearlConfig.ts:99"}, "properties": {"repobilityId": "2131310008012c66", "scanner": "scanner-primary", "fingerprint": "6b594ecb5367dc15", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e22c1aef450a2c48", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/pearls/stages/PearlGameStage.tsx:70"}, "properties": {"repobilityId": "5f8f1da8c3d06f5b", "scanner": "scanner-primary", "fingerprint": "e22c1aef450a2c48", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6aab5e9d8cbe0ff2", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/pearls/stages/PearlSwipeStage.tsx:4"}, "properties": {"repobilityId": "4d6858966f440824", "scanner": "scanner-primary", "fingerprint": "6aab5e9d8cbe0ff2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0d0c0be223680ca2", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/features/pearls/stages/PearlScenarioStage.tsx:54"}, "properties": {"repobilityId": "0fa9a5edd6513c87", "scanner": "scanner-primary", "fingerprint": "0d0c0be223680ca2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-582692a37268e5df", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/pearls/stages/PearlVideoStage.tsx:27"}, "properties": {"repobilityId": "70aa1be1ef806454", "scanner": "scanner-primary", "fingerprint": "582692a37268e5df", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8bab7f5083568ced", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/pearls/stages/cards/FeedTradingNudgeCard.tsx:106"}, "properties": {"repobilityId": "c9e76a0d8d5e00b7", "scanner": "scanner-primary", "fingerprint": "8bab7f5083568ced", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-180bc0e6649284ea", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/pearls/stages/cards/FeedWhatsAppNudgeCard.tsx:191"}, "properties": {"repobilityId": "452a3355971e29e0", "scanner": "scanner-primary", "fingerprint": "180bc0e6649284ea", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1cff257142ae9dda", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/pearls/stages/cards/FeedReferralNudgeCard.tsx:99"}, "properties": {"repobilityId": "ea4cba79e7bbe19c", "scanner": "scanner-primary", "fingerprint": "1cff257142ae9dda", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a339c9e83242efe7", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/daily-quests/useDailyQuestsStore.ts:178"}, "properties": {"repobilityId": "392717cff3f5bc39", "scanner": "scanner-primary", "fingerprint": "a339c9e83242efe7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0daa43937b64cda5", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/daily-quests/daily-quest-types.ts:95"}, "properties": {"repobilityId": "d8bd25fe5c64784a", "scanner": "scanner-primary", "fingerprint": "0daa43937b64cda5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b36d5e4e971c4890", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/daily-quests/DailyQuestsSheet.tsx:43"}, "properties": {"repobilityId": "e256524cc5b49c1b", "scanner": "scanner-primary", "fingerprint": "b36d5e4e971c4890", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-caaf8329f16866e2", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/features/podcast-segment/PodcastSegmentScreen.tsx:142"}, "properties": {"repobilityId": "72786d8ab040c21e", "scanner": "scanner-primary", "fingerprint": "caaf8329f16866e2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b8b232517a10634b", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/podcast-segment/PodcastSummaryCard.tsx:126"}, "properties": {"repobilityId": "54a608cdbbb4340d", "scanner": "scanner-primary", "fingerprint": "b8b232517a10634b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e19089d6f3116809", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/podcast-segment/PodcastIntroCard.tsx:56"}, "properties": {"repobilityId": "83a15c9b709d596f", "scanner": "scanner-primary", "fingerprint": "e19089d6f3116809", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-50b098416e4a309e", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/podcast-segment/usePodcastPlayer.ts:103"}, "properties": {"repobilityId": "57e3c54fa03c2777", "scanner": "scanner-primary", "fingerprint": "50b098416e4a309e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d723062e872c9bd6", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/daily-challenges/SwipeGameCard.tsx:79"}, "properties": {"repobilityId": "e1fe83decfe5d1f2", "scanner": "scanner-primary", "fingerprint": "d723062e872c9bd6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c12e86d61fb7ad7b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/breaking-news/breakingNewsApi.ts:52"}, "properties": {"repobilityId": "4adffb3df4e3ea47", "scanner": "scanner-primary", "fingerprint": "c12e86d61fb7ad7b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-23b764d9f69bcc06", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/breaking-news/BreakingNewsScreen.tsx:129"}, "properties": {"repobilityId": "3b0da9ce6dcc8232", "scanner": "scanner-primary", "fingerprint": "23b764d9f69bcc06", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0373b9b96bb6038d", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/chapter-4-content/components/TA125WarRecoveryChart.tsx:492"}, "properties": {"repobilityId": "a7ca0f50229729d0", "scanner": "scanner-primary", "fingerprint": "0373b9b96bb6038d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-aff677f071389639", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/chapter-4-content/simulations/priceValueData.ts:23"}, "properties": {"repobilityId": "906b9d082dc22864", "scanner": "scanner-primary", "fingerprint": "aff677f071389639", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f92136008b65dbe5", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/chat/MarkdownText.tsx:16"}, "properties": {"repobilityId": "b5e74c91534e97fc", "scanner": "scanner-primary", "fingerprint": "f92136008b65dbe5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-81f5ec2bc754f75d", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/chat/buildChatPrompt.ts:60"}, "properties": {"repobilityId": "b89f06b1ff66c0e3", "scanner": "scanner-primary", "fingerprint": "81f5ec2bc754f75d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e07a813a310336d7", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/chat/ChatScreen.tsx:99"}, "properties": {"repobilityId": "1d2abed6e8057552", "scanner": "scanner-primary", "fingerprint": "e07a813a310336d7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-74641b5cec8dd17b", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/chat/generateFollowups.ts:66"}, "properties": {"repobilityId": "ad864725e4772a6d", "scanner": "scanner-primary", "fingerprint": "74641b5cec8dd17b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9b861005ad197406", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/more/MoreScreen.tsx:224"}, "properties": {"repobilityId": "4f1c25cd3d8f6c4a", "scanner": "scanner-primary", "fingerprint": "9b861005ad197406", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-73fced13949af153", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/social/ReferralScreen.tsx:4"}, "properties": {"repobilityId": "6f14aad8d1c9a883", "scanner": "scanner-primary", "fingerprint": "73fced13949af153", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5df37e482050d9e0", "level": "note", "message": {"text": "Legacy-named symbol `pending_referral_code_v1` in src/features/social/InviteRedemptionScreen.tsx:32"}, "properties": {"repobilityId": "a19733ab2d2b9f1c", "scanner": "scanner-primary", "fingerprint": "5df37e482050d9e0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-d559981cb66b196a", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/social/useReferralStore.ts:108"}, "properties": {"repobilityId": "63677219d12edd3c", "scanner": "scanner-primary", "fingerprint": "d559981cb66b196a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-37945783edd557f6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/live-market/LiveMarketCard.tsx:79"}, "properties": {"repobilityId": "e5b297bfa1fc83d3", "scanner": "scanner-primary", "fingerprint": "37945783edd557f6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-dca75146fbfaf9ab", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/live-news/LiveNewsQuizCard.tsx:92"}, "properties": {"repobilityId": "4e4b01e138dc29f3", "scanner": "scanner-primary", "fingerprint": "dca75146fbfaf9ab", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a8ccf2bccb73f15d", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/retention-loops/ComebackRewardModal.tsx:56"}, "properties": {"repobilityId": "fce2d377c18d3d51", "scanner": "scanner-primary", "fingerprint": "a8ccf2bccb73f15d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f0be9a8e27a60b77", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/retention-loops/useStreakSkinWatcher.ts:38"}, "properties": {"repobilityId": "325aac9dfd57d677", "scanner": "scanner-primary", "fingerprint": "f0be9a8e27a60b77", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cd82070a950e7c7e", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/features/daily-news-challenge/DailyNewsChallengeSheet.tsx:59"}, "properties": {"repobilityId": "686c95b692726d70", "scanner": "scanner-primary", "fingerprint": "cd82070a950e7c7e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-65c2f4fa0e4b9629", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/daily-news-challenge/DailyNewsChallengeSheet.tsx:152"}, "properties": {"repobilityId": "aff838d181fe480b", "scanner": "scanner-primary", "fingerprint": "65c2f4fa0e4b9629", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4165a89772cb5e3b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/daily-news-challenge/dailyNewsChallengeApi.ts:30"}, "properties": {"repobilityId": "05b2f74324df3c14", "scanner": "scanner-primary", "fingerprint": "4165a89772cb5e3b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-059c800c5b26aec4", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/daily-news-challenge/useDailyNewsChallengeStore.ts:213"}, "properties": {"repobilityId": "57f2eda514096be6", "scanner": "scanner-primary", "fingerprint": "059c800c5b26aec4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-38549dde63a83b1e", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/daily-news-challenge/components/ChallengePage.tsx:47"}, "properties": {"repobilityId": "2fa89a08bad8f828", "scanner": "scanner-primary", "fingerprint": "38549dde63a83b1e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6bac8e40e7d3e6d8", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/daily-news-challenge/components/ItemChatOverlay.tsx:103"}, "properties": {"repobilityId": "eddb1359ab715b3f", "scanner": "scanner-primary", "fingerprint": "6bac8e40e7d3e6d8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a69ad8ede7e2b401", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/daily-news-challenge/components/RecapCard.tsx:132"}, "properties": {"repobilityId": "523a72c631845fdd", "scanner": "scanner-primary", "fingerprint": "a69ad8ede7e2b401", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7777ee577997ef01", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/onboarding/SignupGateStep.tsx:1"}, "properties": {"repobilityId": "3b0c7afc6020f980", "scanner": "scanner-primary", "fingerprint": "7777ee577997ef01", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-330beabbb2cd15d8", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/onboarding/AppWalkthroughOverlay.tsx:155"}, "properties": {"repobilityId": "112a5c4d416b72ce", "scanner": "scanner-primary", "fingerprint": "330beabbb2cd15d8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b59f14a8c2135420", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/onboarding/ProfilingFlow.tsx:972"}, "properties": {"repobilityId": "ad292f52ff389306", "scanner": "scanner-primary", "fingerprint": "b59f14a8c2135420", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cafa6c5fc2e64092", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/economy/useStreak.ts:91"}, "properties": {"repobilityId": "dfe87be0d34e88e6", "scanner": "scanner-primary", "fingerprint": "cafa6c5fc2e64092", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ba8a9cc239bbe80b", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/features/economy/useEconomyUIStore.ts:36"}, "properties": {"repobilityId": "29dc99a6cf786128", "scanner": "scanner-primary", "fingerprint": "ba8a9cc239bbe80b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-59afe965803c6a8f", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/features/economy/useCompletedModulesStore.ts:5"}, "properties": {"repobilityId": "1e7bdf6de09240dd", "scanner": "scanner-primary", "fingerprint": "59afe965803c6a8f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ce0ddf89faf1f927", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/payslip-analyzer/PayslipAnalyzerScreen.tsx:178"}, "properties": {"repobilityId": "5dc103a062356bcc", "scanner": "scanner-primary", "fingerprint": "ce0ddf89faf1f927", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c20090ae3fcbbf89", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/payslip-analyzer/lib/clientValidate.ts:23"}, "properties": {"repobilityId": "9e43a2f4ad68523a", "scanner": "scanner-primary", "fingerprint": "c20090ae3fcbbf89", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d93c01c3d894b676", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/payslip-analyzer/lib/uploadFile.ts:53"}, "properties": {"repobilityId": "74899e2e5cc9cb28", "scanner": "scanner-primary", "fingerprint": "d93c01c3d894b676", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fbc9231f7df4482d", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/chapter-1-content/FlashcardInfographic.tsx:55"}, "properties": {"repobilityId": "204b39918ecc3e61", "scanner": "scanner-primary", "fingerprint": "fbc9231f7df4482d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-048a9236cb93e753", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/chapter-1-content/moduleIntroConfigs.ts:4"}, "properties": {"repobilityId": "7702da615a37e9c9", "scanner": "scanner-primary", "fingerprint": "048a9236cb93e753", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2178dd0b3478cf75", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/chapter-1-content/moduleAssetMaps.ts:22"}, "properties": {"repobilityId": "8ebdbb125071fa76", "scanner": "scanner-primary", "fingerprint": "2178dd0b3478cf75", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bd32722e871df011", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/chapter-1-content/LessonFlowScreen.tsx:187"}, "properties": {"repobilityId": "b8549dd57fee2856", "scanner": "scanner-primary", "fingerprint": "bd32722e871df011", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e1c0bc52fab2b1d4", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/chapter-1-content/useChapterUIStore.ts:3"}, "properties": {"repobilityId": "6fa9a4d86deeabe8", "scanner": "scanner-primary", "fingerprint": "e1c0bc52fab2b1d4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a949681703e480aa", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/chapter-1-content/simulations/CompoundSimScreen.tsx:595"}, "properties": {"repobilityId": "8210c7e8961be311", "scanner": "scanner-primary", "fingerprint": "a949681703e480aa", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7a2406af4f46bc35", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/stock-analyst/StockAnalystScreen.tsx:470"}, "properties": {"repobilityId": "6db87ea53349974c", "scanner": "scanner-primary", "fingerprint": "7a2406af4f46bc35", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5b1b02db443377df", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/stock-analyst/components/LoadingBubble.tsx:228"}, "properties": {"repobilityId": "bd78ca282a76713f", "scanner": "scanner-primary", "fingerprint": "5b1b02db443377df", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e18e675fd057e7f0", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/stock-analyst/components/AnalysisReadyToast.tsx:115"}, "properties": {"repobilityId": "bcee056fec6e4928", "scanner": "scanner-primary", "fingerprint": "e18e675fd057e7f0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a96b446a653b970c", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/stock-analyst/components/DeepAnalysisCard.tsx:263"}, "properties": {"repobilityId": "c1d5e9f6746528ff", "scanner": "scanner-primary", "fingerprint": "a96b446a653b970c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-866613371af9a824", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/stock-analyst/components/IntroVideo.tsx:16"}, "properties": {"repobilityId": "05c7abecbd35684a", "scanner": "scanner-primary", "fingerprint": "866613371af9a824", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-32b97542d35cc3e8", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/stock-analyst/hooks/useAnalystSubmit.ts:54"}, "properties": {"repobilityId": "1db30e8506d271a6", "scanner": "scanner-primary", "fingerprint": "32b97542d35cc3e8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-82114e18a473b57b", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/pyramid/DuoLearnScreen.tsx:47"}, "properties": {"repobilityId": "3ed64615f91bb2fc", "scanner": "scanner-primary", "fingerprint": "82114e18a473b57b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e066fd3a735783ef", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/force-update/ForceUpdateScreen.tsx:1"}, "properties": {"repobilityId": "3a80741f2f9ed781", "scanner": "scanner-primary", "fingerprint": "e066fd3a735783ef", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-304f30053e8c1d4e", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/sentence-exercise/TimelineOrderCard.tsx:285"}, "properties": {"repobilityId": "ef9e3ae7fd4ff3b5", "scanner": "scanner-primary", "fingerprint": "304f30053e8c1d4e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-486d4682573687d9", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/sentence-exercise/InteractiveRecallScreen.tsx:48"}, "properties": {"repobilityId": "9573b6fa800eb154", "scanner": "scanner-primary", "fingerprint": "486d4682573687d9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d795c10fc0ad5404", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/sentence-exercise/FillBlankCard.tsx:36"}, "properties": {"repobilityId": "2b0ffda99f625b1e", "scanner": "scanner-primary", "fingerprint": "d795c10fc0ad5404", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5e6102fda3f97926", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/inter-module-games/bullshit-swipe/BullshitSwipeCard.tsx:414"}, "properties": {"repobilityId": "ecfaba5577c33b0f", "scanner": "scanner-primary", "fingerprint": "5e6102fda3f97926", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-50d253108eb34c92", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/inter-module-games/fomo-killer/FomoKillerCard.tsx:177"}, "properties": {"repobilityId": "ef6082c38c6d507c", "scanner": "scanner-primary", "fingerprint": "50d253108eb34c92", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-29e6e9719612ed3c", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/shop/ShopItemCard.tsx:104"}, "properties": {"repobilityId": "875ca5ef241161d6", "scanner": "scanner-primary", "fingerprint": "29e6e9719612ed3c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5b9ac2b9b5cd8c21", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/chapter-0-content/chapter0Data.ts:19"}, "properties": {"repobilityId": "11249aef31800063", "scanner": "scanner-primary", "fingerprint": "5b9ac2b9b5cd8c21", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f5157d576009db08", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/chapter-0-content/simulations/BarterPuzzleScreen.tsx:507"}, "properties": {"repobilityId": "af3d21bd77354689", "scanner": "scanner-primary", "fingerprint": "f5157d576009db08", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2cd248cc4ded6355", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/myth-or-tachles/MythFeedCard.tsx:98"}, "properties": {"repobilityId": "ccfadc351fbeb833", "scanner": "scanner-primary", "fingerprint": "2cd248cc4ded6355", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9a82cf7d16234d20", "level": "note", "message": {"text": "21 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "2fad2cbef136ee78", "scanner": "scanner-primary", "fingerprint": "9a82cf7d16234d20", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}]}]}