{"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-cac4a8e17b1425e0", "name": "Stray `console.log` in TS/JS \u2014 app/api/suggestions/route.ts:176", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/suggestions/route.ts:176"}, "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-6a88396f7d31e185", "name": "Stray `console.log` in TS/JS \u2014 app/api/suggestions/generate-tags/route.ts:95", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/suggestions/generate-tags/route.ts:95"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8621f2d847346ce0", "name": "Stray `console.log` in TS/JS \u2014 app/api/recommend/route.ts:1348", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/recommend/route.ts:1348"}, "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-86a9c72e699405cf", "name": "Stray `console.log` in TS/JS \u2014 app/api/cron/vitality-check/route.ts:46", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/cron/vitality-check/route.ts:46"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b4d66c98d31c0f9e", "name": "Stray `console.log` in TS/JS \u2014 lib/place-vitality-check.ts:161", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 lib/place-vitality-check.ts:161"}, "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-166c8661160a6769", "name": "Stray `console.log` in TS/JS \u2014 lib/google-places-auto-save.ts:218", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 lib/google-places-auto-save.ts:218"}, "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-da2dd7dbdeb7fd65", "name": "Stray `console.log` in TS/JS \u2014 lib/hotpepper-sync-config.ts:498", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 lib/hotpepper-sync-config.ts:498"}, "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-4f3708f99a6cceb6", "name": "Stray `console.log` in TS/JS \u2014 lib/supabase-places.ts:335", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 lib/supabase-places.ts:335"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fb914f51e90c5c54", "name": "Stray `console.log` in TS/JS \u2014 lib/spatial-search.ts:263", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 lib/spatial-search.ts:263"}, "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-c7889b1247f23fdd", "name": "Stray `console.log` in TS/JS \u2014 moodgo/scripts/reset-project.js:53", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 moodgo/scripts/reset-project.js:53"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e3ac57f83c41df91", "name": "Stray `console.log` in TS/JS \u2014 moodgo/app/place.tsx:579", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 moodgo/app/place.tsx:579"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-166dff3c3df6a10e", "name": "ORM models found but no DB engine detected", "shortDescription": {"text": "ORM models found but no DB engine detected"}, "fullDescription": {"text": "The repo defines tables/models but no DB connection string was found. Likely lives in env vars or a config file the scanner didn't read."}, "properties": {"scanner": "scanner-primary", "layer": "data", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-52a8a3fffa653391", "name": "Possible secret in scripts/import-entertainment.mjs", "shortDescription": {"text": "Possible secret in scripts/import-entertainment.mjs"}, "fullDescription": {"text": "Detected pattern matching generic_api_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-a1b7f21980d641b9", "name": "Insecure pattern 'cors_wildcard' in app/api/photo-proxy/route.ts:10", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in app/api/photo-proxy/route.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-5eb398164b2d80e7", "name": "Possible secret in app/api/admin/places-debug/route.ts", "shortDescription": {"text": "Possible secret in app/api/admin/places-debug/route.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-bd4b3447518f129f", "name": "Possible secret in app/api/admin/retag-spots/route.ts", "shortDescription": {"text": "Possible secret in app/api/admin/retag-spots/route.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-ba169300b2862595", "name": "Possible secret in app/api/admin/places-migrate/route.ts", "shortDescription": {"text": "Possible secret in app/api/admin/places-migrate/route.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-5328160a238addbe", "name": "Possible secret in app/api/admin/places-register/route.ts", "shortDescription": {"text": "Possible secret in app/api/admin/places-register/route.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-e3028120d4e5b737", "name": "Possible secret in app/api/admin/place-candidates/route.ts", "shortDescription": {"text": "Possible secret in app/api/admin/place-candidates/route.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-308ea7005460b4d1", "name": "Possible secret in app/api/admin/retag-all/route.ts", "shortDescription": {"text": "Possible secret in app/api/admin/retag-all/route.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-bb6f17d6f8607f2c", "name": "Possible secret in app/admin/page.tsx", "shortDescription": {"text": "Possible secret in app/admin/page.tsx"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-6372cebde0220094", "name": "No auth library detected", "shortDescription": {"text": "No auth library detected"}, "fullDescription": {"text": "The scanner did not find any standard auth library (JWT, OAuth, NextAuth, Auth0, etc.). The repo has auth/admin/session surface indicators, so auth may live in custom code, in a separate service, or be missing."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4601e3ad3bb28677", "name": "No CI/CD pipelines detected", "shortDescription": {"text": "No CI/CD pipelines detected"}, "fullDescription": {"text": "No GitHub Actions, GitLab CI, or CircleCI configs found. Without CI you can't gate deploys on tests/lints."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-00314c2e7d8f3d42", "name": "Very large file: app/api/recommend/route.ts (8932 lines)", "shortDescription": {"text": "Very large file: app/api/recommend/route.ts (8932 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-5e05eafbf79ad1d4", "name": "Very large file: app/admin/page.tsx (7533 lines)", "shortDescription": {"text": "Very large file: app/admin/page.tsx (7533 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-190dc7e55c5dadfd", "name": "Very large file: app/admin/featured-pages/page.tsx (1274 lines)", "shortDescription": {"text": "Very large file: app/admin/featured-pages/page.tsx (1274 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-7b7b8edb49f16392", "name": "Very large file: app/admin/_components/PrefFeaturedPanel.tsx (996 lines)", "shortDescription": {"text": "Very large file: app/admin/_components/PrefFeaturedPanel.tsx (996 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-c38ffb47a7bbda66", "name": "Very large file: moodgo/components/GroupsView.tsx (2110 lines)", "shortDescription": {"text": "Very large file: moodgo/components/GroupsView.tsx (2110 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-30ebad72a3eea656", "name": "Very large file: moodgo/components/ResultsView.tsx (980 lines)", "shortDescription": {"text": "Very large file: moodgo/components/ResultsView.tsx (980 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-435567e9555fac72", "name": "Very large file: moodgo/components/FeatureScreen.tsx (2196 lines)", "shortDescription": {"text": "Very large file: moodgo/components/FeatureScreen.tsx (2196 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-b34641777d19f8f6", "name": "Very large file: moodgo/components/QuizFlow.tsx (1552 lines)", "shortDescription": {"text": "Very large file: moodgo/components/QuizFlow.tsx (1552 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-9ff9415b4b96a229", "name": "Very large file: moodgo/app/place.tsx (1165 lines)", "shortDescription": {"text": "Very large file: moodgo/app/place.tsx (1165 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-f84e75cbedac71fa", "name": "Very large file: moodgo/app/index.tsx (1235 lines)", "shortDescription": {"text": "Very large file: moodgo/app/index.tsx (1235 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": "1 test file(s) for 186 source file(s) (ratio 0.01). 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-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 75 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 168 placeholder/mock markers across 13 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. 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. 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-2c5f98b152cddb6d", "name": "Agent authority lacks a verifier contract: .claude/launch.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/launch.json"}, "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-9c866823d0c0b6f9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/import-entertainment.mjs:106", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/import-entertainment.mjs:106"}, "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-fddeff734062a2e7", "name": "Commented-code block (6 lines) in scripts/data-import/cleanup_focus_tag.py:3", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/data-import/cleanup_focus_tag.py: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-cc94624834f6ffa2", "name": "Commented-code block (6 lines) in scripts/data-import/import_records.py:3", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/data-import/import_records.py: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-c6b26a2cffabb79b", "name": "Commented-code block (5 lines) in app/api/contact/route.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/contact/route.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3f01bc0ac4271db3", "name": "Legacy-named symbol `featured_pages_v2` in app/api/featured-pages/route.ts:3", "shortDescription": {"text": "Legacy-named symbol `featured_pages_v2` in app/api/featured-pages/route.ts:3"}, "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-685777bc816d5238", "name": "Legacy-named symbol `featured_pages_v2` in app/api/featured-pages/spot/[id]/route.ts:31", "shortDescription": {"text": "Legacy-named symbol `featured_pages_v2` in app/api/featured-pages/spot/[id]/route.ts:31"}, "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-fa1a4125d4f02ead", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/suggestions/route.ts:350", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/suggestions/route.ts:350"}, "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-808f4984a6561508", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/suggestions/find-place/route.ts:39", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/suggestions/find-place/route.ts:39"}, "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-49abbe41e0c3d4f3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/photo-proxy/route.ts:124", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/photo-proxy/route.ts:124"}, "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-fb5b180be4535564", "name": "Legacy-named symbol `catch_copy` in app/api/featured/route.ts:62", "shortDescription": {"text": "Legacy-named symbol `catch_copy` in app/api/featured/route.ts:62"}, "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-1572626af13e37b6", "name": "Legacy-named symbol `catch_copy` in app/api/featured/[id]/route.ts:57", "shortDescription": {"text": "Legacy-named symbol `catch_copy` in app/api/featured/[id]/route.ts:57"}, "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-45d820efa0a54729", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/admin/google-bulk-import/route.ts:116", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/admin/google-bulk-import/route.ts:116"}, "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-41b7201ee18e8ff9", "name": "Legacy-named symbol `catch_copy` in app/api/admin/quickpost/route.ts:180", "shortDescription": {"text": "Legacy-named symbol `catch_copy` in app/api/admin/quickpost/route.ts:180"}, "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-d36b20a822ae2d12", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/admin/quickpost/route.ts:35", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/admin/quickpost/route.ts:35"}, "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-53fa918287851c52", "name": "Commented-code block (5 lines) in app/api/admin/bulk-delete-places/route.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/admin/bulk-delete-places/route.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-12032a898f5790c2", "name": "Commented-code block (19 lines) in app/api/admin/curated-spots/route.ts:12", "shortDescription": {"text": "Commented-code block (19 lines) in app/api/admin/curated-spots/route.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-d0a44fa5e60bf137", "name": "Legacy-named symbol `featured_pages_v2` in app/api/admin/featured-pages/route.ts:22", "shortDescription": {"text": "Legacy-named symbol `featured_pages_v2` in app/api/admin/featured-pages/route.ts:22"}, "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-c991172f3f6f3cdf", "name": "Legacy-named symbol `featured_pages_v2` in app/api/admin/featured-pages/[id]/route.ts:27", "shortDescription": {"text": "Legacy-named symbol `featured_pages_v2` in app/api/admin/featured-pages/[id]/route.ts:27"}, "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-dec7a88d0e8fdada", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/admin/retag-spots/route.ts:71", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/admin/retag-spots/route.ts:71"}, "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-2eea527cfdd7a119", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/admin/geocode-missing/route.ts:109", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/admin/geocode-missing/route.ts:109"}, "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-6e026d1dc6b8e985", "name": "Commented-code block (13 lines) in app/api/admin/places-register/route.ts:5", "shortDescription": {"text": "Commented-code block (13 lines) in app/api/admin/places-register/route.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-8a28776a152f3f3d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/admin/place-candidates/route.ts:176", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/admin/place-candidates/route.ts:176"}, "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-b7e071bd03d1d064", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/admin/manual-register/route.ts:14", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/admin/manual-register/route.ts:14"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-125e5eee2205dcb5", "name": "Legacy-named symbol `isProtectedLegacy` in app/api/recommend/route.ts:8731", "shortDescription": {"text": "Legacy-named symbol `isProtectedLegacy` in app/api/recommend/route.ts:8731"}, "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-ca1ef9b085c64e3c", "name": "Commented-code block (6 lines) in app/api/recommend/route.ts:286", "shortDescription": {"text": "Commented-code block (6 lines) in app/api/recommend/route.ts:286"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3cc47c18871d2554", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/recommend/route.ts:36", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/recommend/route.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-3561bc39c5657c37", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/place-detail/route.ts:53", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/place-detail/route.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-177774025f9e82dd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/mood-rating/route.ts:54", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/mood-rating/route.ts:54"}, "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-808c54da77271971", "name": "Commented-code block (5 lines) in app/api/spot-rating/route.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/spot-rating/route.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ec6bad06060e1e54", "name": "Commented-code block (7 lines) in app/api/spot-photo/route.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in app/api/spot-photo/route.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-377fb692b4cf8093", "name": "Commented-code block (6 lines) in app/api/client-error/route.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in app/api/client-error/route.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-40596c96e3b59446", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/geocode/route.ts:36", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/geocode/route.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-ca1e0e10d3572ea9", "name": "Commented-code block (9 lines) in app/api/spot-posts/route.ts:1", "shortDescription": {"text": "Commented-code block (9 lines) in app/api/spot-posts/route.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3716e3eeb593de1d", "name": "Legacy-named symbol `catch_copy` in app/admin/page.tsx:733", "shortDescription": {"text": "Legacy-named symbol `catch_copy` in app/admin/page.tsx:733"}, "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-85f48869339ef4c4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/page.tsx:828", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/page.tsx:828"}, "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-ef547df16f942908", "name": "Legacy-named symbol `catch_copy` in app/admin/featured-pages/page.tsx:126", "shortDescription": {"text": "Legacy-named symbol `catch_copy` in app/admin/featured-pages/page.tsx:126"}, "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-1253f5b39dce8de0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/featured-pages/page.tsx:1018", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/featured-pages/page.tsx:1018"}, "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-3e610fadaf06b668", "name": "Legacy-named symbol `catch_copy` in app/admin/_components/PrefFeaturedPanel.tsx:66", "shortDescription": {"text": "Legacy-named symbol `catch_copy` in app/admin/_components/PrefFeaturedPanel.tsx:66"}, "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-92c8ff50eaffaffd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/_components/PrefFeaturedPanel.tsx:638", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/_components/PrefFeaturedPanel.tsx:638"}, "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-f211763648930efc", "name": "Commented-code block (5 lines) in lib/place-vitality-check.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in lib/place-vitality-check.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-046abbc4b858c3a8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 lib/supabase-places.ts:97", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/supabase-places.ts:97"}, "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-3f863fc653479535", "name": "Commented-code block (5 lines) in lib/spatial-search.ts:236", "shortDescription": {"text": "Commented-code block (5 lines) in lib/spatial-search.ts:236"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ef2fd7faa57df324", "name": "Commented-code block (9 lines) in lib/search-filters.ts:117", "shortDescription": {"text": "Commented-code block (9 lines) in lib/search-filters.ts:117"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7d3d80f23d62c659", "name": "Legacy-named symbol `catch_copy` in moodgo/types/app.ts:144", "shortDescription": {"text": "Legacy-named symbol `catch_copy` in moodgo/types/app.ts:144"}, "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-36877cf06ea49db3", "name": "Legacy-named symbol `featured_pages_v2` in moodgo/components/FeatureScreen.tsx:189", "shortDescription": {"text": "Legacy-named symbol `featured_pages_v2` in moodgo/components/FeatureScreen.tsx:189"}, "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-852d5f9ed4760943", "name": "Commented-code block (8 lines) in moodgo/app/index.tsx:384", "shortDescription": {"text": "Commented-code block (8 lines) in moodgo/app/index.tsx:384"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1e7c1fc7bd1a1ec0", "name": "Legacy-named symbol `catch_copy` in moodgo/app/feature/[slug].tsx:29", "shortDescription": {"text": "Legacy-named symbol `catch_copy` in moodgo/app/feature/[slug].tsx:29"}, "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-24420d53786e0ab3", "name": "Legacy-named symbol `catch_copy` in moodgo/app/feature/spot/[id].tsx:34", "shortDescription": {"text": "Legacy-named symbol `catch_copy` in moodgo/app/feature/spot/[id].tsx:34"}, "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-ccd6f3eccf20d427", "name": "Commented-code block (5 lines) in moodgo/lib/sentry.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in moodgo/lib/sentry.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}}]}}, "automationDetails": {"id": "repobility/18781"}, "properties": {"repository": "sakaryu25/moodgo-copy", "repoUrl": "https://github.com/sakaryu25/moodgo-copy", "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-cac4a8e17b1425e0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/suggestions/route.ts:176"}, "properties": {"repobilityId": "2f62b8587c0a09e7", "scanner": "scanner-primary", "fingerprint": "cac4a8e17b1425e0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6a88396f7d31e185", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/suggestions/generate-tags/route.ts:95"}, "properties": {"repobilityId": "2c89f415b370d6d5", "scanner": "scanner-primary", "fingerprint": "6a88396f7d31e185", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8621f2d847346ce0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/recommend/route.ts:1348"}, "properties": {"repobilityId": "ebbe3a2fe9f2f3a9", "scanner": "scanner-primary", "fingerprint": "8621f2d847346ce0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-86a9c72e699405cf", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/cron/vitality-check/route.ts:46"}, "properties": {"repobilityId": "5a5d9ff643e35373", "scanner": "scanner-primary", "fingerprint": "86a9c72e699405cf", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b4d66c98d31c0f9e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 lib/place-vitality-check.ts:161"}, "properties": {"repobilityId": "5d0b7dd5ab2d1417", "scanner": "scanner-primary", "fingerprint": "b4d66c98d31c0f9e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-166c8661160a6769", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 lib/google-places-auto-save.ts:218"}, "properties": {"repobilityId": "7a05e2beec9389c3", "scanner": "scanner-primary", "fingerprint": "166c8661160a6769", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-da2dd7dbdeb7fd65", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 lib/hotpepper-sync-config.ts:498"}, "properties": {"repobilityId": "ab9bf713c4dce134", "scanner": "scanner-primary", "fingerprint": "da2dd7dbdeb7fd65", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4f3708f99a6cceb6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 lib/supabase-places.ts:335"}, "properties": {"repobilityId": "06be6bbddd864bb4", "scanner": "scanner-primary", "fingerprint": "4f3708f99a6cceb6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fb914f51e90c5c54", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 lib/spatial-search.ts:263"}, "properties": {"repobilityId": "6d9040da73e1dd3b", "scanner": "scanner-primary", "fingerprint": "fb914f51e90c5c54", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c7889b1247f23fdd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 moodgo/scripts/reset-project.js:53"}, "properties": {"repobilityId": "ec27e09a7af4063d", "scanner": "scanner-primary", "fingerprint": "c7889b1247f23fdd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e3ac57f83c41df91", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 moodgo/app/place.tsx:579"}, "properties": {"repobilityId": "c27a12b5b740e7f3", "scanner": "scanner-primary", "fingerprint": "e3ac57f83c41df91", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-166dff3c3df6a10e", "level": "warning", "message": {"text": "ORM models found but no DB engine detected"}, "properties": {"repobilityId": "cda36de65e114635", "scanner": "scanner-primary", "fingerprint": "166dff3c3df6a10e", "layer": "data", "severity": "medium", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-52a8a3fffa653391", "level": "error", "message": {"text": "Possible secret in scripts/import-entertainment.mjs"}, "properties": {"repobilityId": "c6fc164dccec96e8", "scanner": "scanner-primary", "fingerprint": "52a8a3fffa653391", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/import-entertainment.mjs"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-a1b7f21980d641b9", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in app/api/photo-proxy/route.ts:10"}, "properties": {"repobilityId": "c963305e26dd83f1", "scanner": "scanner-primary", "fingerprint": "a1b7f21980d641b9", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/api/photo-proxy/route.ts"}, "region": {"startLine": 10}}}]}, {"ruleId": "scanner-5eb398164b2d80e7", "level": "error", "message": {"text": "Possible secret in app/api/admin/places-debug/route.ts"}, "properties": {"repobilityId": "1ca5d69de6760aa5", "scanner": "scanner-primary", "fingerprint": "5eb398164b2d80e7", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/api/admin/places-debug/route.ts"}, "region": {"startLine": 7}}}]}, {"ruleId": "scanner-bd4b3447518f129f", "level": "error", "message": {"text": "Possible secret in app/api/admin/retag-spots/route.ts"}, "properties": {"repobilityId": "df5435f01674ffb6", "scanner": "scanner-primary", "fingerprint": "bd4b3447518f129f", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/api/admin/retag-spots/route.ts"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-ba169300b2862595", "level": "error", "message": {"text": "Possible secret in app/api/admin/places-migrate/route.ts"}, "properties": {"repobilityId": "0fc25cc0fc6a37e2", "scanner": "scanner-primary", "fingerprint": "ba169300b2862595", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/api/admin/places-migrate/route.ts"}, "region": {"startLine": 12}}}]}, {"ruleId": "scanner-5328160a238addbe", "level": "error", "message": {"text": "Possible secret in app/api/admin/places-register/route.ts"}, "properties": {"repobilityId": "82ba2db82b33e6dc", "scanner": "scanner-primary", "fingerprint": "5328160a238addbe", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/api/admin/places-register/route.ts"}, "region": {"startLine": 22}}}]}, {"ruleId": "scanner-e3028120d4e5b737", "level": "error", "message": {"text": "Possible secret in app/api/admin/place-candidates/route.ts"}, "properties": {"repobilityId": "957c1dd4138da86b", "scanner": "scanner-primary", "fingerprint": "e3028120d4e5b737", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/api/admin/place-candidates/route.ts"}, "region": {"startLine": 18}}}]}, {"ruleId": "scanner-308ea7005460b4d1", "level": "error", "message": {"text": "Possible secret in app/api/admin/retag-all/route.ts"}, "properties": {"repobilityId": "4499604ca4171d9a", "scanner": "scanner-primary", "fingerprint": "308ea7005460b4d1", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/api/admin/retag-all/route.ts"}, "region": {"startLine": 9}}}]}, {"ruleId": "scanner-bb6f17d6f8607f2c", "level": "error", "message": {"text": "Possible secret in app/admin/page.tsx"}, "properties": {"repobilityId": "3b21635abcebf8e6", "scanner": "scanner-primary", "fingerprint": "bb6f17d6f8607f2c", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/admin/page.tsx"}, "region": {"startLine": 9}}}]}, {"ruleId": "scanner-6372cebde0220094", "level": "warning", "message": {"text": "No auth library detected"}, "properties": {"repobilityId": "a5b6035a5bbf8054", "scanner": "scanner-primary", "fingerprint": "6372cebde0220094", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["coverage", "auth"]}}, {"ruleId": "scanner-4601e3ad3bb28677", "level": "warning", "message": {"text": "No CI/CD pipelines detected"}, "properties": {"repobilityId": "c3ee439bce2bc51e", "scanner": "scanner-primary", "fingerprint": "4601e3ad3bb28677", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-00314c2e7d8f3d42", "level": "note", "message": {"text": "Very large file: app/api/recommend/route.ts (8932 lines)"}, "properties": {"repobilityId": "6d1c98d9a7ba3fe2", "scanner": "scanner-primary", "fingerprint": "00314c2e7d8f3d42", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-5e05eafbf79ad1d4", "level": "note", "message": {"text": "Very large file: app/admin/page.tsx (7533 lines)"}, "properties": {"repobilityId": "b253f5b6880faf92", "scanner": "scanner-primary", "fingerprint": "5e05eafbf79ad1d4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-190dc7e55c5dadfd", "level": "note", "message": {"text": "Very large file: app/admin/featured-pages/page.tsx (1274 lines)"}, "properties": {"repobilityId": "2bd00f940fc5be32", "scanner": "scanner-primary", "fingerprint": "190dc7e55c5dadfd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-7b7b8edb49f16392", "level": "note", "message": {"text": "Very large file: app/admin/_components/PrefFeaturedPanel.tsx (996 lines)"}, "properties": {"repobilityId": "96984d0eb966a005", "scanner": "scanner-primary", "fingerprint": "7b7b8edb49f16392", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c38ffb47a7bbda66", "level": "note", "message": {"text": "Very large file: moodgo/components/GroupsView.tsx (2110 lines)"}, "properties": {"repobilityId": "3d02c1fba66ed726", "scanner": "scanner-primary", "fingerprint": "c38ffb47a7bbda66", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-30ebad72a3eea656", "level": "note", "message": {"text": "Very large file: moodgo/components/ResultsView.tsx (980 lines)"}, "properties": {"repobilityId": "641e81e308ec435e", "scanner": "scanner-primary", "fingerprint": "30ebad72a3eea656", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-435567e9555fac72", "level": "note", "message": {"text": "Very large file: moodgo/components/FeatureScreen.tsx (2196 lines)"}, "properties": {"repobilityId": "866e15d8faa2c0d2", "scanner": "scanner-primary", "fingerprint": "435567e9555fac72", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b34641777d19f8f6", "level": "note", "message": {"text": "Very large file: moodgo/components/QuizFlow.tsx (1552 lines)"}, "properties": {"repobilityId": "e98a27634062a1f1", "scanner": "scanner-primary", "fingerprint": "b34641777d19f8f6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-9ff9415b4b96a229", "level": "note", "message": {"text": "Very large file: moodgo/app/place.tsx (1165 lines)"}, "properties": {"repobilityId": "3bc57c23d442f943", "scanner": "scanner-primary", "fingerprint": "9ff9415b4b96a229", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f84e75cbedac71fa", "level": "note", "message": {"text": "Very large file: moodgo/app/index.tsx (1235 lines)"}, "properties": {"repobilityId": "1e3e12d8e146146e", "scanner": "scanner-primary", "fingerprint": "f84e75cbedac71fa", "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": "f6151e37b1d51dd3", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "10e837235243f258", "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": "fdf6eabfd0075e61", "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": "060015f0c8c51a4e", "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": "532a15d7317d08a9", "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": "2bfec9edb7169afd", "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": "72a9d6ac6b0c90b2", "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": "68240ce282a76854", "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": "a998db6b323ec0a8", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-2c5f98b152cddb6d", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/launch.json"}, "properties": {"repobilityId": "0de48c0f4ab303d8", "scanner": "scanner-primary", "fingerprint": "2c5f98b152cddb6d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/launch.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9c866823d0c0b6f9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/import-entertainment.mjs:106"}, "properties": {"repobilityId": "8f643fffc926abc2", "scanner": "scanner-primary", "fingerprint": "9c866823d0c0b6f9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fddeff734062a2e7", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/data-import/cleanup_focus_tag.py:3"}, "properties": {"repobilityId": "770f57d0b8f647cb", "scanner": "scanner-primary", "fingerprint": "fddeff734062a2e7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cc94624834f6ffa2", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/data-import/import_records.py:3"}, "properties": {"repobilityId": "9375dd9eb1282da0", "scanner": "scanner-primary", "fingerprint": "cc94624834f6ffa2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c6b26a2cffabb79b", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/contact/route.ts:1"}, "properties": {"repobilityId": "e8dd319ead2a1efb", "scanner": "scanner-primary", "fingerprint": "c6b26a2cffabb79b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3f01bc0ac4271db3", "level": "note", "message": {"text": "Legacy-named symbol `featured_pages_v2` in app/api/featured-pages/route.ts:3"}, "properties": {"repobilityId": "d87b9ce4532b3fb7", "scanner": "scanner-primary", "fingerprint": "3f01bc0ac4271db3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-685777bc816d5238", "level": "note", "message": {"text": "Legacy-named symbol `featured_pages_v2` in app/api/featured-pages/spot/[id]/route.ts:31"}, "properties": {"repobilityId": "5c5030a9068d332f", "scanner": "scanner-primary", "fingerprint": "685777bc816d5238", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-fa1a4125d4f02ead", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/suggestions/route.ts:350"}, "properties": {"repobilityId": "1386d8136a77d725", "scanner": "scanner-primary", "fingerprint": "fa1a4125d4f02ead", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-808f4984a6561508", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/suggestions/find-place/route.ts:39"}, "properties": {"repobilityId": "2b2b3aec88e709f8", "scanner": "scanner-primary", "fingerprint": "808f4984a6561508", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-49abbe41e0c3d4f3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/photo-proxy/route.ts:124"}, "properties": {"repobilityId": "b9dc17d7c69061ae", "scanner": "scanner-primary", "fingerprint": "49abbe41e0c3d4f3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fb5b180be4535564", "level": "note", "message": {"text": "Legacy-named symbol `catch_copy` in app/api/featured/route.ts:62"}, "properties": {"repobilityId": "bbc6322ce6a9f55d", "scanner": "scanner-primary", "fingerprint": "fb5b180be4535564", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-1572626af13e37b6", "level": "note", "message": {"text": "Legacy-named symbol `catch_copy` in app/api/featured/[id]/route.ts:57"}, "properties": {"repobilityId": "8fde300a46d69983", "scanner": "scanner-primary", "fingerprint": "1572626af13e37b6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-45d820efa0a54729", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/admin/google-bulk-import/route.ts:116"}, "properties": {"repobilityId": "523b15d7a2b6be2c", "scanner": "scanner-primary", "fingerprint": "45d820efa0a54729", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-41b7201ee18e8ff9", "level": "note", "message": {"text": "Legacy-named symbol `catch_copy` in app/api/admin/quickpost/route.ts:180"}, "properties": {"repobilityId": "85dc5f0e170fbd60", "scanner": "scanner-primary", "fingerprint": "41b7201ee18e8ff9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-d36b20a822ae2d12", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/admin/quickpost/route.ts:35"}, "properties": {"repobilityId": "2f8ebd281e0c73db", "scanner": "scanner-primary", "fingerprint": "d36b20a822ae2d12", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-53fa918287851c52", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/admin/bulk-delete-places/route.ts:1"}, "properties": {"repobilityId": "202c779d3cd90b91", "scanner": "scanner-primary", "fingerprint": "53fa918287851c52", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-12032a898f5790c2", "level": "none", "message": {"text": "Commented-code block (19 lines) in app/api/admin/curated-spots/route.ts:12"}, "properties": {"repobilityId": "bfcc5b83fdd94c6a", "scanner": "scanner-primary", "fingerprint": "12032a898f5790c2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d0a44fa5e60bf137", "level": "note", "message": {"text": "Legacy-named symbol `featured_pages_v2` in app/api/admin/featured-pages/route.ts:22"}, "properties": {"repobilityId": "f6bbd89a1bb03da8", "scanner": "scanner-primary", "fingerprint": "d0a44fa5e60bf137", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-c991172f3f6f3cdf", "level": "note", "message": {"text": "Legacy-named symbol `featured_pages_v2` in app/api/admin/featured-pages/[id]/route.ts:27"}, "properties": {"repobilityId": "6aac7af20c6ded36", "scanner": "scanner-primary", "fingerprint": "c991172f3f6f3cdf", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-dec7a88d0e8fdada", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/admin/retag-spots/route.ts:71"}, "properties": {"repobilityId": "e30ca9540976916e", "scanner": "scanner-primary", "fingerprint": "dec7a88d0e8fdada", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2eea527cfdd7a119", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/admin/geocode-missing/route.ts:109"}, "properties": {"repobilityId": "9981420af6d78857", "scanner": "scanner-primary", "fingerprint": "2eea527cfdd7a119", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6e026d1dc6b8e985", "level": "none", "message": {"text": "Commented-code block (13 lines) in app/api/admin/places-register/route.ts:5"}, "properties": {"repobilityId": "bcadd57004c6af22", "scanner": "scanner-primary", "fingerprint": "6e026d1dc6b8e985", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8a28776a152f3f3d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/admin/place-candidates/route.ts:176"}, "properties": {"repobilityId": "f8d13866771294fe", "scanner": "scanner-primary", "fingerprint": "8a28776a152f3f3d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b7e071bd03d1d064", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/admin/manual-register/route.ts:14"}, "properties": {"repobilityId": "e58e1a41a94b69f6", "scanner": "scanner-primary", "fingerprint": "b7e071bd03d1d064", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-125e5eee2205dcb5", "level": "note", "message": {"text": "Legacy-named symbol `isProtectedLegacy` in app/api/recommend/route.ts:8731"}, "properties": {"repobilityId": "677490230c9c00ee", "scanner": "scanner-primary", "fingerprint": "125e5eee2205dcb5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-ca1ef9b085c64e3c", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/api/recommend/route.ts:286"}, "properties": {"repobilityId": "536c86a7a2047e00", "scanner": "scanner-primary", "fingerprint": "ca1ef9b085c64e3c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3cc47c18871d2554", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/recommend/route.ts:36"}, "properties": {"repobilityId": "fdbcca0b8b296024", "scanner": "scanner-primary", "fingerprint": "3cc47c18871d2554", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3561bc39c5657c37", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/place-detail/route.ts:53"}, "properties": {"repobilityId": "eb49e268d3f450e7", "scanner": "scanner-primary", "fingerprint": "3561bc39c5657c37", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-177774025f9e82dd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/mood-rating/route.ts:54"}, "properties": {"repobilityId": "fcab72d46de994bf", "scanner": "scanner-primary", "fingerprint": "177774025f9e82dd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-808c54da77271971", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/spot-rating/route.ts:1"}, "properties": {"repobilityId": "64ac4214b7d8e18a", "scanner": "scanner-primary", "fingerprint": "808c54da77271971", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ec6bad06060e1e54", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/api/spot-photo/route.ts:1"}, "properties": {"repobilityId": "9510a7004ab3ffe5", "scanner": "scanner-primary", "fingerprint": "ec6bad06060e1e54", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-377fb692b4cf8093", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/api/client-error/route.ts:1"}, "properties": {"repobilityId": "4b9112485f370a9f", "scanner": "scanner-primary", "fingerprint": "377fb692b4cf8093", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-40596c96e3b59446", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/geocode/route.ts:36"}, "properties": {"repobilityId": "d313553082552c89", "scanner": "scanner-primary", "fingerprint": "40596c96e3b59446", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ca1e0e10d3572ea9", "level": "none", "message": {"text": "Commented-code block (9 lines) in app/api/spot-posts/route.ts:1"}, "properties": {"repobilityId": "74cd3fca0f8a3dc5", "scanner": "scanner-primary", "fingerprint": "ca1e0e10d3572ea9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3716e3eeb593de1d", "level": "note", "message": {"text": "Legacy-named symbol `catch_copy` in app/admin/page.tsx:733"}, "properties": {"repobilityId": "59a411bac526e009", "scanner": "scanner-primary", "fingerprint": "3716e3eeb593de1d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-85f48869339ef4c4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/page.tsx:828"}, "properties": {"repobilityId": "ef7e862655d4c916", "scanner": "scanner-primary", "fingerprint": "85f48869339ef4c4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ef547df16f942908", "level": "note", "message": {"text": "Legacy-named symbol `catch_copy` in app/admin/featured-pages/page.tsx:126"}, "properties": {"repobilityId": "2bc090ac2d6156c1", "scanner": "scanner-primary", "fingerprint": "ef547df16f942908", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-1253f5b39dce8de0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/featured-pages/page.tsx:1018"}, "properties": {"repobilityId": "f003c90045804088", "scanner": "scanner-primary", "fingerprint": "1253f5b39dce8de0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3e610fadaf06b668", "level": "note", "message": {"text": "Legacy-named symbol `catch_copy` in app/admin/_components/PrefFeaturedPanel.tsx:66"}, "properties": {"repobilityId": "259381ca29da5430", "scanner": "scanner-primary", "fingerprint": "3e610fadaf06b668", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-92c8ff50eaffaffd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/_components/PrefFeaturedPanel.tsx:638"}, "properties": {"repobilityId": "3dd9814d2fe80d8f", "scanner": "scanner-primary", "fingerprint": "92c8ff50eaffaffd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f211763648930efc", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/place-vitality-check.ts:4"}, "properties": {"repobilityId": "261b01268c57fb31", "scanner": "scanner-primary", "fingerprint": "f211763648930efc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-046abbc4b858c3a8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/supabase-places.ts:97"}, "properties": {"repobilityId": "33634ab382f63979", "scanner": "scanner-primary", "fingerprint": "046abbc4b858c3a8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3f863fc653479535", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/spatial-search.ts:236"}, "properties": {"repobilityId": "daa609f0442eb4fc", "scanner": "scanner-primary", "fingerprint": "3f863fc653479535", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ef2fd7faa57df324", "level": "none", "message": {"text": "Commented-code block (9 lines) in lib/search-filters.ts:117"}, "properties": {"repobilityId": "d880c631c118bfda", "scanner": "scanner-primary", "fingerprint": "ef2fd7faa57df324", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7d3d80f23d62c659", "level": "note", "message": {"text": "Legacy-named symbol `catch_copy` in moodgo/types/app.ts:144"}, "properties": {"repobilityId": "926c4e3e5c3b5120", "scanner": "scanner-primary", "fingerprint": "7d3d80f23d62c659", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-36877cf06ea49db3", "level": "note", "message": {"text": "Legacy-named symbol `featured_pages_v2` in moodgo/components/FeatureScreen.tsx:189"}, "properties": {"repobilityId": "974589615d5ed19f", "scanner": "scanner-primary", "fingerprint": "36877cf06ea49db3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-852d5f9ed4760943", "level": "none", "message": {"text": "Commented-code block (8 lines) in moodgo/app/index.tsx:384"}, "properties": {"repobilityId": "137e8a148f9d57b5", "scanner": "scanner-primary", "fingerprint": "852d5f9ed4760943", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1e7c1fc7bd1a1ec0", "level": "note", "message": {"text": "Legacy-named symbol `catch_copy` in moodgo/app/feature/[slug].tsx:29"}, "properties": {"repobilityId": "28c4694d415f821c", "scanner": "scanner-primary", "fingerprint": "1e7c1fc7bd1a1ec0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-24420d53786e0ab3", "level": "note", "message": {"text": "Legacy-named symbol `catch_copy` in moodgo/app/feature/spot/[id].tsx:34"}, "properties": {"repobilityId": "12036ccf7948d421", "scanner": "scanner-primary", "fingerprint": "24420d53786e0ab3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-ccd6f3eccf20d427", "level": "none", "message": {"text": "Commented-code block (5 lines) in moodgo/lib/sentry.ts:5"}, "properties": {"repobilityId": "e87ae9a3fa06d56c", "scanner": "scanner-primary", "fingerprint": "ccd6f3eccf20d427", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}]}]}