{"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-8bbc0ad5076a8519", "name": "Stray `console.log` in TS/JS \u2014 capture-brightlocal-grids.js:71", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 capture-brightlocal-grids.js:71"}, "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-e2caa07f686dd626", "name": "Stray `console.log` in TS/JS \u2014 fix-google-mapping.js:220", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 fix-google-mapping.js:220"}, "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-d5d13a17955e8054", "name": "Stray `console.log` in TS/JS \u2014 app/api/team-assignments/route.ts:119", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/team-assignments/route.ts:119"}, "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-fe793d6329fdc9b9", "name": "Stray `console.log` in TS/JS \u2014 app/api/admin/clients/[id]/route.ts:107", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/admin/clients/[id]/route.ts:107"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-28e998044f23f254", "name": "Stray `console.log` in TS/JS \u2014 app/api/webhooks/ghl/opportunity-onboarded/route.ts:146", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/webhooks/ghl/opportunity-onboarded/route.ts:146"}, "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-5fce2dc066a6e3db", "name": "`truncate` class without `title=` for hover reveal \u2014 app/components/BrightLocalPanel.tsx:247", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/components/BrightLocalPanel.tsx:247"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3efb1db9d5048fba", "name": "`truncate` class without `title=` for hover reveal \u2014 app/components/AISummaryTab.tsx:500", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/components/AISummaryTab.tsx:500"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dc49597dc38ec6be", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 app/components/AISummaryTab.tsx:594", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/components/AISummaryTab.tsx:594"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6bbbbf8c3ce84df6", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 app/components/AskQuestionTab.tsx:193", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/components/AskQuestionTab.tsx:193"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b696f8654c51b65b", "name": "`truncate` class without `title=` for hover reveal \u2014 app/components/MeetingPrepButton.tsx:209", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/components/MeetingPrepButton.tsx:209"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b23eeb5edd88f500", "name": "Stray `console.log` in TS/JS \u2014 scripts/audit-health-scores.js:310", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/audit-health-scores.js:310"}, "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-b1b618794047de68", "name": "Possible secret in app/api/admin/auth/route.ts", "shortDescription": {"text": "Possible secret in app/api/admin/auth/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-7b3de54cb0a79b96", "name": "Insecure pattern 'local_storage_auth_token' in app/admin/page.tsx:129", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in app/admin/page.tsx:129"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4b431ac114932873", "name": "Insecure pattern 'local_storage_auth_token' in app/components/SignInPrompt.tsx:86", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in app/components/SignInPrompt.tsx:86"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1e9b955e377cada4", "name": "Insecure pattern 'dangerous_innerhtml' in app/components/AISummaryTab.tsx:594", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in app/components/AISummaryTab.tsx:594"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-49bf20b142f39409", "name": "Insecure pattern 'dangerous_innerhtml' in app/components/AskQuestionTab.tsx:193", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in app/components/AskQuestionTab.tsx:193"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-253f40b4d53b8c65", "name": "Insecure pattern 'node_child_process' in scripts/check-admin-routes-coverage.mjs:27", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/check-admin-routes-coverage.mjs:27"}, "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-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "4 test file(s) for 163 source file(s) (ratio 0.02). 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 33 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 34 placeholder/mock markers across 15 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. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-06acac2a8b918e07", "name": "Commented-code block (7 lines) in proxy.ts:14", "shortDescription": {"text": "Commented-code block (7 lines) in proxy.ts:14"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-64d1214ab4759791", "name": "Commented-code block (5 lines) in app/api/team-assignments/route.ts:9", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/team-assignments/route.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-3ce449d05280ec8f", "name": "Commented-code block (5 lines) in app/api/admin/clients/route.ts:10", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/admin/clients/route.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-59ac2477a5c6c50e", "name": "Commented-code block (5 lines) in app/api/admin/clients/[id]/route.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/admin/clients/[id]/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-1acc33d449bb79fe", "name": "Commented-code block (10 lines) in app/api/admin/users/[email]/role/route.ts:7", "shortDescription": {"text": "Commented-code block (10 lines) in app/api/admin/users/[email]/role/route.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-a6dce27e4b3b620e", "name": "Commented-code block (9 lines) in app/api/admin/users/add/route.ts:8", "shortDescription": {"text": "Commented-code block (9 lines) in app/api/admin/users/add/route.ts:8"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-13eaed799f0c5af7", "name": "Commented-code block (7 lines) in app/api/admin/auth/session/route.ts:9", "shortDescription": {"text": "Commented-code block (7 lines) in app/api/admin/auth/session/route.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-bde915ce7f63476f", "name": "Commented-code block (5 lines) in app/api/admin/auth/me/route.ts:11", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/admin/auth/me/route.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-9bbf5154e2ebe61c", "name": "Commented-code block (5 lines) in app/api/invite/accept/route.ts:8", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/invite/accept/route.ts:8"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cb4fbe23abe1ffec", "name": "Commented-code block (5 lines) in app/api/chat/route.ts:717", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/chat/route.ts:717"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d576217f3117bf5a", "name": "Commented-code block (7 lines) in app/api/webhooks/ghl/opportunity-onboarded/route.ts:5", "shortDescription": {"text": "Commented-code block (7 lines) in app/api/webhooks/ghl/opportunity-onboarded/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-70e0acb04e7c3e8a", "name": "Commented-code block (7 lines) in app/api/webhooks/ghl/opportunity-onboarded/route.test.ts:11", "shortDescription": {"text": "Commented-code block (7 lines) in app/api/webhooks/ghl/opportunity-onboarded/route.test.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-e936a5472150155a", "name": "Commented-code block (5 lines) in app/api/basecamp/refresh/route.ts:14", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/basecamp/refresh/route.ts:14"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-44a68a940511cc28", "name": "Commented-code block (5 lines) in app/api/basecamp/import/route.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/basecamp/import/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-1857863dbd937897", "name": "Commented-code block (5 lines) in app/api/basecamp/todolists/route.ts:9", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/basecamp/todolists/route.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-f70cee94fd3eb558", "name": "Commented-code block (6 lines) in app/api/onboarding/field-edits/route.ts:7", "shortDescription": {"text": "Commented-code block (6 lines) in app/api/onboarding/field-edits/route.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-f2a3a8e831fab4be", "name": "Commented-code block (6 lines) in app/api/onboarding/by-workbook-id/[id]/route.ts:5", "shortDescription": {"text": "Commented-code block (6 lines) in app/api/onboarding/by-workbook-id/[id]/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-7dcfde90389f6518", "name": "Commented-code block (7 lines) in app/api/onboarding/regenerate-pin/route.ts:7", "shortDescription": {"text": "Commented-code block (7 lines) in app/api/onboarding/regenerate-pin/route.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-0c03b242beee130b", "name": "Commented-code block (6 lines) in app/api/onboarding/sessions/[id]/token/route.ts:7", "shortDescription": {"text": "Commented-code block (6 lines) in app/api/onboarding/sessions/[id]/token/route.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-ce334ea3c54320a4", "name": "Commented-code block (7 lines) in app/api/onboarding/reminders/route.ts:20", "shortDescription": {"text": "Commented-code block (7 lines) in app/api/onboarding/reminders/route.ts: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-de07b2f1018b5cce", "name": "Commented-code block (7 lines) in app/admin/page.tsx:55", "shortDescription": {"text": "Commented-code block (7 lines) in app/admin/page.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-709bbff76b6978c9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/page.tsx:124", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/page.tsx: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-8bfa7c1bf884f70b", "name": "Commented-code block (7 lines) in app/admin/auth/callback/route.ts:10", "shortDescription": {"text": "Commented-code block (7 lines) in app/admin/auth/callback/route.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-45f6221f55a43de0", "name": "Commented-code block (6 lines) in app/share/[token]/page.tsx:60", "shortDescription": {"text": "Commented-code block (6 lines) in app/share/[token]/page.tsx: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-58dc9a4632d845bf", "name": "Commented-code block (6 lines) in app/components/ClientGrid.tsx:256", "shortDescription": {"text": "Commented-code block (6 lines) in app/components/ClientGrid.tsx:256"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-32a1d53671f0ee6b", "name": "Commented-code block (7 lines) in app/components/SignInPrompt.tsx:103", "shortDescription": {"text": "Commented-code block (7 lines) in app/components/SignInPrompt.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-02c1b817324006f5", "name": "Commented-code block (12 lines) in app/components/ClientTaskPanels.tsx:41", "shortDescription": {"text": "Commented-code block (12 lines) in app/components/ClientTaskPanels.tsx:41"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c3c04b092624b487", "name": "Commented-code block (7 lines) in app/components/Last10TasksTable.tsx:31", "shortDescription": {"text": "Commented-code block (7 lines) in app/components/Last10TasksTable.tsx:31"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-caf45e8e9c0e51e7", "name": "Commented-code block (6 lines) in app/components/admin/UsersTab.tsx:11", "shortDescription": {"text": "Commented-code block (6 lines) in app/components/admin/UsersTab.tsx: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-4fb303c0371a9f7f", "name": "Commented-code block (5 lines) in app/components/onboarding/PipelineStep.tsx:7", "shortDescription": {"text": "Commented-code block (5 lines) in app/components/onboarding/PipelineStep.tsx: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-8a0a571e8dafae21", "name": "Commented-code block (10 lines) in app/components/onboarding/Modal.tsx:14", "shortDescription": {"text": "Commented-code block (10 lines) in app/components/onboarding/Modal.tsx:14"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f583719959946209", "name": "Commented-code block (6 lines) in app/components/onboarding/FieldValue.tsx:12", "shortDescription": {"text": "Commented-code block (6 lines) in app/components/onboarding/FieldValue.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-69a44b1b53e9e022", "name": "Commented-code block (5 lines) in app/components/onboarding/SectionsCompletedModal.tsx:13", "shortDescription": {"text": "Commented-code block (5 lines) in app/components/onboarding/SectionsCompletedModal.tsx:13"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-165849076940962a", "name": "Commented-code block (9 lines) in app/components/onboarding/FieldRow.tsx:14", "shortDescription": {"text": "Commented-code block (9 lines) in app/components/onboarding/FieldRow.tsx:14"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d46f56c8b2d15745", "name": "Commented-code block (5 lines) in app/components/onboarding/ReminderStrip.tsx:7", "shortDescription": {"text": "Commented-code block (5 lines) in app/components/onboarding/ReminderStrip.tsx: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-99e045787f4df89d", "name": "Commented-code block (7 lines) in app/components/onboarding/ActionBarLinkRow.tsx:13", "shortDescription": {"text": "Commented-code block (7 lines) in app/components/onboarding/ActionBarLinkRow.tsx:13"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d2b26dcf7fd58f0c", "name": "Commented-code block (5 lines) in app/components/onboarding/SendFormReminderModal.tsx:10", "shortDescription": {"text": "Commented-code block (5 lines) in app/components/onboarding/SendFormReminderModal.tsx:10"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dec1cdab3097a26a", "name": "Commented-code block (5 lines) in app/components/onboarding/ClientInformationHeader.tsx:9", "shortDescription": {"text": "Commented-code block (5 lines) in app/components/onboarding/ClientInformationHeader.tsx: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-dd21ce2e4b29e0f5", "name": "Commented-code block (5 lines) in app/components/onboarding/PipelineModals.tsx:10", "shortDescription": {"text": "Commented-code block (5 lines) in app/components/onboarding/PipelineModals.tsx:10"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f45dceab1bdd6f06", "name": "Commented-code block (6 lines) in app/components/onboarding/EmailPreview.tsx:7", "shortDescription": {"text": "Commented-code block (6 lines) in app/components/onboarding/EmailPreview.tsx: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-9365389b3cc73350", "name": "Commented-code block (6 lines) in app/components/onboarding/ActionBarModals.tsx:14", "shortDescription": {"text": "Commented-code block (6 lines) in app/components/onboarding/ActionBarModals.tsx:14"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bc8249883a170368", "name": "Commented-code block (5 lines) in app/components/onboarding/RegeneratePinModal.tsx:17", "shortDescription": {"text": "Commented-code block (5 lines) in app/components/onboarding/RegeneratePinModal.tsx: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-8c86879c9fff9289", "name": "Commented-code block (12 lines) in app/components/onboarding/EditableFieldValue.tsx:14", "shortDescription": {"text": "Commented-code block (12 lines) in app/components/onboarding/EditableFieldValue.tsx:14"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-86772dde33d93580", "name": "Commented-code block (6 lines) in app/components/onboarding/SectionBody.tsx:12", "shortDescription": {"text": "Commented-code block (6 lines) in app/components/onboarding/SectionBody.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-85171294d7d4b262", "name": "Commented-code block (7 lines) in app/components/onboarding/ActionBar.tsx:7", "shortDescription": {"text": "Commented-code block (7 lines) in app/components/onboarding/ActionBar.tsx: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-2a4853076e2fcbe0", "name": "Commented-code block (6 lines) in app/components/onboarding/RequestMissingAccessModal.tsx:9", "shortDescription": {"text": "Commented-code block (6 lines) in app/components/onboarding/RequestMissingAccessModal.tsx: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-67d8828d00c3b579", "name": "Commented-code block (7 lines) in app/components/onboarding/FormCompleteModal.tsx:9", "shortDescription": {"text": "Commented-code block (7 lines) in app/components/onboarding/FormCompleteModal.tsx: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-dbd60b8d412b74ae", "name": "Legacy-named symbol `actions__copy` in app/components/onboarding/FieldActions.tsx:101", "shortDescription": {"text": "Legacy-named symbol `actions__copy` in app/components/onboarding/FieldActions.tsx:101"}, "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-dc54e7dc533c398f", "name": "Commented-code block (6 lines) in app/components/onboarding/FieldActions.tsx:11", "shortDescription": {"text": "Commented-code block (6 lines) in app/components/onboarding/FieldActions.tsx: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-546e9714fe077e2c", "name": "Commented-code block (7 lines) in app/components/onboarding/PipelineStageCard.tsx:7", "shortDescription": {"text": "Commented-code block (7 lines) in app/components/onboarding/PipelineStageCard.tsx: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-cdde83e0d1a57fd6", "name": "Commented-code block (5 lines) in app/components/onboarding/OpenHistoryModal.tsx:14", "shortDescription": {"text": "Commented-code block (5 lines) in app/components/onboarding/OpenHistoryModal.tsx:14"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f0f75a5d2c6c388b", "name": "Commented-code block (14 lines) in app/components/onboarding/PipelineStepper.tsx:11", "shortDescription": {"text": "Commented-code block (14 lines) in app/components/onboarding/PipelineStepper.tsx: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-cd2f5e219b758973", "name": "Commented-code block (5 lines) in app/components/onboarding/icons.tsx:7", "shortDescription": {"text": "Commented-code block (5 lines) in app/components/onboarding/icons.tsx: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-c96b813bfdb07739", "name": "Commented-code block (5 lines) in app/client/[id]/page.tsx:49", "shortDescription": {"text": "Commented-code block (5 lines) in app/client/[id]/page.tsx: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-e33d1d30b53a0018", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/lib/vercel-env.ts:47", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/lib/vercel-env.ts:47"}, "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-773a4ba561b77f6e", "name": "Commented-code block (5 lines) in app/lib/use-admin-auth.tsx:13", "shortDescription": {"text": "Commented-code block (5 lines) in app/lib/use-admin-auth.tsx:13"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c72bf98c1cb2049c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/lib/use-admin-auth.tsx:94", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/lib/use-admin-auth.tsx:94"}, "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-4bfa60dc0ff7a66f", "name": "Commented-code block (5 lines) in app/lib/supabase-server.ts:6", "shortDescription": {"text": "Commented-code block (5 lines) in app/lib/supabase-server.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-09fc7a4f168a9172", "name": "Commented-code block (5 lines) in app/lib/require-role.test.ts:13", "shortDescription": {"text": "Commented-code block (5 lines) in app/lib/require-role.test.ts:13"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5a097fe8ed073acf", "name": "Commented-code block (5 lines) in app/lib/rate-limit.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in app/lib/rate-limit.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-ec0d415d5e1102b9", "name": "Commented-code block (5 lines) in app/lib/app-users.ts:13", "shortDescription": {"text": "Commented-code block (5 lines) in app/lib/app-users.ts:13"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0cc2c1e68d5ff77a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/lib/content-data.ts:100", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/lib/content-data.ts:100"}, "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-0d88063d79a41682", "name": "Commented-code block (6 lines) in app/lib/app-session.ts:7", "shortDescription": {"text": "Commented-code block (6 lines) in app/lib/app-session.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-e63e01a7951c0303", "name": "Commented-code block (10 lines) in app/lib/supabase-ssr.ts:6", "shortDescription": {"text": "Commented-code block (10 lines) in app/lib/supabase-ssr.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-fc81ba351555af3a", "name": "Commented-code block (6 lines) in app/lib/oauth-email-guards.test.ts:12", "shortDescription": {"text": "Commented-code block (6 lines) in app/lib/oauth-email-guards.test.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-c6984df39700f589", "name": "Commented-code block (6 lines) in app/lib/dashboard-data.ts:304", "shortDescription": {"text": "Commented-code block (6 lines) in app/lib/dashboard-data.ts:304"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-701eb321a8c9e84c", "name": "Commented-code block (5 lines) in app/lib/require-role.ts:10", "shortDescription": {"text": "Commented-code block (5 lines) in app/lib/require-role.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-7fd4db40f5cfecfe", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/lib/basecamp.ts:100", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/lib/basecamp.ts:100"}, "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-1c0ad9a5982ddf8b", "name": "Commented-code block (5 lines) in app/lib/basecamp-write.ts:13", "shortDescription": {"text": "Commented-code block (5 lines) in app/lib/basecamp-write.ts:13"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0c3e9890e7df2438", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/lib/basecamp-write.ts:54", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/lib/basecamp-write.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-acce8de5d57efb7b", "name": "Commented-code block (6 lines) in app/lib/win-flag-detection.ts:33", "shortDescription": {"text": "Commented-code block (6 lines) in app/lib/win-flag-detection.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-8fcdb25b19bf7f69", "name": "Commented-code block (6 lines) in app/lib/audit-metadata.ts:11", "shortDescription": {"text": "Commented-code block (6 lines) in app/lib/audit-metadata.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-495f4d510e2fb4e4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/lib/github.ts:42", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/lib/github.ts:42"}, "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-1a64fb032d88297c", "name": "Commented-code block (5 lines) in app/lib/csrf.ts:12", "shortDescription": {"text": "Commented-code block (5 lines) in app/lib/csrf.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-66a9afc4b71257c7", "name": "Commented-code block (8 lines) in app/lib/return-url.ts:7", "shortDescription": {"text": "Commented-code block (8 lines) in app/lib/return-url.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-28e231aac2ea2ddd", "name": "Commented-code block (11 lines) in app/lib/auth-audit.ts:6", "shortDescription": {"text": "Commented-code block (11 lines) in app/lib/auth-audit.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-b98018808f40ff2d", "name": "Commented-code block (7 lines) in app/lib/admin-auth.ts:7", "shortDescription": {"text": "Commented-code block (7 lines) in app/lib/admin-auth.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-2a40d5de7bad38eb", "name": "Commented-code block (5 lines) in app/lib/with-admin-auth.ts:121", "shortDescription": {"text": "Commented-code block (5 lines) in app/lib/with-admin-auth.ts:121"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ab612982df960dbb", "name": "Commented-code block (5 lines) in app/lib/supabase-browser.ts:10", "shortDescription": {"text": "Commented-code block (5 lines) in app/lib/supabase-browser.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-85e35c4ceed64363", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/lib/google.ts:19", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/lib/google.ts:19"}, "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-3eab9957b4c3a168", "name": "Commented-code block (7 lines) in app/lib/onboarding/access-checklist.ts:36", "shortDescription": {"text": "Commented-code block (7 lines) in app/lib/onboarding/access-checklist.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-36a19fc879df2c9d", "name": "Commented-code block (5 lines) in app/lib/onboarding/field-edit-validation.ts:15", "shortDescription": {"text": "Commented-code block (5 lines) in app/lib/onboarding/field-edit-validation.ts:15"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1c730ba44f59649f", "name": "Commented-code block (5 lines) in app/lib/onboarding/types.gen.ts:10", "shortDescription": {"text": "Commented-code block (5 lines) in app/lib/onboarding/types.gen.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-87d7ebd1a63ada8f", "name": "Commented-code block (6 lines) in app/lib/onboarding/derive-state.ts:7", "shortDescription": {"text": "Commented-code block (6 lines) in app/lib/onboarding/derive-state.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-e39f4e80dae6fc59", "name": "Commented-code block (7 lines) in app/lib/onboarding/field-config.ts:8", "shortDescription": {"text": "Commented-code block (7 lines) in app/lib/onboarding/field-config.ts:8"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2fd72bb872adb10f", "name": "Commented-code block (6 lines) in app/lib/onboarding/project-sections.ts:76", "shortDescription": {"text": "Commented-code block (6 lines) in app/lib/onboarding/project-sections.ts:76"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e6212e946a4e5862", "name": "Commented-code block (8 lines) in app/lib/onboarding/get-by-workbook-id.ts:10", "shortDescription": {"text": "Commented-code block (8 lines) in app/lib/onboarding/get-by-workbook-id.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-988205ab7d593ec6", "name": "Commented-code block (6 lines) in app/lib/onboarding/step-keys.ts:10", "shortDescription": {"text": "Commented-code block (6 lines) in app/lib/onboarding/step-keys.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-cbf32a2b618dac73", "name": "Commented-code block (11 lines) in app/lib/onboarding/humanize.ts:13", "shortDescription": {"text": "Commented-code block (11 lines) in app/lib/onboarding/humanize.ts:13"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1ad525fd770b1350", "name": "Commented-code block (6 lines) in app/lib/onboarding/get-primary-contact.ts:7", "shortDescription": {"text": "Commented-code block (6 lines) in app/lib/onboarding/get-primary-contact.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-c2e349ca78ef3d37", "name": "Commented-code block (7 lines) in app/lib/onboarding/email-templates.ts:7", "shortDescription": {"text": "Commented-code block (7 lines) in app/lib/onboarding/email-templates.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-e6ec4e7392bcdc04", "name": "Commented-code block (6 lines) in app/lib/onboarding/pin.ts:34", "shortDescription": {"text": "Commented-code block (6 lines) in app/lib/onboarding/pin.ts:34"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8a185389c64f267c", "name": "Commented-code block (13 lines) in app/lib/onboarding/types.ts:9", "shortDescription": {"text": "Commented-code block (13 lines) in app/lib/onboarding/types.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-0641adec2d66e0d4", "name": "Commented-code block (5 lines) in scripts/check-admin-routes-coverage.mjs:18", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/check-admin-routes-coverage.mjs: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-4d24f1ff4f977a0d", "name": "Commented-code block (5 lines) in scripts/audit-health-scores.js:284", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/audit-health-scores.js:284"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cc0f9d8e41b33b0e", "name": "11 env vars used in code but missing from .env.example", "shortDescription": {"text": "11 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `AUDIT_IP_HASH_SALT`, `BASECAMP_ACCESS_TOKEN`, `BASECAMP_ACCOUNT_ID`, `BASECAMP_CLIENT_ID`, `BASECAMP_CLIENT_SECRET`, `BASECAMP_REDIRECT_URI`, `BASECAMP_REFRESH_TOKEN`, `GHL_RECEIVER_TEST_MODE` + 3 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/25016"}, "properties": {"repository": "ClixsyDAI/Clixsy_Dashboard", "repoUrl": "https://github.com/ClixsyDAI/Clixsy_Dashboard", "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-8bbc0ad5076a8519", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 capture-brightlocal-grids.js:71"}, "properties": {"repobilityId": "c4e564ef223402c6", "scanner": "scanner-primary", "fingerprint": "8bbc0ad5076a8519", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e2caa07f686dd626", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 fix-google-mapping.js:220"}, "properties": {"repobilityId": "847bd8163efb58cc", "scanner": "scanner-primary", "fingerprint": "e2caa07f686dd626", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d5d13a17955e8054", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/team-assignments/route.ts:119"}, "properties": {"repobilityId": "1c037a98f4b00fed", "scanner": "scanner-primary", "fingerprint": "d5d13a17955e8054", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fe793d6329fdc9b9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/admin/clients/[id]/route.ts:107"}, "properties": {"repobilityId": "c7cacce5f0ecb3dc", "scanner": "scanner-primary", "fingerprint": "fe793d6329fdc9b9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-28e998044f23f254", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/webhooks/ghl/opportunity-onboarded/route.ts:146"}, "properties": {"repobilityId": "54b22a4435826073", "scanner": "scanner-primary", "fingerprint": "28e998044f23f254", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5fce2dc066a6e3db", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/components/BrightLocalPanel.tsx:247"}, "properties": {"repobilityId": "9b0ee06413c53a26", "scanner": "scanner-primary", "fingerprint": "5fce2dc066a6e3db", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3efb1db9d5048fba", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/components/AISummaryTab.tsx:500"}, "properties": {"repobilityId": "9c17d16fb87db9f3", "scanner": "scanner-primary", "fingerprint": "3efb1db9d5048fba", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-dc49597dc38ec6be", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/components/AISummaryTab.tsx:594"}, "properties": {"repobilityId": "697d1d05d45fa8d6", "scanner": "scanner-primary", "fingerprint": "dc49597dc38ec6be", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-6bbbbf8c3ce84df6", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/components/AskQuestionTab.tsx:193"}, "properties": {"repobilityId": "fc447db975d7c9bc", "scanner": "scanner-primary", "fingerprint": "6bbbbf8c3ce84df6", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-b696f8654c51b65b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/components/MeetingPrepButton.tsx:209"}, "properties": {"repobilityId": "355fae579f8d3e4b", "scanner": "scanner-primary", "fingerprint": "b696f8654c51b65b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b23eeb5edd88f500", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/audit-health-scores.js:310"}, "properties": {"repobilityId": "8d8b4013d32fd7e8", "scanner": "scanner-primary", "fingerprint": "b23eeb5edd88f500", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b1b618794047de68", "level": "error", "message": {"text": "Possible secret in app/api/admin/auth/route.ts"}, "properties": {"repobilityId": "c121ec8f2039a1a6", "scanner": "scanner-primary", "fingerprint": "b1b618794047de68", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/api/admin/auth/route.ts"}, "region": {"startLine": 41}}}]}, {"ruleId": "scanner-7b3de54cb0a79b96", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in app/admin/page.tsx:129"}, "properties": {"repobilityId": "bf45e5211d9f02bf", "scanner": "scanner-primary", "fingerprint": "7b3de54cb0a79b96", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/admin/page.tsx"}, "region": {"startLine": 129}}}]}, {"ruleId": "scanner-4b431ac114932873", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in app/components/SignInPrompt.tsx:86"}, "properties": {"repobilityId": "0bfda234e1313c7f", "scanner": "scanner-primary", "fingerprint": "4b431ac114932873", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/components/SignInPrompt.tsx"}, "region": {"startLine": 86}}}]}, {"ruleId": "scanner-1e9b955e377cada4", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in app/components/AISummaryTab.tsx:594"}, "properties": {"repobilityId": "4cb44613f6cc5e46", "scanner": "scanner-primary", "fingerprint": "1e9b955e377cada4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/components/AISummaryTab.tsx"}, "region": {"startLine": 594}}}]}, {"ruleId": "scanner-49bf20b142f39409", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in app/components/AskQuestionTab.tsx:193"}, "properties": {"repobilityId": "931dd65ab0867a3c", "scanner": "scanner-primary", "fingerprint": "49bf20b142f39409", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/components/AskQuestionTab.tsx"}, "region": {"startLine": 193}}}]}, {"ruleId": "scanner-253f40b4d53b8c65", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/check-admin-routes-coverage.mjs:27"}, "properties": {"repobilityId": "23c4ce0696609fce", "scanner": "scanner-primary", "fingerprint": "253f40b4d53b8c65", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/check-admin-routes-coverage.mjs"}, "region": {"startLine": 27}}}]}, {"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": "56b06c9d59aef287", "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": "d932728d0ce64ff9", "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": "4eb22ff541e33c94", "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": "b633774578daba65", "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": "09c7d82af3367dcc", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "note", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "38bd385415a240c5", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-06acac2a8b918e07", "level": "none", "message": {"text": "Commented-code block (7 lines) in proxy.ts:14"}, "properties": {"repobilityId": "edb3808a7969d821", "scanner": "scanner-primary", "fingerprint": "06acac2a8b918e07", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-64d1214ab4759791", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/team-assignments/route.ts:9"}, "properties": {"repobilityId": "5f86fa3481251cce", "scanner": "scanner-primary", "fingerprint": "64d1214ab4759791", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3ce449d05280ec8f", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/admin/clients/route.ts:10"}, "properties": {"repobilityId": "dfb083e1eac4ff1c", "scanner": "scanner-primary", "fingerprint": "3ce449d05280ec8f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-59ac2477a5c6c50e", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/admin/clients/[id]/route.ts:5"}, "properties": {"repobilityId": "a8b22129e4ddecd2", "scanner": "scanner-primary", "fingerprint": "59ac2477a5c6c50e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1acc33d449bb79fe", "level": "none", "message": {"text": "Commented-code block (10 lines) in app/api/admin/users/[email]/role/route.ts:7"}, "properties": {"repobilityId": "267efb956ae5f590", "scanner": "scanner-primary", "fingerprint": "1acc33d449bb79fe", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a6dce27e4b3b620e", "level": "none", "message": {"text": "Commented-code block (9 lines) in app/api/admin/users/add/route.ts:8"}, "properties": {"repobilityId": "a57989043d3401c3", "scanner": "scanner-primary", "fingerprint": "a6dce27e4b3b620e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-13eaed799f0c5af7", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/api/admin/auth/session/route.ts:9"}, "properties": {"repobilityId": "539938d93bb76e1c", "scanner": "scanner-primary", "fingerprint": "13eaed799f0c5af7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bde915ce7f63476f", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/admin/auth/me/route.ts:11"}, "properties": {"repobilityId": "34991efcaf141de2", "scanner": "scanner-primary", "fingerprint": "bde915ce7f63476f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9bbf5154e2ebe61c", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/invite/accept/route.ts:8"}, "properties": {"repobilityId": "2da1b50e5e302831", "scanner": "scanner-primary", "fingerprint": "9bbf5154e2ebe61c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cb4fbe23abe1ffec", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/chat/route.ts:717"}, "properties": {"repobilityId": "ae17afe3cc4ee8fd", "scanner": "scanner-primary", "fingerprint": "cb4fbe23abe1ffec", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d576217f3117bf5a", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/api/webhooks/ghl/opportunity-onboarded/route.ts:5"}, "properties": {"repobilityId": "d0b2b97b72dfd9d3", "scanner": "scanner-primary", "fingerprint": "d576217f3117bf5a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-70e0acb04e7c3e8a", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/api/webhooks/ghl/opportunity-onboarded/route.test.ts:11"}, "properties": {"repobilityId": "d2d10ed2f0513bf2", "scanner": "scanner-primary", "fingerprint": "70e0acb04e7c3e8a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e936a5472150155a", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/basecamp/refresh/route.ts:14"}, "properties": {"repobilityId": "895598cfc2b78b2f", "scanner": "scanner-primary", "fingerprint": "e936a5472150155a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-44a68a940511cc28", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/basecamp/import/route.ts:5"}, "properties": {"repobilityId": "e6d29a95b377dd8b", "scanner": "scanner-primary", "fingerprint": "44a68a940511cc28", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1857863dbd937897", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/basecamp/todolists/route.ts:9"}, "properties": {"repobilityId": "a052d07a08e81fe5", "scanner": "scanner-primary", "fingerprint": "1857863dbd937897", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f70cee94fd3eb558", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/api/onboarding/field-edits/route.ts:7"}, "properties": {"repobilityId": "36d362f0ef4ac136", "scanner": "scanner-primary", "fingerprint": "f70cee94fd3eb558", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f2a3a8e831fab4be", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/api/onboarding/by-workbook-id/[id]/route.ts:5"}, "properties": {"repobilityId": "aab8f53b9281c64a", "scanner": "scanner-primary", "fingerprint": "f2a3a8e831fab4be", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7dcfde90389f6518", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/api/onboarding/regenerate-pin/route.ts:7"}, "properties": {"repobilityId": "cde72fa8a86a8c7a", "scanner": "scanner-primary", "fingerprint": "7dcfde90389f6518", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0c03b242beee130b", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/api/onboarding/sessions/[id]/token/route.ts:7"}, "properties": {"repobilityId": "fb431821c132751a", "scanner": "scanner-primary", "fingerprint": "0c03b242beee130b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ce334ea3c54320a4", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/api/onboarding/reminders/route.ts:20"}, "properties": {"repobilityId": "8657bc0900736bb3", "scanner": "scanner-primary", "fingerprint": "ce334ea3c54320a4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-de07b2f1018b5cce", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/admin/page.tsx:55"}, "properties": {"repobilityId": "0f2d7ddff138dcef", "scanner": "scanner-primary", "fingerprint": "de07b2f1018b5cce", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-709bbff76b6978c9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/page.tsx:124"}, "properties": {"repobilityId": "895e67c12ab0ea6f", "scanner": "scanner-primary", "fingerprint": "709bbff76b6978c9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8bfa7c1bf884f70b", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/admin/auth/callback/route.ts:10"}, "properties": {"repobilityId": "02a7cba6043318ab", "scanner": "scanner-primary", "fingerprint": "8bfa7c1bf884f70b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-45f6221f55a43de0", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/share/[token]/page.tsx:60"}, "properties": {"repobilityId": "333e1801eb34f621", "scanner": "scanner-primary", "fingerprint": "45f6221f55a43de0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-58dc9a4632d845bf", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/components/ClientGrid.tsx:256"}, "properties": {"repobilityId": "60e94f819132c353", "scanner": "scanner-primary", "fingerprint": "58dc9a4632d845bf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-32a1d53671f0ee6b", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/components/SignInPrompt.tsx:103"}, "properties": {"repobilityId": "7b7b00fc78590274", "scanner": "scanner-primary", "fingerprint": "32a1d53671f0ee6b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-02c1b817324006f5", "level": "none", "message": {"text": "Commented-code block (12 lines) in app/components/ClientTaskPanels.tsx:41"}, "properties": {"repobilityId": "14d0c7f980452795", "scanner": "scanner-primary", "fingerprint": "02c1b817324006f5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c3c04b092624b487", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/components/Last10TasksTable.tsx:31"}, "properties": {"repobilityId": "eefcf0dfd760ccf9", "scanner": "scanner-primary", "fingerprint": "c3c04b092624b487", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-caf45e8e9c0e51e7", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/components/admin/UsersTab.tsx:11"}, "properties": {"repobilityId": "0d2c8a4ab64e8d56", "scanner": "scanner-primary", "fingerprint": "caf45e8e9c0e51e7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4fb303c0371a9f7f", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/components/onboarding/PipelineStep.tsx:7"}, "properties": {"repobilityId": "259b279d4a6fb193", "scanner": "scanner-primary", "fingerprint": "4fb303c0371a9f7f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8a0a571e8dafae21", "level": "none", "message": {"text": "Commented-code block (10 lines) in app/components/onboarding/Modal.tsx:14"}, "properties": {"repobilityId": "9dc0f3c81162f81e", "scanner": "scanner-primary", "fingerprint": "8a0a571e8dafae21", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f583719959946209", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/components/onboarding/FieldValue.tsx:12"}, "properties": {"repobilityId": "218d8517a0155490", "scanner": "scanner-primary", "fingerprint": "f583719959946209", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-69a44b1b53e9e022", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/components/onboarding/SectionsCompletedModal.tsx:13"}, "properties": {"repobilityId": "a8922a11b0acc30c", "scanner": "scanner-primary", "fingerprint": "69a44b1b53e9e022", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-165849076940962a", "level": "none", "message": {"text": "Commented-code block (9 lines) in app/components/onboarding/FieldRow.tsx:14"}, "properties": {"repobilityId": "2f9d468f9e68dbcc", "scanner": "scanner-primary", "fingerprint": "165849076940962a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d46f56c8b2d15745", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/components/onboarding/ReminderStrip.tsx:7"}, "properties": {"repobilityId": "a982ac8e423746b9", "scanner": "scanner-primary", "fingerprint": "d46f56c8b2d15745", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-99e045787f4df89d", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/components/onboarding/ActionBarLinkRow.tsx:13"}, "properties": {"repobilityId": "f4749b5733db5b93", "scanner": "scanner-primary", "fingerprint": "99e045787f4df89d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d2b26dcf7fd58f0c", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/components/onboarding/SendFormReminderModal.tsx:10"}, "properties": {"repobilityId": "8c1e21e883ebcdf5", "scanner": "scanner-primary", "fingerprint": "d2b26dcf7fd58f0c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dec1cdab3097a26a", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/components/onboarding/ClientInformationHeader.tsx:9"}, "properties": {"repobilityId": "b92164297e201e7e", "scanner": "scanner-primary", "fingerprint": "dec1cdab3097a26a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dd21ce2e4b29e0f5", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/components/onboarding/PipelineModals.tsx:10"}, "properties": {"repobilityId": "846a7c05a866ec47", "scanner": "scanner-primary", "fingerprint": "dd21ce2e4b29e0f5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f45dceab1bdd6f06", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/components/onboarding/EmailPreview.tsx:7"}, "properties": {"repobilityId": "84a228aaf3234eae", "scanner": "scanner-primary", "fingerprint": "f45dceab1bdd6f06", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9365389b3cc73350", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/components/onboarding/ActionBarModals.tsx:14"}, "properties": {"repobilityId": "b412c49154339b5f", "scanner": "scanner-primary", "fingerprint": "9365389b3cc73350", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bc8249883a170368", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/components/onboarding/RegeneratePinModal.tsx:17"}, "properties": {"repobilityId": "8025c03200f71639", "scanner": "scanner-primary", "fingerprint": "bc8249883a170368", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8c86879c9fff9289", "level": "none", "message": {"text": "Commented-code block (12 lines) in app/components/onboarding/EditableFieldValue.tsx:14"}, "properties": {"repobilityId": "01ef02f605a59892", "scanner": "scanner-primary", "fingerprint": "8c86879c9fff9289", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-86772dde33d93580", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/components/onboarding/SectionBody.tsx:12"}, "properties": {"repobilityId": "8b34685e83107874", "scanner": "scanner-primary", "fingerprint": "86772dde33d93580", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-85171294d7d4b262", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/components/onboarding/ActionBar.tsx:7"}, "properties": {"repobilityId": "66423a3d02dd26a8", "scanner": "scanner-primary", "fingerprint": "85171294d7d4b262", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2a4853076e2fcbe0", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/components/onboarding/RequestMissingAccessModal.tsx:9"}, "properties": {"repobilityId": "a3a813afceccda0b", "scanner": "scanner-primary", "fingerprint": "2a4853076e2fcbe0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-67d8828d00c3b579", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/components/onboarding/FormCompleteModal.tsx:9"}, "properties": {"repobilityId": "6e77fed581788c7f", "scanner": "scanner-primary", "fingerprint": "67d8828d00c3b579", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dbd60b8d412b74ae", "level": "note", "message": {"text": "Legacy-named symbol `actions__copy` in app/components/onboarding/FieldActions.tsx:101"}, "properties": {"repobilityId": "6555c7f444bbd10e", "scanner": "scanner-primary", "fingerprint": "dbd60b8d412b74ae", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-dc54e7dc533c398f", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/components/onboarding/FieldActions.tsx:11"}, "properties": {"repobilityId": "7a8760020ccef757", "scanner": "scanner-primary", "fingerprint": "dc54e7dc533c398f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-546e9714fe077e2c", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/components/onboarding/PipelineStageCard.tsx:7"}, "properties": {"repobilityId": "4376e46981485558", "scanner": "scanner-primary", "fingerprint": "546e9714fe077e2c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cdde83e0d1a57fd6", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/components/onboarding/OpenHistoryModal.tsx:14"}, "properties": {"repobilityId": "6bb52bcbdd6db8e7", "scanner": "scanner-primary", "fingerprint": "cdde83e0d1a57fd6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f0f75a5d2c6c388b", "level": "none", "message": {"text": "Commented-code block (14 lines) in app/components/onboarding/PipelineStepper.tsx:11"}, "properties": {"repobilityId": "e9039309a3e37b1b", "scanner": "scanner-primary", "fingerprint": "f0f75a5d2c6c388b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cd2f5e219b758973", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/components/onboarding/icons.tsx:7"}, "properties": {"repobilityId": "0620bbabbaca43c1", "scanner": "scanner-primary", "fingerprint": "cd2f5e219b758973", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c96b813bfdb07739", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/client/[id]/page.tsx:49"}, "properties": {"repobilityId": "60c9de42c4590230", "scanner": "scanner-primary", "fingerprint": "c96b813bfdb07739", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e33d1d30b53a0018", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/lib/vercel-env.ts:47"}, "properties": {"repobilityId": "b4a030515f47566d", "scanner": "scanner-primary", "fingerprint": "e33d1d30b53a0018", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-773a4ba561b77f6e", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/lib/use-admin-auth.tsx:13"}, "properties": {"repobilityId": "90b96c37059e0b0a", "scanner": "scanner-primary", "fingerprint": "773a4ba561b77f6e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c72bf98c1cb2049c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/lib/use-admin-auth.tsx:94"}, "properties": {"repobilityId": "02e285213e452226", "scanner": "scanner-primary", "fingerprint": "c72bf98c1cb2049c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4bfa60dc0ff7a66f", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/lib/supabase-server.ts:6"}, "properties": {"repobilityId": "d496bb0df7185da0", "scanner": "scanner-primary", "fingerprint": "4bfa60dc0ff7a66f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-09fc7a4f168a9172", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/lib/require-role.test.ts:13"}, "properties": {"repobilityId": "836ad67362a9f415", "scanner": "scanner-primary", "fingerprint": "09fc7a4f168a9172", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5a097fe8ed073acf", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/lib/rate-limit.ts:5"}, "properties": {"repobilityId": "b897a432e9f668d9", "scanner": "scanner-primary", "fingerprint": "5a097fe8ed073acf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ec0d415d5e1102b9", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/lib/app-users.ts:13"}, "properties": {"repobilityId": "745df0e85dc3ac19", "scanner": "scanner-primary", "fingerprint": "ec0d415d5e1102b9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0cc2c1e68d5ff77a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/lib/content-data.ts:100"}, "properties": {"repobilityId": "6e98bbfb567fb54c", "scanner": "scanner-primary", "fingerprint": "0cc2c1e68d5ff77a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0d88063d79a41682", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/lib/app-session.ts:7"}, "properties": {"repobilityId": "a49d5bfe192b5f6f", "scanner": "scanner-primary", "fingerprint": "0d88063d79a41682", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e63e01a7951c0303", "level": "none", "message": {"text": "Commented-code block (10 lines) in app/lib/supabase-ssr.ts:6"}, "properties": {"repobilityId": "e6c8a9020395caa3", "scanner": "scanner-primary", "fingerprint": "e63e01a7951c0303", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fc81ba351555af3a", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/lib/oauth-email-guards.test.ts:12"}, "properties": {"repobilityId": "0402c076f327ab29", "scanner": "scanner-primary", "fingerprint": "fc81ba351555af3a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c6984df39700f589", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/lib/dashboard-data.ts:304"}, "properties": {"repobilityId": "64a86ffdf162700b", "scanner": "scanner-primary", "fingerprint": "c6984df39700f589", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-701eb321a8c9e84c", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/lib/require-role.ts:10"}, "properties": {"repobilityId": "14afaf5a2330350e", "scanner": "scanner-primary", "fingerprint": "701eb321a8c9e84c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7fd4db40f5cfecfe", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/lib/basecamp.ts:100"}, "properties": {"repobilityId": "1d5e730ae5c0d66f", "scanner": "scanner-primary", "fingerprint": "7fd4db40f5cfecfe", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1c0ad9a5982ddf8b", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/lib/basecamp-write.ts:13"}, "properties": {"repobilityId": "03802d5181b6f5d6", "scanner": "scanner-primary", "fingerprint": "1c0ad9a5982ddf8b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0c3e9890e7df2438", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/lib/basecamp-write.ts:54"}, "properties": {"repobilityId": "f2d129149a15f6ef", "scanner": "scanner-primary", "fingerprint": "0c3e9890e7df2438", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-acce8de5d57efb7b", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/lib/win-flag-detection.ts:33"}, "properties": {"repobilityId": "28b8c974e074813c", "scanner": "scanner-primary", "fingerprint": "acce8de5d57efb7b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8fcdb25b19bf7f69", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/lib/audit-metadata.ts:11"}, "properties": {"repobilityId": "9f238c9b9713a1ff", "scanner": "scanner-primary", "fingerprint": "8fcdb25b19bf7f69", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-495f4d510e2fb4e4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/lib/github.ts:42"}, "properties": {"repobilityId": "3d52a286783bf98b", "scanner": "scanner-primary", "fingerprint": "495f4d510e2fb4e4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1a64fb032d88297c", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/lib/csrf.ts:12"}, "properties": {"repobilityId": "bc194a90883680e9", "scanner": "scanner-primary", "fingerprint": "1a64fb032d88297c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-66a9afc4b71257c7", "level": "none", "message": {"text": "Commented-code block (8 lines) in app/lib/return-url.ts:7"}, "properties": {"repobilityId": "8507e313eeb3b380", "scanner": "scanner-primary", "fingerprint": "66a9afc4b71257c7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-28e231aac2ea2ddd", "level": "none", "message": {"text": "Commented-code block (11 lines) in app/lib/auth-audit.ts:6"}, "properties": {"repobilityId": "d0d4b61306338880", "scanner": "scanner-primary", "fingerprint": "28e231aac2ea2ddd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b98018808f40ff2d", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/lib/admin-auth.ts:7"}, "properties": {"repobilityId": "950b7a3982ee00af", "scanner": "scanner-primary", "fingerprint": "b98018808f40ff2d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2a40d5de7bad38eb", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/lib/with-admin-auth.ts:121"}, "properties": {"repobilityId": "2f84d0bffa4386b9", "scanner": "scanner-primary", "fingerprint": "2a40d5de7bad38eb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ab612982df960dbb", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/lib/supabase-browser.ts:10"}, "properties": {"repobilityId": "88ee7afebf239ce6", "scanner": "scanner-primary", "fingerprint": "ab612982df960dbb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-85e35c4ceed64363", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/lib/google.ts:19"}, "properties": {"repobilityId": "e6bcbe9f62581e38", "scanner": "scanner-primary", "fingerprint": "85e35c4ceed64363", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3eab9957b4c3a168", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/lib/onboarding/access-checklist.ts:36"}, "properties": {"repobilityId": "f6b4048b93df2ca1", "scanner": "scanner-primary", "fingerprint": "3eab9957b4c3a168", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-36a19fc879df2c9d", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/lib/onboarding/field-edit-validation.ts:15"}, "properties": {"repobilityId": "9bc176a52aca6cf4", "scanner": "scanner-primary", "fingerprint": "36a19fc879df2c9d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1c730ba44f59649f", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/lib/onboarding/types.gen.ts:10"}, "properties": {"repobilityId": "c6673821c62a0a8e", "scanner": "scanner-primary", "fingerprint": "1c730ba44f59649f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-87d7ebd1a63ada8f", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/lib/onboarding/derive-state.ts:7"}, "properties": {"repobilityId": "d70bdb67dba25b71", "scanner": "scanner-primary", "fingerprint": "87d7ebd1a63ada8f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e39f4e80dae6fc59", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/lib/onboarding/field-config.ts:8"}, "properties": {"repobilityId": "01b31200c9f6c4d7", "scanner": "scanner-primary", "fingerprint": "e39f4e80dae6fc59", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2fd72bb872adb10f", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/lib/onboarding/project-sections.ts:76"}, "properties": {"repobilityId": "f8b8a0345c273193", "scanner": "scanner-primary", "fingerprint": "2fd72bb872adb10f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e6212e946a4e5862", "level": "none", "message": {"text": "Commented-code block (8 lines) in app/lib/onboarding/get-by-workbook-id.ts:10"}, "properties": {"repobilityId": "54e8f86fb14751ee", "scanner": "scanner-primary", "fingerprint": "e6212e946a4e5862", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-988205ab7d593ec6", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/lib/onboarding/step-keys.ts:10"}, "properties": {"repobilityId": "e41eda98900e31d3", "scanner": "scanner-primary", "fingerprint": "988205ab7d593ec6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cbf32a2b618dac73", "level": "none", "message": {"text": "Commented-code block (11 lines) in app/lib/onboarding/humanize.ts:13"}, "properties": {"repobilityId": "fc0ab5b75d3724ab", "scanner": "scanner-primary", "fingerprint": "cbf32a2b618dac73", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1ad525fd770b1350", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/lib/onboarding/get-primary-contact.ts:7"}, "properties": {"repobilityId": "c70597efe371bc53", "scanner": "scanner-primary", "fingerprint": "1ad525fd770b1350", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c2e349ca78ef3d37", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/lib/onboarding/email-templates.ts:7"}, "properties": {"repobilityId": "f84e8da02485cf90", "scanner": "scanner-primary", "fingerprint": "c2e349ca78ef3d37", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e6ec4e7392bcdc04", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/lib/onboarding/pin.ts:34"}, "properties": {"repobilityId": "12856c98c6dd9a81", "scanner": "scanner-primary", "fingerprint": "e6ec4e7392bcdc04", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8a185389c64f267c", "level": "none", "message": {"text": "Commented-code block (13 lines) in app/lib/onboarding/types.ts:9"}, "properties": {"repobilityId": "6a2e2550af776fe1", "scanner": "scanner-primary", "fingerprint": "8a185389c64f267c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0641adec2d66e0d4", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/check-admin-routes-coverage.mjs:18"}, "properties": {"repobilityId": "d0c57fb39b0eaa39", "scanner": "scanner-primary", "fingerprint": "0641adec2d66e0d4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4d24f1ff4f977a0d", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/audit-health-scores.js:284"}, "properties": {"repobilityId": "5e3a6a9c2f00108f", "scanner": "scanner-primary", "fingerprint": "4d24f1ff4f977a0d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cc0f9d8e41b33b0e", "level": "note", "message": {"text": "11 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "c82cd8cd626c3599", "scanner": "scanner-primary", "fingerprint": "cc0f9d8e41b33b0e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}]}]}