{"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-6e4f7e6432242daf", "name": "Stray `console.log` in TS/JS \u2014 test-cetus-pools.js:6", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test-cetus-pools.js:6"}, "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-038a4bdbf4aeef4d", "name": "Stray `console.log` in TS/JS \u2014 index.ts:9", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 index.ts:9"}, "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-5c511fd96a95fe31", "name": "Stray `console.log` in TS/JS \u2014 whatsapp-bot-backend/src/config/config.ts:6", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 whatsapp-bot-backend/src/config/config.ts:6"}, "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-31286428a9b481c0", "name": "TODO/FIXME marker in shipping code \u2014 whatsapp-bot-backend/src/pages/api/whatsapp/webhook.ts:98", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 whatsapp-bot-backend/src/pages/api/whatsapp/webhook.ts:98"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e0362724b023b082", "name": "Stray `console.log` in TS/JS \u2014 whatsapp-bot-backend/src/services/whatsapp-sender.service.ts:162", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 whatsapp-bot-backend/src/services/whatsapp-sender.service.ts:162"}, "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-428c24b4aadac9d0", "name": "TODO/FIXME marker in shipping code \u2014 whatsapp-bot-backend/src/services/circle-link-listener.service.ts:3032", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 whatsapp-bot-backend/src/services/circle-link-listener.service.ts:3032"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8e612accb7d71d06", "name": "TODO/FIXME marker in shipping code \u2014 whatsapp-bot-backend/src/services/message-queue.service.ts:442", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 whatsapp-bot-backend/src/services/message-queue.service.ts:442"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-58f2c02eb8c6e856", "name": "TODO/FIXME marker in shipping code \u2014 whatsapp-bot-backend/src/services/webhook-handler.service.ts:222", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 whatsapp-bot-backend/src/services/webhook-handler.service.ts:222"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ccdc43e76f6f4d1a", "name": "TODO/FIXME marker in shipping code \u2014 whatsapp-bot-backend/src/services/analytics.service.ts:452", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 whatsapp-bot-backend/src/services/analytics.service.ts:452"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-738b77fdf20f0eb4", "name": "Stray `console.log` in TS/JS \u2014 scripts/migrate-postgres.js:45", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-postgres.js:45"}, "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-6ba7b784b802e609", "name": "Stray `console.log` in TS/JS \u2014 src/utils/logger.ts:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/utils/logger.ts:7"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-432b5e53066ad9d2", "name": "Stray `console.log` in TS/JS \u2014 src/components/ActivityDetector.tsx:22", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/ActivityDetector.tsx:22"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-436cf8029f2eb95f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/SimplifiedSwapUI.tsx:1964", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/SimplifiedSwapUI.tsx:1964"}, "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-9007f62ba31f793f", "name": "Stray `console.log` in TS/JS \u2014 src/components/SimplifiedSwapUI.tsx:65", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/SimplifiedSwapUI.tsx:65"}, "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-3b8aa77c6b90febc", "name": "Stray `console.log` in TS/JS \u2014 src/components/LoginButton.tsx:74", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/LoginButton.tsx:74"}, "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-b16f51d88fee302f", "name": "Stray `console.log` in TS/JS \u2014 src/components/InAppBrowserModal.tsx:184", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/InAppBrowserModal.tsx:184"}, "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-13c04aeb6b0369ea", "name": "Stray `console.log` in TS/JS \u2014 src/components/WhatsAppCircleIntegration.tsx:235", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/WhatsAppCircleIntegration.tsx:235"}, "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-c660b1c092672d48", "name": "Stray `console.log` in TS/JS \u2014 src/components/IdleWarningModal.tsx:72", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/IdleWarningModal.tsx:72"}, "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-faf869c33fd743ae", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/LegalAcceptanceModal.tsx:316", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/LegalAcceptanceModal.tsx:316"}, "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-35b7e1f9b98fb484", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/ui/Navbar.tsx:332", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/ui/Navbar.tsx:332"}, "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-4a8707adc195f9ad", "name": "Stray `console.log` in TS/JS \u2014 src/components/ui/Navbar.tsx:49", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/ui/Navbar.tsx:49"}, "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-bbcb62e6b61851af", "name": "Stray `console.log` in TS/JS \u2014 src/contexts/AuthContext.tsx:129", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/contexts/AuthContext.tsx:129"}, "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-489df448e67a87e0", "name": "Stray `console.log` in TS/JS \u2014 src/lib/whatsapp-registry-init.ts:21", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/whatsapp-registry-init.ts:21"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b84da7953e181130", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/dashboard.tsx:5928", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/dashboard.tsx:5928"}, "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-a195430912d8de1f", "name": "TODO/FIXME marker in shipping code \u2014 src/pages/dashboard.tsx:3319", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/pages/dashboard.tsx:3319"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5f91f43b70571035", "name": "Stray `console.log` in TS/JS \u2014 src/pages/dashboard.tsx:103", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/dashboard.tsx:103"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4f975ebf5511ebcd", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/create-circle.tsx:2371", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/create-circle.tsx:2371"}, "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-13dbc6c506963367", "name": "Stray `console.log` in TS/JS \u2014 src/pages/create-circle.tsx:646", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/create-circle.tsx:646"}, "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-cca8afca1c65244f", "name": "Stray `console.log` in TS/JS \u2014 src/pages/callback.tsx:46", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/callback.tsx:46"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0462c5674545284b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/index.tsx:788", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/index.tsx:788"}, "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-a17fd0a3b05b6aba", "name": "Stray `console.log` in TS/JS \u2014 src/pages/index.tsx:415", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/index.tsx:415"}, "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-1326dfd6d9dcae77", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/pages/index.tsx:573", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/pages/index.tsx:573"}, "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-802d2933a00d8b04", "name": "Stray `console.log` in TS/JS \u2014 src/pages/_app.tsx:64", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/_app.tsx:64"}, "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-96f8ec703e2f2a39", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/pages/legal/[doc].tsx:140", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/pages/legal/[doc].tsx:140"}, "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-05a98633024f5c48", "name": "Stray `console.log` in TS/JS \u2014 src/pages/auth/callback.tsx:50", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/auth/callback.tsx:50"}, "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-adf3536ca4891915", "name": "Stray `console.log` in TS/JS \u2014 src/pages/auth/whatsapp.tsx:50", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/auth/whatsapp.tsx:50"}, "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-70eaef462d3da6b9", "name": "Stray `console.log` in TS/JS \u2014 src/pages/circle/[id]/index.tsx:187", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/circle/[id]/index.tsx:187"}, "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-8fd24deed8613265", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/circle/[id]/manage/index.tsx:7170", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/circle/[id]/manage/index.tsx:7170"}, "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-66f4311dfcc1753b", "name": "Stray `console.log` in TS/JS \u2014 src/pages/circle/[id]/manage/index.tsx:107", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/circle/[id]/manage/index.tsx: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-a30223f0ba57bc5e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/circle/[id]/contribute/index.tsx:4149", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/circle/[id]/contribute/index.tsx:4149"}, "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-b75dba81148e8384", "name": "Stray `console.log` in TS/JS \u2014 src/pages/circle/[id]/contribute/index.tsx:572", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/circle/[id]/contribute/index.tsx:572"}, "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-94efb26622763ce1", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/pages/circle/[id]/contribute/index.tsx:3798", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/pages/circle/[id]/contribute/index.tsx:3798"}, "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-11822be0442ae752", "name": "Stray `console.log` in TS/JS \u2014 src/pages/circle/[id]/join/index.tsx:106", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/circle/[id]/join/index.tsx:106"}, "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-a94169ab41a4b548", "name": "Stray `console.log` in TS/JS \u2014 src/pages/api/zkLogin.ts:119", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/api/zkLogin.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-8c7f6cb6a08ae7cd", "name": "Stray `console.log` in TS/JS \u2014 src/pages/api/circle-stats.ts:110", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/api/circle-stats.ts:110"}, "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-c0183d0cb842e9d2", "name": "Stray `console.log` in TS/JS \u2014 src/pages/api/cetus-apr.ts:38", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/api/cetus-apr.ts:38"}, "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-5ecde54bd8b662e2", "name": "Stray `console.log` in TS/JS \u2014 src/pages/api/mainnet-signup.ts:108", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/api/mainnet-signup.ts:108"}, "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-bc52e7427a1dc9eb", "name": "Stray `console.log` in TS/JS \u2014 src/pages/api/legal/data-deletion-request.ts:116", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/api/legal/data-deletion-request.ts:116"}, "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-cb0b8e5df2b8bf1d", "name": "Stray `console.log` in TS/JS \u2014 src/pages/api/auth/callback.ts:6", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/api/auth/callback.ts:6"}, "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-aaa2096649e909eb", "name": "Stray `console.log` in TS/JS \u2014 src/pages/api/join-requests/[circleId].ts:37", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/api/join-requests/[circleId].ts:37"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0311789af474a59a", "name": "Stray `console.log` in TS/JS \u2014 src/pages/api/join-requests/check.ts:39", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/api/join-requests/check.ts:39"}, "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-b05f2f930269e4c0", "name": "Stray `console.log` in TS/JS \u2014 src/pages/api/join-requests/lookup-user.ts:36", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/api/join-requests/lookup-user.ts:36"}, "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-c72d9a2a95ae6720", "name": "Stray `console.log` in TS/JS \u2014 src/pages/api/join-requests/create.ts:106", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/api/join-requests/create.ts:106"}, "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-79549364bcf4d4d6", "name": "Stray `console.log` in TS/JS \u2014 src/pages/api/join-requests/[circleId]/update.ts:51", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/api/join-requests/[circleId]/update.ts:51"}, "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-d1bb1c693a64b21a", "name": "Stray `console.log` in TS/JS \u2014 src/pages/api/join-requests/user/[userAddress].ts:37", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/api/join-requests/user/[userAddress].ts:37"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4a7c6196bf883e64", "name": "Stray `console.log` in TS/JS \u2014 src/pages/api/join-requests/pending/[circleId].ts:35", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/api/join-requests/pending/[circleId].ts:35"}, "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-a5d1d4f3ae83f58c", "name": "Stray `console.log` in TS/JS \u2014 src/pages/api/whatsapp/admin-unlink-circle.ts:67", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/api/whatsapp/admin-unlink-circle.ts:67"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-848e77517b638fff", "name": "Stray `console.log` in TS/JS \u2014 src/pages/api/whatsapp/admin-link-circle.ts:310", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/api/whatsapp/admin-link-circle.ts: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-acc664cbbb82f8fb", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/admin/compliance.tsx:471", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/admin/compliance.tsx:471"}, "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-50d3c7441a3d2b9f", "name": "Stray `console.log` in TS/JS \u2014 src/services/join-request-service.ts:44", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/services/join-request-service.ts:44"}, "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-a1ec71565a960eda", "name": "Stray `console.log` in TS/JS \u2014 src/services/circle-service.ts:280", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/services/circle-service.ts:280"}, "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-e6af92df489c3cae", "name": "Stray `console.log` in TS/JS \u2014 src/services/zkLoginClient.ts:254", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/services/zkLoginClient.ts:254"}, "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-e79d39ba2bf06e74", "name": "Stray `console.log` in TS/JS \u2014 src/services/postgres-adapter.ts:81", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/services/postgres-adapter.ts:81"}, "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-08c907977322a712", "name": "Stray `console.log` in TS/JS \u2014 src/services/join-request-database.ts:31", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/services/join-request-database.ts:31"}, "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-83077f4dcaefa1f8", "name": "Stray `console.log` in TS/JS \u2014 src/services/cetus-service.ts:217", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/services/cetus-service.ts:217"}, "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-7eef096d1c20ce5c", "name": "Stray `console.log` in TS/JS \u2014 src/services/cetus-errors.ts:431", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/services/cetus-errors.ts:431"}, "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-a001642501d97e14", "name": "Stray `console.log` in TS/JS \u2014 src/services/whatsapp-registry-service.ts:87", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/services/whatsapp-registry-service.ts:87"}, "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-2cc2bab0b1ee4a8a", "name": "Stray `console.log` in TS/JS \u2014 src/services/network-config.ts:176", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/services/network-config.ts:176"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-baebcd4383d3d8de", "name": "Stray `console.log` in TS/JS \u2014 src/services/price-service.ts:132", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/services/price-service.ts:132"}, "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-bda777d0cb892660", "name": "Stray `console.log` in TS/JS \u2014 src/services/swap-service.ts:160", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/services/swap-service.ts:160"}, "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-a91c7a5da8227cc5", "name": "Stray `console.log` in TS/JS \u2014 src/services/mainnet-signup-database.ts:34", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/services/mainnet-signup-database.ts:34"}, "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-468b50be2cf39d43", "name": "Stray `console.log` in TS/JS \u2014 src/services/circle-status.service.ts:52", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/services/circle-status.service.ts:52"}, "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-abea2e5cd41e2aab", "name": "Stray `console.log` in TS/JS \u2014 src/services/persistent-salt-service.ts:133", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/services/persistent-salt-service.ts:133"}, "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-cb05753f41450ca6", "name": "TODO/FIXME marker in shipping code \u2014 src/services/circle-member-manager.service.ts:242", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/services/circle-member-manager.service.ts:242"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7e6e76b1778fd8e6", "name": "Stray `console.log` in TS/JS \u2014 src/services/enokiZkLoginService.ts:51", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/services/enokiZkLoginService.ts:51"}, "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-a69c2bf56dc2d96c", "name": "Docker base image is tag-pinned but not digest-pinned: node:18-alpine3.19", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: node:18-alpine3.19"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-19969849fa62c5e7", "name": "Docker base image is tag-pinned but not digest-pinned: node:18-alpine3.19", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: node:18-alpine3.19"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aa5acaa49eb8315b", "name": "Containers defined but no K8s/orchestration manifest found", "shortDescription": {"text": "Containers defined but no K8s/orchestration manifest found"}, "fullDescription": {"text": "Repo has Dockerfiles/compose but no Kubernetes/Nomad manifests. If the target deployment is K8s, the manifests may live in a separate ops repo."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6314cb8374b1fd6e", "name": "Insecure pattern 'cors_wildcard' in index.ts:14", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in index.ts:14"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-69c9a6b555d66b03", "name": "Insecure pattern 'weak_hash' in next.config.js:115", "shortDescription": {"text": "Insecure pattern 'weak_hash' in next.config.js:115"}, "fullDescription": {"text": "Found a known-risky pattern (weak_hash). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4067b6b07c807365", "name": "Insecure pattern 'exec_used' in scripts/bootstrap-package.mjs:124", "shortDescription": {"text": "Insecure pattern 'exec_used' in scripts/bootstrap-package.mjs:124"}, "fullDescription": {"text": "Found a known-risky pattern (exec_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-281b62caefade5c1", "name": "Insecure pattern 'node_child_process' in scripts/bootstrap-package.mjs:30", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/bootstrap-package.mjs:30"}, "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-8a28c63435b7b265", "name": "Insecure pattern 'dangerous_innerhtml' in src/components/LegalAcceptanceModal.tsx:316", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/LegalAcceptanceModal.tsx:316"}, "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-af3f4edaf9ee2018", "name": "Insecure pattern 'local_storage_auth_token' in src/contexts/AuthContext.tsx:222", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in src/contexts/AuthContext.tsx:222"}, "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-392d7ee2ac038763", "name": "Insecure pattern 'dangerous_innerhtml' in src/pages/index.tsx:573", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/pages/index.tsx:573"}, "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-0af1e2baa9cabdd7", "name": "Insecure pattern 'dangerous_innerhtml' in src/pages/legal/[doc].tsx:140", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/pages/legal/[doc].tsx:140"}, "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-b913e72cfd4aac45", "name": "Insecure pattern 'dangerous_innerhtml' in src/pages/circle/[id]/contribute/index.tsx:3798", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/pages/circle/[id]/contribute/index.tsx:3798"}, "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-a3461c497417701f", "name": "Insecure pattern 'exec_used' in src/services/postgres-adapter.ts:168", "shortDescription": {"text": "Insecure pattern 'exec_used' in src/services/postgres-adapter.ts:168"}, "fullDescription": {"text": "Found a known-risky pattern (exec_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1ea3c8dc7a541849", "name": "Insecure pattern 'cors_wildcard' in src/services/persistent-salt-service.ts:107", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in src/services/persistent-salt-service.ts:107"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f610807a4016d5fc", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-680f581490b32ca0", "name": "Very large file: whatsapp-bot-backend/src/services/circle-link-listener.service.ts (3094 lines)", "shortDescription": {"text": "Very large file: whatsapp-bot-backend/src/services/circle-link-listener.service.ts (3094 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e336962d1d680248", "name": "Very large file: src/components/SimplifiedSwapUI.tsx (2003 lines)", "shortDescription": {"text": "Very large file: src/components/SimplifiedSwapUI.tsx (2003 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-da5b10f57e4c64b8", "name": "Very large file: src/lib/i18n.ts (993 lines)", "shortDescription": {"text": "Very large file: src/lib/i18n.ts (993 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4437ed1956263bc6", "name": "Very large file: src/pages/dashboard.tsx (8730 lines)", "shortDescription": {"text": "Very large file: src/pages/dashboard.tsx (8730 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-856e4b04f9656d83", "name": "Very large file: src/pages/create-circle.tsx (2715 lines)", "shortDescription": {"text": "Very large file: src/pages/create-circle.tsx (2715 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-270bbde51d60dcbe", "name": "Very large file: src/pages/index.tsx (1378 lines)", "shortDescription": {"text": "Very large file: src/pages/index.tsx (1378 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f2a567451d83657c", "name": "Very large file: src/pages/circle/[id]/index.tsx (1973 lines)", "shortDescription": {"text": "Very large file: src/pages/circle/[id]/index.tsx (1973 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-15916b659a512bb3", "name": "Very large file: src/pages/circle/[id]/manage/index.tsx (8366 lines)", "shortDescription": {"text": "Very large file: src/pages/circle/[id]/manage/index.tsx (8366 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5bacf050e3add115", "name": "Very large file: src/pages/circle/[id]/contribute/index.tsx (4462 lines)", "shortDescription": {"text": "Very large file: src/pages/circle/[id]/contribute/index.tsx (4462 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7c20f084e66e41b0", "name": "Very large file: src/pages/circle/[id]/join/index.tsx (1291 lines)", "shortDescription": {"text": "Very large file: src/pages/circle/[id]/join/index.tsx (1291 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-66f2a0f78dc7d70b", "name": "Very large file: src/pages/api/zkLogin.ts (6435 lines)", "shortDescription": {"text": "Very large file: src/pages/api/zkLogin.ts (6435 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e34ec050169fc72e", "name": "Very large file: src/services/zkLoginClient.ts (1536 lines)", "shortDescription": {"text": "Very large file: src/services/zkLoginClient.ts (1536 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ed31d6be92b7b9b3", "name": "Node manifest has dependencies but no lockfile: whatsapp-bot-backend/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: whatsapp-bot-backend/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "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 1084 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 83 placeholder/mock markers across 35 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, lockfile. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license, lockfile. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-70e073791d475a98", "name": "Commented-code block (11 lines) in next.config.js:7", "shortDescription": {"text": "Commented-code block (11 lines) in next.config.js: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-e2b7e9b5a8856d14", "name": "Legacy-named symbol `canonicalOrLegacy` in whatsapp-bot-backend/src/config/env.ts:44", "shortDescription": {"text": "Legacy-named symbol `canonicalOrLegacy` in whatsapp-bot-backend/src/config/env.ts:44"}, "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-09f2d18b2fa21f43", "name": "Legacy-named symbol `daysOld` in whatsapp-bot-backend/src/pages/api/whatsapp/webhook-handler.ts:297", "shortDescription": {"text": "Legacy-named symbol `daysOld` in whatsapp-bot-backend/src/pages/api/whatsapp/webhook-handler.ts:297"}, "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-de759f6bc8cdeb71", "name": "Commented-code block (7 lines) in whatsapp-bot-backend/src/pages/api/whatsapp/webhook.ts:196", "shortDescription": {"text": "Commented-code block (7 lines) in whatsapp-bot-backend/src/pages/api/whatsapp/webhook.ts:196"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9743c0bd8c0332ec", "name": "Commented-code block (6 lines) in whatsapp-bot-backend/src/services/cycle-reminder.service.ts:6", "shortDescription": {"text": "Commented-code block (6 lines) in whatsapp-bot-backend/src/services/cycle-reminder.service.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-992dc49c46997ca0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 whatsapp-bot-backend/src/services/cycle-reminder.service.ts:864", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 whatsapp-bot-backend/src/services/cycle-reminder.service.ts:864"}, "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-38e511b7ec5df779", "name": "Commented-code block (5 lines) in scripts/smoke-testnet.mjs:2", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/smoke-testnet.mjs:2"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fc12fe57dc6ffaad", "name": "Commented-code block (7 lines) in scripts/cycle-finalized-notifier.mjs:4", "shortDescription": {"text": "Commented-code block (7 lines) in scripts/cycle-finalized-notifier.mjs:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f2139a72f2132c47", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/cycle-finalized-notifier.mjs:202", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/cycle-finalized-notifier.mjs:202"}, "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-147eee3c7948f025", "name": "Commented-code block (14 lines) in scripts/migrate-postgres.mjs:6", "shortDescription": {"text": "Commented-code block (14 lines) in scripts/migrate-postgres.mjs: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-fbcd239cc325ec65", "name": "Commented-code block (10 lines) in scripts/bootstrap-package.mjs:7", "shortDescription": {"text": "Commented-code block (10 lines) in scripts/bootstrap-package.mjs: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-bc1bf5018bb42573", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/bootstrap-package.mjs:151", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/bootstrap-package.mjs:151"}, "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-14b224539bdb5429", "name": "Commented-code block (21 lines) in scripts/generate-secrets.mjs:6", "shortDescription": {"text": "Commented-code block (21 lines) in scripts/generate-secrets.mjs: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-5c2d3eb1388cb350", "name": "Commented-code block (6 lines) in scripts/stripe-bootstrap.mjs:6", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/stripe-bootstrap.mjs: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-848258978c3aeae5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/stripe-bootstrap.mjs:123", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/stripe-bootstrap.mjs:123"}, "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-acd42bed3803a089", "name": "Legacy-named symbol `canonicalOrLegacy` in scripts/validate-env.mjs:37", "shortDescription": {"text": "Legacy-named symbol `canonicalOrLegacy` in scripts/validate-env.mjs:37"}, "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-0739255aeae7dacf", "name": "Commented-code block (5 lines) in scripts/validate-env.mjs:102", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/validate-env.mjs:102"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a2b235ebff5ae7c6", "name": "Legacy-named symbol `canonicalOrLegacy` in src/config/public-env.ts:113", "shortDescription": {"text": "Legacy-named symbol `canonicalOrLegacy` in src/config/public-env.ts:113"}, "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-639046a30a465e80", "name": "Commented-code block (5 lines) in src/config/public-env.ts:21", "shortDescription": {"text": "Commented-code block (5 lines) in src/config/public-env.ts:21"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b57a041757637e5b", "name": "Commented-code block (6 lines) in src/middleware/admin-auth.middleware.ts:100", "shortDescription": {"text": "Commented-code block (6 lines) in src/middleware/admin-auth.middleware.ts:100"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f37d7005c67dbb74", "name": "Commented-code block (5 lines) in src/components/CycleEscrowPanel.tsx:317", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/CycleEscrowPanel.tsx:317"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b3f3239180e3122e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/StablecoinSwapForm.tsx:110", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/StablecoinSwapForm.tsx:110"}, "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-63b64f98857df03b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/SimplifiedSwapUI.tsx:652", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/SimplifiedSwapUI.tsx:652"}, "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-6e8e0f12113ee69d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/WhatsAppCircleIntegration.tsx:137", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/WhatsAppCircleIntegration.tsx:137"}, "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-f35ca47c665eaa70", "name": "Commented-code block (10 lines) in src/components/LegalAcceptanceModal.tsx:4", "shortDescription": {"text": "Commented-code block (10 lines) in src/components/LegalAcceptanceModal.tsx:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b675476257e1476c", "name": "Commented-code block (6 lines) in src/components/milestones/milestone-plan.ts:11", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/milestones/milestone-plan.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-db6da335bb557aa7", "name": "Commented-code block (7 lines) in src/components/milestones/MilestonePlanEditor.tsx:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/components/milestones/MilestonePlanEditor.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-336591768a84572b", "name": "Commented-code block (7 lines) in src/components/milestones/MilestoneTimeline.tsx:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/components/milestones/MilestoneTimeline.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9780c020afd8fc9b", "name": "Commented-code block (6 lines) in src/components/milestones/GoalCelebration.tsx:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/milestones/GoalCelebration.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-780278ca414304b7", "name": "Commented-code block (5 lines) in src/components/milestones/MilestoneCreator.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/milestones/MilestoneCreator.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-77f7f96d002c9b08", "name": "Commented-code block (9 lines) in src/components/milestones/entitlement-preflight.ts:5", "shortDescription": {"text": "Commented-code block (9 lines) in src/components/milestones/entitlement-preflight.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-871dd7373b521366", "name": "Commented-code block (6 lines) in src/contexts/AuthContext.tsx:71", "shortDescription": {"text": "Commented-code block (6 lines) in src/contexts/AuthContext.tsx:71"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bd66e2fec98229e4", "name": "Commented-code block (7 lines) in src/lib/milestone-discovery.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/milestone-discovery.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-96ea2e184f46ba99", "name": "Commented-code block (5 lines) in src/lib/client-ip.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/client-ip.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6371c3502e1b4baf", "name": "Commented-code block (6 lines) in src/lib/onramp-logging.ts:33", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/onramp-logging.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-c00ba38a997cb9b4", "name": "Commented-code block (5 lines) in src/lib/whatsapp-link-index.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/whatsapp-link-index.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0733883aaffe2214", "name": "Commented-code block (5 lines) in src/lib/zklogin-session-registry.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/zklogin-session-registry.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-459315185259515a", "name": "Commented-code block (7 lines) in src/lib/walrus-renewal.ts:6", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/walrus-renewal.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-1b7903fbde18fa94", "name": "Commented-code block (12 lines) in src/lib/legal-acceptance-server.ts:9", "shortDescription": {"text": "Commented-code block (12 lines) in src/lib/legal-acceptance-server.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-e64c69a73eb8ad53", "name": "Commented-code block (7 lines) in src/lib/cycle-escrow-discovery.ts:63", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/cycle-escrow-discovery.ts:63"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-773082a7a8285d6d", "name": "Commented-code block (8 lines) in src/lib/pg-pool.ts:13", "shortDescription": {"text": "Commented-code block (8 lines) in src/lib/pg-pool.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-99c40d041a9124f5", "name": "Commented-code block (6 lines) in src/lib/circle-settlement.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/circle-settlement.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-59d94106046fa4bf", "name": "Commented-code block (9 lines) in src/lib/webhook-dedupe.ts:3", "shortDescription": {"text": "Commented-code block (9 lines) in src/lib/webhook-dedupe.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ee9066d3f5bc70c6", "name": "Commented-code block (7 lines) in src/lib/attestation-queue.ts:6", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/attestation-queue.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-71ed34df1ca2b0e7", "name": "Commented-code block (8 lines) in src/lib/entitlement-gate.ts:6", "shortDescription": {"text": "Commented-code block (8 lines) in src/lib/entitlement-gate.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-03a5ae5fb4bf270d", "name": "Commented-code block (6 lines) in src/lib/compliance-gate.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/compliance-gate.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1c7a6a931971c609", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/cetus-service.ts:144", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/cetus-service.ts:144"}, "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-b979b98c3b179484", "name": "Commented-code block (8 lines) in src/lib/ramp-geo.ts:3", "shortDescription": {"text": "Commented-code block (8 lines) in src/lib/ramp-geo.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-425d0bca396b65bf", "name": "Commented-code block (7 lines) in src/lib/zklogin-client-signer.ts:9", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/zklogin-client-signer.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-3874d8391cf72827", "name": "Commented-code block (12 lines) in src/lib/cycle-finalized-cron.ts:8", "shortDescription": {"text": "Commented-code block (12 lines) in src/lib/cycle-finalized-cron.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-705f88cb17d800a4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/swap-service.ts:170", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/swap-service.ts:170"}, "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-475ae1b7a78a723a", "name": "Commented-code block (6 lines) in src/lib/whatsapp-notifier.ts:7", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/whatsapp-notifier.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-cfc973f6a3d4e195", "name": "Commented-code block (8 lines) in src/lib/rate-limit.ts:4", "shortDescription": {"text": "Commented-code block (8 lines) in src/lib/rate-limit.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-638d7bcb38484c55", "name": "Commented-code block (5 lines) in src/lib/i18n.ts:18", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/i18n.ts:18"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d6f6c7a0a7198fcc", "name": "Commented-code block (6 lines) in src/lib/timing-safe.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/timing-safe.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-64646532c0ba2df1", "name": "Commented-code block (5 lines) in src/lib/circle-admin-verification.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/circle-admin-verification.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7cc0421cccc7fb61", "name": "Commented-code block (6 lines) in src/lib/membership-discovery.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/membership-discovery.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d6c6448bcb86a870", "name": "Commented-code block (5 lines) in src/lib/legal-acceptance.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/legal-acceptance.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f15fb43dd498193f", "name": "Commented-code block (7 lines) in src/lib/__tests__/milestone-entitlement-preflight.test.ts:121", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/__tests__/milestone-entitlement-preflight.test.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-4830409afc8ba0ee", "name": "Commented-code block (7 lines) in src/lib/__tests__/walrus-renewal.test.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/__tests__/walrus-renewal.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6619d65a7e3a901b", "name": "Commented-code block (5 lines) in src/lib/__tests__/ramp-pii-redaction.test.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/__tests__/ramp-pii-redaction.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a92d33d2abb0eb2c", "name": "Commented-code block (7 lines) in src/lib/__tests__/ramp-webhook-auth.test.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/__tests__/ramp-webhook-auth.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5d237dd87fb81823", "name": "Commented-code block (6 lines) in src/lib/__tests__/i18n-key-parity.test.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/__tests__/i18n-key-parity.test.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f23cdfc3266c2c02", "name": "Commented-code block (7 lines) in src/lib/__tests__/cycle-finalized-cron.test.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/__tests__/cycle-finalized-cron.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a75b8fb213db42df", "name": "Commented-code block (6 lines) in src/lib/whatsapp-bot/circle-phone.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/whatsapp-bot/circle-phone.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9edd7c0da7d55619", "name": "Commented-code block (5 lines) in src/lib/whatsapp-bot/circle-events.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/whatsapp-bot/circle-events.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e27a3424970016ba", "name": "Commented-code block (5 lines) in src/pages/dashboard.tsx:173", "shortDescription": {"text": "Commented-code block (5 lines) in src/pages/dashboard.tsx:173"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-721bba53d499afea", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/dashboard.tsx:2285", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/dashboard.tsx:2285"}, "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-952e9206e40632ba", "name": "Commented-code block (5 lines) in src/pages/create-circle.tsx:28", "shortDescription": {"text": "Commented-code block (5 lines) in src/pages/create-circle.tsx:28"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1e320049f191dba1", "name": "Commented-code block (8 lines) in src/pages/pricing.tsx:3", "shortDescription": {"text": "Commented-code block (8 lines) in src/pages/pricing.tsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-833659d73337e462", "name": "Commented-code block (8 lines) in src/pages/_app.tsx:71", "shortDescription": {"text": "Commented-code block (8 lines) in src/pages/_app.tsx:71"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2b25721650c222ea", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/auth/callback.tsx:150", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/auth/callback.tsx:150"}, "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-c9f25eeaa3998bb7", "name": "Commented-code block (6 lines) in src/pages/circle/[id]/goals.tsx:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/pages/circle/[id]/goals.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a6b03b991fab950b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/circle/[id]/manage/index.tsx:1632", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/circle/[id]/manage/index.tsx:1632"}, "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-7fff36bcc4b0b8fc", "name": "Commented-code block (5 lines) in src/pages/circle/[id]/contribute/index.tsx:110", "shortDescription": {"text": "Commented-code block (5 lines) in src/pages/circle/[id]/contribute/index.tsx:110"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4465a7747ace9085", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/circle/[id]/contribute/index.tsx:2430", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/circle/[id]/contribute/index.tsx:2430"}, "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-206871b46c573de9", "name": "Commented-code block (5 lines) in src/pages/api/health.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in src/pages/api/health.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-41c93f904a51c6f6", "name": "Commented-code block (7 lines) in src/pages/api/zkLogin.ts:131", "shortDescription": {"text": "Commented-code block (7 lines) in src/pages/api/zkLogin.ts:131"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dbc4d26106b75cc8", "name": "Commented-code block (6 lines) in src/pages/api/legal/accept.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in src/pages/api/legal/accept.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2f2ead33bcd7bc59", "name": "Commented-code block (6 lines) in src/pages/api/legal/data-deletion-request.ts:6", "shortDescription": {"text": "Commented-code block (6 lines) in src/pages/api/legal/data-deletion-request.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-71ff03be47a679ff", "name": "Commented-code block (5 lines) in src/pages/api/legal/doc.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/pages/api/legal/doc.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c1a0f10e73ef6b12", "name": "Commented-code block (5 lines) in src/pages/api/faucet/drip.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in src/pages/api/faucet/drip.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cdcb732790c40c98", "name": "Commented-code block (13 lines) in src/pages/api/onramp/moonpay/webhook.ts:82", "shortDescription": {"text": "Commented-code block (13 lines) in src/pages/api/onramp/moonpay/webhook.ts:82"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a23e3b809733d07a", "name": "Commented-code block (6 lines) in src/pages/api/onramp/coinbase/webhook.ts:9", "shortDescription": {"text": "Commented-code block (6 lines) in src/pages/api/onramp/coinbase/webhook.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-7382acfb259db894", "name": "Commented-code block (12 lines) in src/pages/api/onramp/transak/webhook.ts:79", "shortDescription": {"text": "Commented-code block (12 lines) in src/pages/api/onramp/transak/webhook.ts:79"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6ececa4c934e4072", "name": "Commented-code block (7 lines) in src/pages/api/whatsapp/admin-link-circle.ts:239", "shortDescription": {"text": "Commented-code block (7 lines) in src/pages/api/whatsapp/admin-link-circle.ts:239"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-562d2760348dc9a5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/api/whatsapp/webhook.ts:377", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/api/whatsapp/webhook.ts:377"}, "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-0c98fc788bedcb7c", "name": "Commented-code block (5 lines) in src/pages/api/cron/cycle-finalized.ts:261", "shortDescription": {"text": "Commented-code block (5 lines) in src/pages/api/cron/cycle-finalized.ts:261"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9e632cdd1f806c23", "name": "Commented-code block (6 lines) in src/pages/api/cron/whatsapp-circle-events.ts:370", "shortDescription": {"text": "Commented-code block (6 lines) in src/pages/api/cron/whatsapp-circle-events.ts:370"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-17a8b8dbb1256dd6", "name": "Commented-code block (5 lines) in src/hooks/useIdleTimer.ts:52", "shortDescription": {"text": "Commented-code block (5 lines) in src/hooks/useIdleTimer.ts:52"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e96d720eac91e61c", "name": "Commented-code block (6 lines) in src/services/zkLoginClient.ts:1439", "shortDescription": {"text": "Commented-code block (6 lines) in src/services/zkLoginClient.ts:1439"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ba08914f01ab320a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/zkLoginClient.ts:256", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/zkLoginClient.ts:256"}, "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-5cfd7a5397d53fa6", "name": "Commented-code block (5 lines) in src/services/milestone-service.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/services/milestone-service.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f36a324ccb8da02d", "name": "Commented-code block (9 lines) in src/services/compliance-attestation-service.ts:4", "shortDescription": {"text": "Commented-code block (9 lines) in src/services/compliance-attestation-service.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2da91b8124537427", "name": "Legacy-named symbol `isRegistryDeprecated` in src/services/whatsapp-registry-service.ts:258", "shortDescription": {"text": "Legacy-named symbol `isRegistryDeprecated` in src/services/whatsapp-registry-service.ts:258"}, "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-8bc162fe3c3fa114", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/swap-service.ts:74", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/swap-service.ts:74"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6cb537115144ac6f", "name": "Legacy-named symbol `clob_v2` in src/services/constants.ts:19", "shortDescription": {"text": "Legacy-named symbol `clob_v2` in src/services/constants.ts:19"}, "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-e91c7b48bbb29cfd", "name": "Commented-code block (6 lines) in src/services/stripe-service.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/services/stripe-service.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-849307d6e6e79fdc", "name": "Commented-code block (5 lines) in src/services/transak-service.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in src/services/transak-service.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5cb616fe9772490f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/circle-status.service.ts:394", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/circle-status.service.ts:394"}, "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-3555af3824aaea3d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/enokiZkLoginService.ts:306", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/enokiZkLoginService.ts:306"}, "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-a330d8bcaa9d114e", "name": "71 env vars used in code but missing from .env.example", "shortDescription": {"text": "71 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `ALLOW_LIVE`, `BILLING_WEBHOOK_URL`, `COINBASE_ONRAMP_API_BASE_URL`, `COINBASE_ONRAMP_JWT_EXPIRES_IN_SECONDS`, `COINBASE_ONRAMP_REQUEST_TIMEOUT_MS`, `COMPLIANCE_RATE_LIMIT`, `COMPLIANCE_RATE_LIMIT_WINDOW_MS`, `ENABLE_EVENT_LISTENER` + 63 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}}, {"id": "scanner-27f5a529559b1f6a", "name": "Dangling fetch: POST /api/circles/swap-config (src/components/StablecoinSwapForm.tsx:110)", "shortDescription": {"text": "Dangling fetch: POST /api/circles/swap-config (src/components/StablecoinSwapForm.tsx:110)"}, "fullDescription": {"text": "`src/components/StablecoinSwapForm.tsx:110` calls `POST /api/circles/swap-config` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/circles/swap-config`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-19b371d8102039fc", "name": "Dangling fetch: POST /api/onramp/moonpay/session (src/components/MoonPayLauncher.tsx:44)", "shortDescription": {"text": "Dangling fetch: POST /api/onramp/moonpay/session (src/components/MoonPayLauncher.tsx:44)"}, "fullDescription": {"text": "`src/components/MoonPayLauncher.tsx:44` calls `POST /api/onramp/moonpay/session` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/onramp/moonpay/session`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-78f874cb14844377", "name": "Dangling fetch: GET /api/onramp/coinbase/options?${params.toString()} (src/components/CoinbaseOnrampLauncher.tsx:134)", "shortDescription": {"text": "Dangling fetch: GET /api/onramp/coinbase/options?${params.toString()} (src/components/CoinbaseOnrampLauncher.tsx:134)"}, "fullDescription": {"text": "`src/components/CoinbaseOnrampLauncher.tsx:134` calls `GET /api/onramp/coinbase/options?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/onramp/coinbase/options`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-392568970cdc1b41", "name": "Dangling fetch: POST /api/zkLogin (src/components/SimplifiedSwapUI.tsx:652)", "shortDescription": {"text": "Dangling fetch: POST /api/zkLogin (src/components/SimplifiedSwapUI.tsx:652)"}, "fullDescription": {"text": "`src/components/SimplifiedSwapUI.tsx:652` calls `POST /api/zkLogin` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/zklogin`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e091cb35705e1954", "name": "Dangling fetch: POST /api/zkLogin (src/components/SimplifiedSwapUI.tsx:850)", "shortDescription": {"text": "Dangling fetch: POST /api/zkLogin (src/components/SimplifiedSwapUI.tsx:850)"}, "fullDescription": {"text": "`src/components/SimplifiedSwapUI.tsx:850` calls `POST /api/zkLogin` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/zklogin`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9b03e424f9932679", "name": "Dangling fetch: POST /api/zkLogin (src/components/SimplifiedSwapUI.tsx:1140)", "shortDescription": {"text": "Dangling fetch: POST /api/zkLogin (src/components/SimplifiedSwapUI.tsx:1140)"}, "fullDescription": {"text": "`src/components/SimplifiedSwapUI.tsx:1140` calls `POST /api/zkLogin` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/zklogin`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d0d7666604145281", "name": "Dangling fetch: GET /api/whatsapp/admin-link-circle?circleId=${circleId}&network=${currentNetwork} (src/components/Whats", "shortDescription": {"text": "Dangling fetch: GET /api/whatsapp/admin-link-circle?circleId=${circleId}&network=${currentNetwork} (src/components/WhatsAppCircleIntegration.tsx:137)"}, "fullDescription": {"text": "`src/components/WhatsAppCircleIntegration.tsx:137` calls `GET /api/whatsapp/admin-link-circle?circleId=${circleId}&network=${currentNetwork}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/whatsapp/admin-link-circle`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-01aa084713a55981", "name": "Dangling fetch: POST /api/whatsapp/admin-link-circle (src/components/WhatsAppCircleIntegration.tsx:197)", "shortDescription": {"text": "Dangling fetch: POST /api/whatsapp/admin-link-circle (src/components/WhatsAppCircleIntegration.tsx:197)"}, "fullDescription": {"text": "`src/components/WhatsAppCircleIntegration.tsx:197` calls `POST /api/whatsapp/admin-link-circle` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/whatsapp/admin-link-circle`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dad4d5cedaf1f477", "name": "Dangling fetch: POST /api/whatsapp/admin-unlink-circle (src/components/WhatsAppCircleIntegration.tsx:255)", "shortDescription": {"text": "Dangling fetch: POST /api/whatsapp/admin-unlink-circle (src/components/WhatsAppCircleIntegration.tsx:255)"}, "fullDescription": {"text": "`src/components/WhatsAppCircleIntegration.tsx:255` calls `POST /api/whatsapp/admin-unlink-circle` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/whatsapp/admin-unlink-circle`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0f0a615844912775", "name": "Dangling fetch: POST /api/onramp/transak/session (src/components/TransakLauncher.tsx:46)", "shortDescription": {"text": "Dangling fetch: POST /api/onramp/transak/session (src/components/TransakLauncher.tsx:46)"}, "fullDescription": {"text": "`src/components/TransakLauncher.tsx:46` calls `POST /api/onramp/transak/session` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/onramp/transak/session`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f16ef13fe5ebe856", "name": "Dangling fetch: GET /api/legal/doc?doc=risk (src/components/LegalAcceptanceModal.tsx:200)", "shortDescription": {"text": "Dangling fetch: GET /api/legal/doc?doc=risk (src/components/LegalAcceptanceModal.tsx:200)"}, "fullDescription": {"text": "`src/components/LegalAcceptanceModal.tsx:200` calls `GET /api/legal/doc?doc=risk` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/legal/doc`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-03f7cf8aef9438db", "name": "Dangling fetch: POST /api/legal/accept (src/components/LegalAcceptanceModal.tsx:292)", "shortDescription": {"text": "Dangling fetch: POST /api/legal/accept (src/components/LegalAcceptanceModal.tsx:292)"}, "fullDescription": {"text": "`src/components/LegalAcceptanceModal.tsx:292` calls `POST /api/legal/accept` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/legal/accept`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1d21329b339317f5", "name": "Dangling fetch: GET /api/legal/status (src/components/LegalAcceptanceModal.tsx:498)", "shortDescription": {"text": "Dangling fetch: GET /api/legal/status (src/components/LegalAcceptanceModal.tsx:498)"}, "fullDescription": {"text": "`src/components/LegalAcceptanceModal.tsx:498` calls `GET /api/legal/status` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/legal/status`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-635ca4018381dfd0", "name": "Dangling fetch: GET /api/join-requests/pending/mock-circle-1?clear=all (src/components/ui/Navbar.tsx:198)", "shortDescription": {"text": "Dangling fetch: GET /api/join-requests/pending/mock-circle-1?clear=all (src/components/ui/Navbar.tsx:198)"}, "fullDescription": {"text": "`src/components/ui/Navbar.tsx:198` calls `GET /api/join-requests/pending/mock-circle-1?clear=all` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/join-requests/pending/mock-circle-1`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-30158128d97e0e59", "name": "Dangling fetch: GET /api/billing/status (src/components/ui/Navbar.tsx:242)", "shortDescription": {"text": "Dangling fetch: GET /api/billing/status (src/components/ui/Navbar.tsx:242)"}, "fullDescription": {"text": "`src/components/ui/Navbar.tsx:242` calls `GET /api/billing/status` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/billing/status`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-24328a50e8b0adf1", "name": "Dangling fetch: GET /api/billing/status (src/components/milestones/entitlement-preflight.ts:56)", "shortDescription": {"text": "Dangling fetch: GET /api/billing/status (src/components/milestones/entitlement-preflight.ts:56)"}, "fullDescription": {"text": "`src/components/milestones/entitlement-preflight.ts:56` calls `GET /api/billing/status` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/billing/status`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-180200fc0b6df88f", "name": "Dangling fetch: POST /api/whatsapp/auth/notify (src/contexts/AuthContext.tsx:323)", "shortDescription": {"text": "Dangling fetch: POST /api/whatsapp/auth/notify (src/contexts/AuthContext.tsx:323)"}, "fullDescription": {"text": "`src/contexts/AuthContext.tsx:323` calls `POST /api/whatsapp/auth/notify` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/whatsapp/auth/notify`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-31050af82233e2f8", "name": "Dangling fetch: POST /api/zkLogin (src/contexts/AuthContext.tsx:371)", "shortDescription": {"text": "Dangling fetch: POST /api/zkLogin (src/contexts/AuthContext.tsx:371)"}, "fullDescription": {"text": "`src/contexts/AuthContext.tsx:371` calls `POST /api/zkLogin` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/zklogin`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-79069130c1245238", "name": "Dangling fetch: POST /api/zkLogin (src/contexts/AuthContext.tsx:477)", "shortDescription": {"text": "Dangling fetch: POST /api/zkLogin (src/contexts/AuthContext.tsx:477)"}, "fullDescription": {"text": "`src/contexts/AuthContext.tsx:477` calls `POST /api/zkLogin` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/zklogin`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-77fc54f47460bdc3", "name": "Dangling fetch: POST /api/zkLogin (src/contexts/AuthContext.tsx:533)", "shortDescription": {"text": "Dangling fetch: POST /api/zkLogin (src/contexts/AuthContext.tsx:533)"}, "fullDescription": {"text": "`src/contexts/AuthContext.tsx:533` calls `POST /api/zkLogin` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/zklogin`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5b5c1e9690320cd3", "name": "Dangling fetch: GET /api/billing/status (src/lib/entitlement-gate.ts:356)", "shortDescription": {"text": "Dangling fetch: GET /api/billing/status (src/lib/entitlement-gate.ts:356)"}, "fullDescription": {"text": "`src/lib/entitlement-gate.ts:356` calls `GET /api/billing/status` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/billing/status`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-eb9ee9ad8d960fb4", "name": "Dangling fetch: POST /api/zkLogin (src/lib/cetus-service.ts:144)", "shortDescription": {"text": "Dangling fetch: POST /api/zkLogin (src/lib/cetus-service.ts:144)"}, "fullDescription": {"text": "`src/lib/cetus-service.ts:144` calls `POST /api/zkLogin` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/zklogin`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2bac3045b61a8412", "name": "Dangling fetch: POST /api/zkLogin (src/lib/swap-service.ts:170)", "shortDescription": {"text": "Dangling fetch: POST /api/zkLogin (src/lib/swap-service.ts:170)"}, "fullDescription": {"text": "`src/lib/swap-service.ts:170` calls `POST /api/zkLogin` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/zklogin`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e35d770fd4578f58", "name": "Dangling fetch: POST https://graph.facebook.com/v23.0/${phoneNumberId}/messages (src/lib/whatsapp-notifier.ts:369)", "shortDescription": {"text": "Dangling fetch: POST https://graph.facebook.com/v23.0/${phoneNumberId}/messages (src/lib/whatsapp-notifier.ts:369)"}, "fullDescription": {"text": "`src/lib/whatsapp-notifier.ts:369` calls `POST https://graph.facebook.com/v23.0/${phoneNumberId}/messages` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/graph.facebook.com/v23.0/<p>/messages`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3562b9de776cf4e1", "name": "Dangling fetch: POST /api/faucet/drip (src/pages/dashboard.tsx:2161)", "shortDescription": {"text": "Dangling fetch: POST /api/faucet/drip (src/pages/dashboard.tsx:2161)"}, "fullDescription": {"text": "`src/pages/dashboard.tsx:2161` calls `POST /api/faucet/drip` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/faucet/drip`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5fbef55eedd72bee", "name": "Dangling fetch: POST /api/zkLogin (src/pages/dashboard.tsx:2285)", "shortDescription": {"text": "Dangling fetch: POST /api/zkLogin (src/pages/dashboard.tsx:2285)"}, "fullDescription": {"text": "`src/pages/dashboard.tsx:2285` calls `POST /api/zkLogin` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/zklogin`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0b44f5528a0eac8d", "name": "Dangling fetch: GET /api/circle-stats (src/pages/index.tsx:340)", "shortDescription": {"text": "Dangling fetch: GET /api/circle-stats (src/pages/index.tsx:340)"}, "fullDescription": {"text": "`src/pages/index.tsx:340` calls `GET /api/circle-stats` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/circle-stats`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5a020d57b8ca1753", "name": "Dangling fetch: POST /api/mainnet-signup (src/pages/index.tsx:369)", "shortDescription": {"text": "Dangling fetch: POST /api/mainnet-signup (src/pages/index.tsx:369)"}, "fullDescription": {"text": "`src/pages/index.tsx:369` calls `POST /api/mainnet-signup` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/mainnet-signup`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4c1dd2458d210b47", "name": "Dangling fetch: GET /api/billing/status (src/pages/pricing.tsx:124)", "shortDescription": {"text": "Dangling fetch: GET /api/billing/status (src/pages/pricing.tsx:124)"}, "fullDescription": {"text": "`src/pages/pricing.tsx:124` calls `GET /api/billing/status` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/billing/status`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-209d5552f08e5660", "name": "Dangling fetch: POST /api/billing/checkout-session (src/pages/pricing.tsx:146)", "shortDescription": {"text": "Dangling fetch: POST /api/billing/checkout-session (src/pages/pricing.tsx:146)"}, "fullDescription": {"text": "`src/pages/pricing.tsx:146` calls `POST /api/billing/checkout-session` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/billing/checkout-session`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9733a4f11c56316c", "name": "Dangling fetch: POST /api/billing/portal-session (src/pages/pricing.tsx:176)", "shortDescription": {"text": "Dangling fetch: POST /api/billing/portal-session (src/pages/pricing.tsx:176)"}, "fullDescription": {"text": "`src/pages/pricing.tsx:176` calls `POST /api/billing/portal-session` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/billing/portal-session`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f90c33fcb55baec1", "name": "Dangling fetch: POST /api/automation/start (src/pages/_app.tsx:72)", "shortDescription": {"text": "Dangling fetch: POST /api/automation/start (src/pages/_app.tsx:72)"}, "fullDescription": {"text": "`src/pages/_app.tsx:72` calls `POST /api/automation/start` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/automation/start`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9d0eaae7dbab8e77", "name": "Dangling fetch: GET /api/automation/dashboard (src/pages/automation/dashboard.tsx:31)", "shortDescription": {"text": "Dangling fetch: GET /api/automation/dashboard (src/pages/automation/dashboard.tsx:31)"}, "fullDescription": {"text": "`src/pages/automation/dashboard.tsx:31` calls `GET /api/automation/dashboard` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/automation/dashboard`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-50863b2614f6984f", "name": "Dangling fetch: POST /api/legal/data-deletion-request (src/pages/legal/data-deletion.tsx:145)", "shortDescription": {"text": "Dangling fetch: POST /api/legal/data-deletion-request (src/pages/legal/data-deletion.tsx:145)"}, "fullDescription": {"text": "`src/pages/legal/data-deletion.tsx:145` calls `POST /api/legal/data-deletion-request` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/legal/data-deletion-request`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6e4f47372a8831b2", "name": "Dangling fetch: POST /api/whatsapp/auth/notify (src/pages/auth/callback.tsx:150)", "shortDescription": {"text": "Dangling fetch: POST /api/whatsapp/auth/notify (src/pages/auth/callback.tsx:150)"}, "fullDescription": {"text": "`src/pages/auth/callback.tsx:150` calls `POST /api/whatsapp/auth/notify` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/whatsapp/auth/notify`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-529fe051ad20c696", "name": "Dangling fetch: POST /api/whatsapp/auth/notify (src/pages/auth/callback.tsx:207)", "shortDescription": {"text": "Dangling fetch: POST /api/whatsapp/auth/notify (src/pages/auth/callback.tsx:207)"}, "fullDescription": {"text": "`src/pages/auth/callback.tsx:207` calls `POST /api/whatsapp/auth/notify` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/whatsapp/auth/notify`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f11755c946d6ed32", "name": "Dangling fetch: POST /api/whatsapp/auth/notify (src/pages/auth/whatsapp.tsx:35)", "shortDescription": {"text": "Dangling fetch: POST /api/whatsapp/auth/notify (src/pages/auth/whatsapp.tsx:35)"}, "fullDescription": {"text": "`src/pages/auth/whatsapp.tsx:35` calls `POST /api/whatsapp/auth/notify` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/whatsapp/auth/notify`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ffc42ea481b2ed00", "name": "Dangling fetch: POST /api/whatsapp/auth/notify (src/pages/auth/whatsapp.tsx:73)", "shortDescription": {"text": "Dangling fetch: POST /api/whatsapp/auth/notify (src/pages/auth/whatsapp.tsx:73)"}, "fullDescription": {"text": "`src/pages/auth/whatsapp.tsx:73` calls `POST /api/whatsapp/auth/notify` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/whatsapp/auth/notify`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f58d09958d285efd", "name": "Dangling fetch: GET /api/join-requests/pending/${id} (src/pages/circle/[id]/manage/index.tsx:1592)", "shortDescription": {"text": "Dangling fetch: GET /api/join-requests/pending/${id} (src/pages/circle/[id]/manage/index.tsx:1592)"}, "fullDescription": {"text": "`src/pages/circle/[id]/manage/index.tsx:1592` calls `GET /api/join-requests/pending/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/join-requests/pending/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1b6fc86c14e15e06", "name": "Dangling fetch: POST /api/zkLogin (src/pages/circle/[id]/manage/index.tsx:1632)", "shortDescription": {"text": "Dangling fetch: POST /api/zkLogin (src/pages/circle/[id]/manage/index.tsx:1632)"}, "fullDescription": {"text": "`src/pages/circle/[id]/manage/index.tsx:1632` calls `POST /api/zkLogin` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/zklogin`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9335b7a846c3bb24", "name": "Dangling fetch: POST /api/zkLogin (src/pages/circle/[id]/manage/index.tsx:1709)", "shortDescription": {"text": "Dangling fetch: POST /api/zkLogin (src/pages/circle/[id]/manage/index.tsx:1709)"}, "fullDescription": {"text": "`src/pages/circle/[id]/manage/index.tsx:1709` calls `POST /api/zkLogin` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/zklogin`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7bbb7f5f69f6d537", "name": "Dangling fetch: POST /api/zkLogin (src/pages/circle/[id]/manage/index.tsx:1781)", "shortDescription": {"text": "Dangling fetch: POST /api/zkLogin (src/pages/circle/[id]/manage/index.tsx:1781)"}, "fullDescription": {"text": "`src/pages/circle/[id]/manage/index.tsx:1781` calls `POST /api/zkLogin` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/zklogin`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-46c8987fc481bd90", "name": "Dangling fetch: POST /api/zkLogin (src/pages/circle/[id]/manage/index.tsx:1912)", "shortDescription": {"text": "Dangling fetch: POST /api/zkLogin (src/pages/circle/[id]/manage/index.tsx:1912)"}, "fullDescription": {"text": "`src/pages/circle/[id]/manage/index.tsx:1912` calls `POST /api/zkLogin` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/zklogin`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d19944e6093a8c31", "name": "Dangling fetch: POST /api/join-requests/${request.circle_id}/update (src/pages/circle/[id]/manage/index.tsx:2120)", "shortDescription": {"text": "Dangling fetch: POST /api/join-requests/${request.circle_id}/update (src/pages/circle/[id]/manage/index.tsx:2120)"}, "fullDescription": {"text": "`src/pages/circle/[id]/manage/index.tsx:2120` calls `POST /api/join-requests/${request.circle_id}/update` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/join-requests/<p>/update`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-37f2716dc85d7f62", "name": "Dangling fetch: POST /api/zkLogin (src/pages/circle/[id]/manage/index.tsx:2205)", "shortDescription": {"text": "Dangling fetch: POST /api/zkLogin (src/pages/circle/[id]/manage/index.tsx:2205)"}, "fullDescription": {"text": "`src/pages/circle/[id]/manage/index.tsx:2205` calls `POST /api/zkLogin` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/zklogin`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-af0feb107d1bac99", "name": "Dangling fetch: POST /api/join-requests/${request.circle_id}/update (src/pages/circle/[id]/manage/index.tsx:2246)", "shortDescription": {"text": "Dangling fetch: POST /api/join-requests/${request.circle_id}/update (src/pages/circle/[id]/manage/index.tsx:2246)"}, "fullDescription": {"text": "`src/pages/circle/[id]/manage/index.tsx:2246` calls `POST /api/join-requests/${request.circle_id}/update` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/join-requests/<p>/update`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dc9d7502792af8b8", "name": "Dangling fetch: POST /api/join-requests/${request.circle_id}/update (src/pages/circle/[id]/manage/index.tsx:2304)", "shortDescription": {"text": "Dangling fetch: POST /api/join-requests/${request.circle_id}/update (src/pages/circle/[id]/manage/index.tsx:2304)"}, "fullDescription": {"text": "`src/pages/circle/[id]/manage/index.tsx:2304` calls `POST /api/join-requests/${request.circle_id}/update` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/join-requests/<p>/update`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a607e100df695354", "name": "Dangling fetch: POST /api/join-requests/${request.circle_id}/update (src/pages/circle/[id]/manage/index.tsx:2437)", "shortDescription": {"text": "Dangling fetch: POST /api/join-requests/${request.circle_id}/update (src/pages/circle/[id]/manage/index.tsx:2437)"}, "fullDescription": {"text": "`src/pages/circle/[id]/manage/index.tsx:2437` calls `POST /api/join-requests/${request.circle_id}/update` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/join-requests/<p>/update`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1bd7191460759f25", "name": "Dangling fetch: POST /api/zkLogin (src/pages/circle/[id]/manage/index.tsx:2945)", "shortDescription": {"text": "Dangling fetch: POST /api/zkLogin (src/pages/circle/[id]/manage/index.tsx:2945)"}, "fullDescription": {"text": "`src/pages/circle/[id]/manage/index.tsx:2945` calls `POST /api/zkLogin` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/zklogin`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-89b6147941eb1951", "name": "Dangling fetch: POST /api/zkLogin (src/pages/circle/[id]/manage/index.tsx:3633)", "shortDescription": {"text": "Dangling fetch: POST /api/zkLogin (src/pages/circle/[id]/manage/index.tsx:3633)"}, "fullDescription": {"text": "`src/pages/circle/[id]/manage/index.tsx:3633` calls `POST /api/zkLogin` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/zklogin`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-903303cff1386c43", "name": "Dangling fetch: POST /api/zkLogin (src/pages/circle/[id]/manage/index.tsx:4086)", "shortDescription": {"text": "Dangling fetch: POST /api/zkLogin (src/pages/circle/[id]/manage/index.tsx:4086)"}, "fullDescription": {"text": "`src/pages/circle/[id]/manage/index.tsx:4086` calls `POST /api/zkLogin` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/zklogin`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3a65c10e4bbe1291", "name": "Dangling fetch: POST /api/zkLogin (src/pages/circle/[id]/manage/index.tsx:4967)", "shortDescription": {"text": "Dangling fetch: POST /api/zkLogin (src/pages/circle/[id]/manage/index.tsx:4967)"}, "fullDescription": {"text": "`src/pages/circle/[id]/manage/index.tsx:4967` calls `POST /api/zkLogin` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/zklogin`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-178280bceaf986f1", "name": "Dangling fetch: POST /api/zkLogin (src/pages/circle/[id]/manage/index.tsx:5069)", "shortDescription": {"text": "Dangling fetch: POST /api/zkLogin (src/pages/circle/[id]/manage/index.tsx:5069)"}, "fullDescription": {"text": "`src/pages/circle/[id]/manage/index.tsx:5069` calls `POST /api/zkLogin` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/zklogin`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7f89884864b54b7c", "name": "Dangling fetch: POST /api/zkLogin (src/pages/circle/[id]/contribute/index.tsx:2430)", "shortDescription": {"text": "Dangling fetch: POST /api/zkLogin (src/pages/circle/[id]/contribute/index.tsx:2430)"}, "fullDescription": {"text": "`src/pages/circle/[id]/contribute/index.tsx:2430` calls `POST /api/zkLogin` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/zklogin`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-96ebbb8c6baf5968", "name": "Dangling fetch: POST /api/zkLogin (src/pages/circle/[id]/contribute/index.tsx:2462)", "shortDescription": {"text": "Dangling fetch: POST /api/zkLogin (src/pages/circle/[id]/contribute/index.tsx:2462)"}, "fullDescription": {"text": "`src/pages/circle/[id]/contribute/index.tsx:2462` calls `POST /api/zkLogin` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/zklogin`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-75d55afc2fd61542", "name": "Dangling fetch: POST /api/zkLogin (src/pages/circle/[id]/contribute/index.tsx:2584)", "shortDescription": {"text": "Dangling fetch: POST /api/zkLogin (src/pages/circle/[id]/contribute/index.tsx:2584)"}, "fullDescription": {"text": "`src/pages/circle/[id]/contribute/index.tsx:2584` calls `POST /api/zkLogin` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/zklogin`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dc7fca73c3c41ccb", "name": "Dangling fetch: POST /api/zkLogin (src/pages/circle/[id]/contribute/index.tsx:3063)", "shortDescription": {"text": "Dangling fetch: POST /api/zkLogin (src/pages/circle/[id]/contribute/index.tsx:3063)"}, "fullDescription": {"text": "`src/pages/circle/[id]/contribute/index.tsx:3063` calls `POST /api/zkLogin` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/zklogin`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-613de6f40f3da6a6", "name": "Dangling fetch: GET /api/join-requests/check?circleId=${id}&userAddress=${userAddress} (src/pages/circle/[id]/join/index", "shortDescription": {"text": "Dangling fetch: GET /api/join-requests/check?circleId=${id}&userAddress=${userAddress} (src/pages/circle/[id]/join/index.tsx:480)"}, "fullDescription": {"text": "`src/pages/circle/[id]/join/index.tsx:480` calls `GET /api/join-requests/check?circleId=${id}&userAddress=${userAddress}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/join-requests/check`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-79c523cc4ed4f058", "name": "Dangling fetch: POST /api/join-requests/create (src/pages/circle/[id]/join/index.tsx:522)", "shortDescription": {"text": "Dangling fetch: POST /api/join-requests/create (src/pages/circle/[id]/join/index.tsx:522)"}, "fullDescription": {"text": "`src/pages/circle/[id]/join/index.tsx:522` calls `POST /api/join-requests/create` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/join-requests/create`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-261cccd6e12c8de5", "name": "Dangling fetch: POST https://graph.facebook.com/v23.0/${process.env.WHATSAPP_PHONE_NUMBER_ID}/messages (src/pages/api/wh", "shortDescription": {"text": "Dangling fetch: POST https://graph.facebook.com/v23.0/${process.env.WHATSAPP_PHONE_NUMBER_ID}/messages (src/pages/api/whatsapp/webhook.ts:323)"}, "fullDescription": {"text": "`src/pages/api/whatsapp/webhook.ts:323` calls `POST https://graph.facebook.com/v23.0/${process.env.WHATSAPP_PHONE_NUMBER_ID}/messages` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/graph.facebook.com/v23.0/<p>/messages`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9b71e15a8feb3745", "name": "Dangling fetch: POST https://graph.facebook.com/v23.0/${process.env.WHATSAPP_PHONE_NUMBER_ID}/messages (src/pages/api/wh", "shortDescription": {"text": "Dangling fetch: POST https://graph.facebook.com/v23.0/${process.env.WHATSAPP_PHONE_NUMBER_ID}/messages (src/pages/api/whatsapp/webhook.ts:377)"}, "fullDescription": {"text": "`src/pages/api/whatsapp/webhook.ts:377` calls `POST https://graph.facebook.com/v23.0/${process.env.WHATSAPP_PHONE_NUMBER_ID}/messages` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/graph.facebook.com/v23.0/<p>/messages`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-69989268776c3d15", "name": "Dangling fetch: POST https://graph.facebook.com/v23.0/${process.env.WHATSAPP_PHONE_NUMBER_ID}/messages (src/pages/api/wh", "shortDescription": {"text": "Dangling fetch: POST https://graph.facebook.com/v23.0/${process.env.WHATSAPP_PHONE_NUMBER_ID}/messages (src/pages/api/whatsapp/webhook.ts:420)"}, "fullDescription": {"text": "`src/pages/api/whatsapp/webhook.ts:420` calls `POST https://graph.facebook.com/v23.0/${process.env.WHATSAPP_PHONE_NUMBER_ID}/messages` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/graph.facebook.com/v23.0/<p>/messages`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3d9ba093ff90920e", "name": "Dangling fetch: POST https://graph.facebook.com/v23.0/${process.env.WHATSAPP_PHONE_NUMBER_ID}/messages (src/pages/api/wh", "shortDescription": {"text": "Dangling fetch: POST https://graph.facebook.com/v23.0/${process.env.WHATSAPP_PHONE_NUMBER_ID}/messages (src/pages/api/whatsapp/webhook.ts:460)"}, "fullDescription": {"text": "`src/pages/api/whatsapp/webhook.ts:460` calls `POST https://graph.facebook.com/v23.0/${process.env.WHATSAPP_PHONE_NUMBER_ID}/messages` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/graph.facebook.com/v23.0/<p>/messages`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-130dd7cc241a71cb", "name": "Dangling fetch: POST https://graph.facebook.com/v23.0/${process.env.WHATSAPP_PHONE_NUMBER_ID}/messages (src/pages/api/wh", "shortDescription": {"text": "Dangling fetch: POST https://graph.facebook.com/v23.0/${process.env.WHATSAPP_PHONE_NUMBER_ID}/messages (src/pages/api/whatsapp/webhook.ts:498)"}, "fullDescription": {"text": "`src/pages/api/whatsapp/webhook.ts:498` calls `POST https://graph.facebook.com/v23.0/${process.env.WHATSAPP_PHONE_NUMBER_ID}/messages` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/graph.facebook.com/v23.0/<p>/messages`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-597221d0203b6537", "name": "Dangling fetch: GET /api/compliance/queue (src/pages/admin/compliance.tsx:146)", "shortDescription": {"text": "Dangling fetch: GET /api/compliance/queue (src/pages/admin/compliance.tsx:146)"}, "fullDescription": {"text": "`src/pages/admin/compliance.tsx:146` calls `GET /api/compliance/queue` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/compliance/queue`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e9d89d01e0e5cc8a", "name": "Dangling fetch: POST /api/compliance/queue (src/pages/admin/compliance.tsx:186)", "shortDescription": {"text": "Dangling fetch: POST /api/compliance/queue (src/pages/admin/compliance.tsx:186)"}, "fullDescription": {"text": "`src/pages/admin/compliance.tsx:186` calls `POST /api/compliance/queue` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/compliance/queue`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fea16da103568fad", "name": "Dangling fetch: POST /api/admin/compliance/stale (src/pages/admin/compliance.tsx:226)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/compliance/stale (src/pages/admin/compliance.tsx:226)"}, "fullDescription": {"text": "`src/pages/admin/compliance.tsx:226` calls `POST /api/admin/compliance/stale` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/compliance/stale`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1339d26f656a9d34", "name": "Dangling fetch: GET /api/admin/notifications/recent?address=${encodeURIComponent(notificationAddress)}&limit=50 (src/pag", "shortDescription": {"text": "Dangling fetch: GET /api/admin/notifications/recent?address=${encodeURIComponent(notificationAddress)}&limit=50 (src/pages/admin/compliance.tsx:265)"}, "fullDescription": {"text": "`src/pages/admin/compliance.tsx:265` calls `GET /api/admin/notifications/recent?address=${encodeURIComponent(notificationAddress)}&limit=50` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/notifications/recent`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4e12d29988f5567d", "name": "Dangling fetch: POST /api/compliance/prepare-issuance (src/pages/admin/compliance.tsx:309)", "shortDescription": {"text": "Dangling fetch: POST /api/compliance/prepare-issuance (src/pages/admin/compliance.tsx:309)"}, "fullDescription": {"text": "`src/pages/admin/compliance.tsx:309` calls `POST /api/compliance/prepare-issuance` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/compliance/prepare-issuance`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ae33018c65618d21", "name": "Dangling fetch: POST /api/compliance/queue (src/pages/admin/compliance.tsx:360)", "shortDescription": {"text": "Dangling fetch: POST /api/compliance/queue (src/pages/admin/compliance.tsx:360)"}, "fullDescription": {"text": "`src/pages/admin/compliance.tsx:360` calls `POST /api/compliance/queue` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/compliance/queue`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b5f83e8209483371", "name": "Dangling fetch: POST /api/onramp/coinbase/session (src/hooks/useCoinbaseSession.ts:141)", "shortDescription": {"text": "Dangling fetch: POST /api/onramp/coinbase/session (src/hooks/useCoinbaseSession.ts:141)"}, "fullDescription": {"text": "`src/hooks/useCoinbaseSession.ts:141` calls `POST /api/onramp/coinbase/session` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/onramp/coinbase/session`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e8f80ccd12ffec5e", "name": "Dangling fetch: POST /api/zkLogin (src/services/zkLoginClient.ts:256)", "shortDescription": {"text": "Dangling fetch: POST /api/zkLogin (src/services/zkLoginClient.ts:256)"}, "fullDescription": {"text": "`src/services/zkLoginClient.ts:256` calls `POST /api/zkLogin` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/zklogin`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8549257c40173e17", "name": "Dangling fetch: POST /api/zkLogin (src/services/zkLoginClient.ts:287)", "shortDescription": {"text": "Dangling fetch: POST /api/zkLogin (src/services/zkLoginClient.ts:287)"}, "fullDescription": {"text": "`src/services/zkLoginClient.ts:287` calls `POST /api/zkLogin` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/zklogin`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-71fea618066d6286", "name": "Dangling fetch: POST /api/zkLogin (src/services/zkLoginClient.ts:351)", "shortDescription": {"text": "Dangling fetch: POST /api/zkLogin (src/services/zkLoginClient.ts:351)"}, "fullDescription": {"text": "`src/services/zkLoginClient.ts:351` calls `POST /api/zkLogin` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/zklogin`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2bf89de288792f8b", "name": "Dangling fetch: POST /api/zkLogin (src/services/zkLoginClient.ts:421)", "shortDescription": {"text": "Dangling fetch: POST /api/zkLogin (src/services/zkLoginClient.ts:421)"}, "fullDescription": {"text": "`src/services/zkLoginClient.ts:421` calls `POST /api/zkLogin` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/zklogin`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c60c263c1fe2b470", "name": "Dangling fetch: POST /api/zkLogin (src/services/zkLoginClient.ts:608)", "shortDescription": {"text": "Dangling fetch: POST /api/zkLogin (src/services/zkLoginClient.ts:608)"}, "fullDescription": {"text": "`src/services/zkLoginClient.ts:608` calls `POST /api/zkLogin` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/zklogin`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fea6818342369390", "name": "Dangling fetch: POST /api/zkLogin (src/services/zkLoginClient.ts:705)", "shortDescription": {"text": "Dangling fetch: POST /api/zkLogin (src/services/zkLoginClient.ts:705)"}, "fullDescription": {"text": "`src/services/zkLoginClient.ts:705` calls `POST /api/zkLogin` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/zklogin`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a5a799c456128fb4", "name": "Dangling fetch: POST /api/zkLogin (src/services/zkLoginClient.ts:788)", "shortDescription": {"text": "Dangling fetch: POST /api/zkLogin (src/services/zkLoginClient.ts:788)"}, "fullDescription": {"text": "`src/services/zkLoginClient.ts:788` calls `POST /api/zkLogin` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/zklogin`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c529afe1242ddb38", "name": "Dangling fetch: POST /api/zkLogin (src/services/zkLoginClient.ts:872)", "shortDescription": {"text": "Dangling fetch: POST /api/zkLogin (src/services/zkLoginClient.ts:872)"}, "fullDescription": {"text": "`src/services/zkLoginClient.ts:872` calls `POST /api/zkLogin` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/zklogin`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5245934aed8543bd", "name": "Dangling fetch: POST /api/zkLogin (src/services/zkLoginClient.ts:927)", "shortDescription": {"text": "Dangling fetch: POST /api/zkLogin (src/services/zkLoginClient.ts:927)"}, "fullDescription": {"text": "`src/services/zkLoginClient.ts:927` calls `POST /api/zkLogin` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/zklogin`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a0d99642549fdef9", "name": "Dangling fetch: POST /api/zkLogin (src/services/zkLoginClient.ts:982)", "shortDescription": {"text": "Dangling fetch: POST /api/zkLogin (src/services/zkLoginClient.ts:982)"}, "fullDescription": {"text": "`src/services/zkLoginClient.ts:982` calls `POST /api/zkLogin` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/zklogin`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-274a816a5e4c6a0f", "name": "Dangling fetch: POST /api/zkLogin (src/services/zkLoginClient.ts:1068)", "shortDescription": {"text": "Dangling fetch: POST /api/zkLogin (src/services/zkLoginClient.ts:1068)"}, "fullDescription": {"text": "`src/services/zkLoginClient.ts:1068` calls `POST /api/zkLogin` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/zklogin`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-223d573a0764a8d2", "name": "Dangling fetch: POST /api/zkLogin (src/services/zkLoginClient.ts:1171)", "shortDescription": {"text": "Dangling fetch: POST /api/zkLogin (src/services/zkLoginClient.ts:1171)"}, "fullDescription": {"text": "`src/services/zkLoginClient.ts:1171` calls `POST /api/zkLogin` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/zklogin`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1e0ea213ed3c29e9", "name": "Dangling fetch: POST /api/zkLogin (src/services/zkLoginClient.ts:1257)", "shortDescription": {"text": "Dangling fetch: POST /api/zkLogin (src/services/zkLoginClient.ts:1257)"}, "fullDescription": {"text": "`src/services/zkLoginClient.ts:1257` calls `POST /api/zkLogin` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/zklogin`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b7a68accf021c335", "name": "Dangling fetch: POST /api/zkLogin (src/services/zkLoginClient.ts:1330)", "shortDescription": {"text": "Dangling fetch: POST /api/zkLogin (src/services/zkLoginClient.ts:1330)"}, "fullDescription": {"text": "`src/services/zkLoginClient.ts:1330` calls `POST /api/zkLogin` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/zklogin`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1531738e4b94f44f", "name": "Dangling fetch: POST /api/zkLogin (src/services/zkLoginClient.ts:1379)", "shortDescription": {"text": "Dangling fetch: POST /api/zkLogin (src/services/zkLoginClient.ts:1379)"}, "fullDescription": {"text": "`src/services/zkLoginClient.ts:1379` calls `POST /api/zkLogin` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/zklogin`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cbfd0261e0e86795", "name": "Dangling fetch: POST /api/zkLogin (src/services/zkLoginClient.ts:1518)", "shortDescription": {"text": "Dangling fetch: POST /api/zkLogin (src/services/zkLoginClient.ts:1518)"}, "fullDescription": {"text": "`src/services/zkLoginClient.ts:1518` calls `POST /api/zkLogin` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/zklogin`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5727970a8b5d720a", "name": "Dangling fetch: GET /api/circles/swap-config?${queryParams} (src/services/swap-service.ts:74)", "shortDescription": {"text": "Dangling fetch: GET /api/circles/swap-config?${queryParams} (src/services/swap-service.ts:74)"}, "fullDescription": {"text": "`src/services/swap-service.ts:74` calls `GET /api/circles/swap-config?${queryParams}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/circles/swap-config`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-963710f42a2c8219", "name": "Unused endpoint: GET /api/status", "shortDescription": {"text": "Unused endpoint: GET /api/status"}, "fullDescription": {"text": "`whatsapp-bot-backend/src/server.ts` declares `GET /api/status` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cb2b6355b0334520", "name": "Unused endpoint: POST /api/whatsapp/send", "shortDescription": {"text": "Unused endpoint: POST /api/whatsapp/send"}, "fullDescription": {"text": "`whatsapp-bot-backend/src/server.ts` declares `POST /api/whatsapp/send` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-67d106e9cbcde3d8", "name": "Unused endpoint: POST /api/whatsapp/webhook", "shortDescription": {"text": "Unused endpoint: POST /api/whatsapp/webhook"}, "fullDescription": {"text": "`whatsapp-bot-backend/src/server.ts` declares `POST /api/whatsapp/webhook` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5ae213cae59f019c", "name": "Unused endpoint: GET /api/whatsapp/webhook", "shortDescription": {"text": "Unused endpoint: GET /api/whatsapp/webhook"}, "fullDescription": {"text": "`whatsapp-bot-backend/src/server.ts` declares `GET /api/whatsapp/webhook` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-94aca8267d17d1ca", "name": "Unused endpoint: GET /api/whatsapp/integration", "shortDescription": {"text": "Unused endpoint: GET /api/whatsapp/integration"}, "fullDescription": {"text": "`whatsapp-bot-backend/src/server.ts` declares `GET /api/whatsapp/integration` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-85d5d4bfe9cd08fa", "name": "Unused endpoint: GET /api/whatsapp/analytics", "shortDescription": {"text": "Unused endpoint: GET /api/whatsapp/analytics"}, "fullDescription": {"text": "`whatsapp-bot-backend/src/server.ts` declares `GET /api/whatsapp/analytics` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-81b3255bdd650565", "name": "Unused endpoint: GET /api/whatsapp/queue", "shortDescription": {"text": "Unused endpoint: GET /api/whatsapp/queue"}, "fullDescription": {"text": "`whatsapp-bot-backend/src/server.ts` declares `GET /api/whatsapp/queue` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5baa8971ebe192a1", "name": "Unused endpoint: GET /", "shortDescription": {"text": "Unused endpoint: GET /"}, "fullDescription": {"text": "`whatsapp-bot-backend/src/services/whatsapp-sender.service.ts` declares `GET /` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5206f80cf3161a38", "name": "Unused endpoint: POST /get-salt", "shortDescription": {"text": "Unused endpoint: POST /get-salt"}, "fullDescription": {"text": "`src/services/persistent-salt-service.ts` declares `POST /get-salt` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-171755190100cf42", "name": "Unused endpoint: POST /recover-salt", "shortDescription": {"text": "Unused endpoint: POST /recover-salt"}, "fullDescription": {"text": "`src/services/persistent-salt-service.ts` declares `POST /recover-salt` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-03c2e5a604548959", "name": "Unused endpoint: POST /generate-recovery-code", "shortDescription": {"text": "Unused endpoint: POST /generate-recovery-code"}, "fullDescription": {"text": "`src/services/persistent-salt-service.ts` declares `POST /generate-recovery-code` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/18984"}, "properties": {"repository": "satemafac/njangi-on-chain", "repoUrl": "https://github.com/satemafac/njangi-on-chain", "branch": "main"}, "results": [{"ruleId": "scanner-6e4f7e6432242daf", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test-cetus-pools.js:6"}, "properties": {"repobilityId": "e3911f8e89329ee3", "scanner": "scanner-primary", "fingerprint": "6e4f7e6432242daf", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-038a4bdbf4aeef4d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 index.ts:9"}, "properties": {"repobilityId": "5b47c927424b7f3a", "scanner": "scanner-primary", "fingerprint": "038a4bdbf4aeef4d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5c511fd96a95fe31", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 whatsapp-bot-backend/src/config/config.ts:6"}, "properties": {"repobilityId": "15d9045418e45863", "scanner": "scanner-primary", "fingerprint": "5c511fd96a95fe31", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-31286428a9b481c0", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 whatsapp-bot-backend/src/pages/api/whatsapp/webhook.ts:98"}, "properties": {"repobilityId": "cb3716be2b1f1adf", "scanner": "scanner-primary", "fingerprint": "31286428a9b481c0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-e0362724b023b082", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 whatsapp-bot-backend/src/services/whatsapp-sender.service.ts:162"}, "properties": {"repobilityId": "5fbc328c7354c48e", "scanner": "scanner-primary", "fingerprint": "e0362724b023b082", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-428c24b4aadac9d0", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 whatsapp-bot-backend/src/services/circle-link-listener.service.ts:3032"}, "properties": {"repobilityId": "1ec6fef5c7bc7944", "scanner": "scanner-primary", "fingerprint": "428c24b4aadac9d0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-8e612accb7d71d06", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 whatsapp-bot-backend/src/services/message-queue.service.ts:442"}, "properties": {"repobilityId": "f6741efb12e1f87d", "scanner": "scanner-primary", "fingerprint": "8e612accb7d71d06", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-58f2c02eb8c6e856", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 whatsapp-bot-backend/src/services/webhook-handler.service.ts:222"}, "properties": {"repobilityId": "d9e3f98aa378ae9b", "scanner": "scanner-primary", "fingerprint": "58f2c02eb8c6e856", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-ccdc43e76f6f4d1a", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 whatsapp-bot-backend/src/services/analytics.service.ts:452"}, "properties": {"repobilityId": "719e09ac2de1894d", "scanner": "scanner-primary", "fingerprint": "ccdc43e76f6f4d1a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-738b77fdf20f0eb4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-postgres.js:45"}, "properties": {"repobilityId": "9dd75242ce01d1bf", "scanner": "scanner-primary", "fingerprint": "738b77fdf20f0eb4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6ba7b784b802e609", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/utils/logger.ts:7"}, "properties": {"repobilityId": "cf9d3af0db9250f9", "scanner": "scanner-primary", "fingerprint": "6ba7b784b802e609", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-432b5e53066ad9d2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/ActivityDetector.tsx:22"}, "properties": {"repobilityId": "84d4634af9d6427a", "scanner": "scanner-primary", "fingerprint": "432b5e53066ad9d2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-436cf8029f2eb95f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/SimplifiedSwapUI.tsx:1964"}, "properties": {"repobilityId": "af08870636560e2b", "scanner": "scanner-primary", "fingerprint": "436cf8029f2eb95f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9007f62ba31f793f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/SimplifiedSwapUI.tsx:65"}, "properties": {"repobilityId": "c477e4db6ecd6ec4", "scanner": "scanner-primary", "fingerprint": "9007f62ba31f793f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3b8aa77c6b90febc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/LoginButton.tsx:74"}, "properties": {"repobilityId": "f0011a0f20216a30", "scanner": "scanner-primary", "fingerprint": "3b8aa77c6b90febc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b16f51d88fee302f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/InAppBrowserModal.tsx:184"}, "properties": {"repobilityId": "aab495c42e40012f", "scanner": "scanner-primary", "fingerprint": "b16f51d88fee302f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-13c04aeb6b0369ea", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/WhatsAppCircleIntegration.tsx:235"}, "properties": {"repobilityId": "c8e9ae6552dc7bb0", "scanner": "scanner-primary", "fingerprint": "13c04aeb6b0369ea", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c660b1c092672d48", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/IdleWarningModal.tsx:72"}, "properties": {"repobilityId": "cfb3722cf28245bb", "scanner": "scanner-primary", "fingerprint": "c660b1c092672d48", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-faf869c33fd743ae", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/LegalAcceptanceModal.tsx:316"}, "properties": {"repobilityId": "526242d1404a6424", "scanner": "scanner-primary", "fingerprint": "faf869c33fd743ae", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-35b7e1f9b98fb484", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/ui/Navbar.tsx:332"}, "properties": {"repobilityId": "0bdf8b0ae5c802aa", "scanner": "scanner-primary", "fingerprint": "35b7e1f9b98fb484", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4a8707adc195f9ad", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/ui/Navbar.tsx:49"}, "properties": {"repobilityId": "fc4fdbc268e25531", "scanner": "scanner-primary", "fingerprint": "4a8707adc195f9ad", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bbcb62e6b61851af", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/contexts/AuthContext.tsx:129"}, "properties": {"repobilityId": "b0560e613f912695", "scanner": "scanner-primary", "fingerprint": "bbcb62e6b61851af", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-489df448e67a87e0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/whatsapp-registry-init.ts:21"}, "properties": {"repobilityId": "7a71d5ad11359676", "scanner": "scanner-primary", "fingerprint": "489df448e67a87e0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b84da7953e181130", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/dashboard.tsx:5928"}, "properties": {"repobilityId": "372b8d1a420b48ea", "scanner": "scanner-primary", "fingerprint": "b84da7953e181130", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a195430912d8de1f", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/pages/dashboard.tsx:3319"}, "properties": {"repobilityId": "2b963771cc0c6f0f", "scanner": "scanner-primary", "fingerprint": "a195430912d8de1f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-5f91f43b70571035", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/dashboard.tsx:103"}, "properties": {"repobilityId": "1a8707d79a1ee5c7", "scanner": "scanner-primary", "fingerprint": "5f91f43b70571035", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4f975ebf5511ebcd", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/create-circle.tsx:2371"}, "properties": {"repobilityId": "0fdca80f8a8a2a48", "scanner": "scanner-primary", "fingerprint": "4f975ebf5511ebcd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-13dbc6c506963367", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/create-circle.tsx:646"}, "properties": {"repobilityId": "4a27164b119a8cf3", "scanner": "scanner-primary", "fingerprint": "13dbc6c506963367", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cca8afca1c65244f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/callback.tsx:46"}, "properties": {"repobilityId": "f180b015b55563ba", "scanner": "scanner-primary", "fingerprint": "cca8afca1c65244f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0462c5674545284b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/index.tsx:788"}, "properties": {"repobilityId": "e908f2b9d759328f", "scanner": "scanner-primary", "fingerprint": "0462c5674545284b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a17fd0a3b05b6aba", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/index.tsx:415"}, "properties": {"repobilityId": "aac9e2c38d5da794", "scanner": "scanner-primary", "fingerprint": "a17fd0a3b05b6aba", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1326dfd6d9dcae77", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/pages/index.tsx:573"}, "properties": {"repobilityId": "73acbcf1512cd40c", "scanner": "scanner-primary", "fingerprint": "1326dfd6d9dcae77", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-802d2933a00d8b04", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/_app.tsx:64"}, "properties": {"repobilityId": "68425506ed7c8fc1", "scanner": "scanner-primary", "fingerprint": "802d2933a00d8b04", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-96f8ec703e2f2a39", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/pages/legal/[doc].tsx:140"}, "properties": {"repobilityId": "b1cede605a87cf03", "scanner": "scanner-primary", "fingerprint": "96f8ec703e2f2a39", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-05a98633024f5c48", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/auth/callback.tsx:50"}, "properties": {"repobilityId": "15068c114ae58612", "scanner": "scanner-primary", "fingerprint": "05a98633024f5c48", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-adf3536ca4891915", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/auth/whatsapp.tsx:50"}, "properties": {"repobilityId": "bbbef6feabb93119", "scanner": "scanner-primary", "fingerprint": "adf3536ca4891915", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-70eaef462d3da6b9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/circle/[id]/index.tsx:187"}, "properties": {"repobilityId": "83525b43d1105bc9", "scanner": "scanner-primary", "fingerprint": "70eaef462d3da6b9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8fd24deed8613265", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/circle/[id]/manage/index.tsx:7170"}, "properties": {"repobilityId": "8d412dc23bb5c825", "scanner": "scanner-primary", "fingerprint": "8fd24deed8613265", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-66f4311dfcc1753b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/circle/[id]/manage/index.tsx:107"}, "properties": {"repobilityId": "e67e8095b1215667", "scanner": "scanner-primary", "fingerprint": "66f4311dfcc1753b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a30223f0ba57bc5e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/circle/[id]/contribute/index.tsx:4149"}, "properties": {"repobilityId": "b1d33ad401498c95", "scanner": "scanner-primary", "fingerprint": "a30223f0ba57bc5e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b75dba81148e8384", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/circle/[id]/contribute/index.tsx:572"}, "properties": {"repobilityId": "2e42b8ef6ece57ea", "scanner": "scanner-primary", "fingerprint": "b75dba81148e8384", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-94efb26622763ce1", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/pages/circle/[id]/contribute/index.tsx:3798"}, "properties": {"repobilityId": "81abe29ff0525759", "scanner": "scanner-primary", "fingerprint": "94efb26622763ce1", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-11822be0442ae752", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/circle/[id]/join/index.tsx:106"}, "properties": {"repobilityId": "0283d1e3f516e789", "scanner": "scanner-primary", "fingerprint": "11822be0442ae752", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a94169ab41a4b548", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/api/zkLogin.ts:119"}, "properties": {"repobilityId": "40fb83cbcaa9ba1f", "scanner": "scanner-primary", "fingerprint": "a94169ab41a4b548", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8c7f6cb6a08ae7cd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/api/circle-stats.ts:110"}, "properties": {"repobilityId": "01a599fb85f872c0", "scanner": "scanner-primary", "fingerprint": "8c7f6cb6a08ae7cd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c0183d0cb842e9d2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/api/cetus-apr.ts:38"}, "properties": {"repobilityId": "cb29c72f15aa5718", "scanner": "scanner-primary", "fingerprint": "c0183d0cb842e9d2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5ecde54bd8b662e2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/api/mainnet-signup.ts:108"}, "properties": {"repobilityId": "50ace240a19619f6", "scanner": "scanner-primary", "fingerprint": "5ecde54bd8b662e2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bc52e7427a1dc9eb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/api/legal/data-deletion-request.ts:116"}, "properties": {"repobilityId": "610313b648800d4c", "scanner": "scanner-primary", "fingerprint": "bc52e7427a1dc9eb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cb0b8e5df2b8bf1d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/api/auth/callback.ts:6"}, "properties": {"repobilityId": "32bf170a4c7cbc39", "scanner": "scanner-primary", "fingerprint": "cb0b8e5df2b8bf1d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-aaa2096649e909eb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/api/join-requests/[circleId].ts:37"}, "properties": {"repobilityId": "25fead35f1518927", "scanner": "scanner-primary", "fingerprint": "aaa2096649e909eb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0311789af474a59a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/api/join-requests/check.ts:39"}, "properties": {"repobilityId": "821169ca52245d9f", "scanner": "scanner-primary", "fingerprint": "0311789af474a59a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b05f2f930269e4c0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/api/join-requests/lookup-user.ts:36"}, "properties": {"repobilityId": "3c9ac3a8464c6b7c", "scanner": "scanner-primary", "fingerprint": "b05f2f930269e4c0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c72d9a2a95ae6720", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/api/join-requests/create.ts:106"}, "properties": {"repobilityId": "5414afbff337e3d7", "scanner": "scanner-primary", "fingerprint": "c72d9a2a95ae6720", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-79549364bcf4d4d6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/api/join-requests/[circleId]/update.ts:51"}, "properties": {"repobilityId": "80b2fa8fa0aca6e5", "scanner": "scanner-primary", "fingerprint": "79549364bcf4d4d6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d1bb1c693a64b21a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/api/join-requests/user/[userAddress].ts:37"}, "properties": {"repobilityId": "0088077cb934d2c8", "scanner": "scanner-primary", "fingerprint": "d1bb1c693a64b21a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4a7c6196bf883e64", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/api/join-requests/pending/[circleId].ts:35"}, "properties": {"repobilityId": "90658fa67a707f49", "scanner": "scanner-primary", "fingerprint": "4a7c6196bf883e64", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a5d1d4f3ae83f58c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/api/whatsapp/admin-unlink-circle.ts:67"}, "properties": {"repobilityId": "0b4ff95790f8b341", "scanner": "scanner-primary", "fingerprint": "a5d1d4f3ae83f58c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-848e77517b638fff", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/api/whatsapp/admin-link-circle.ts:310"}, "properties": {"repobilityId": "37f149caefa7f3da", "scanner": "scanner-primary", "fingerprint": "848e77517b638fff", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-acc664cbbb82f8fb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/admin/compliance.tsx:471"}, "properties": {"repobilityId": "6c91fdf07270b91f", "scanner": "scanner-primary", "fingerprint": "acc664cbbb82f8fb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-50d3c7441a3d2b9f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/services/join-request-service.ts:44"}, "properties": {"repobilityId": "18fb11432917df13", "scanner": "scanner-primary", "fingerprint": "50d3c7441a3d2b9f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a1ec71565a960eda", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/services/circle-service.ts:280"}, "properties": {"repobilityId": "61623f0e2be886e4", "scanner": "scanner-primary", "fingerprint": "a1ec71565a960eda", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e6af92df489c3cae", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/services/zkLoginClient.ts:254"}, "properties": {"repobilityId": "55c932d486b44ebd", "scanner": "scanner-primary", "fingerprint": "e6af92df489c3cae", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e79d39ba2bf06e74", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/services/postgres-adapter.ts:81"}, "properties": {"repobilityId": "fac5b65baeda43c4", "scanner": "scanner-primary", "fingerprint": "e79d39ba2bf06e74", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-08c907977322a712", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/services/join-request-database.ts:31"}, "properties": {"repobilityId": "01d848540dcf0335", "scanner": "scanner-primary", "fingerprint": "08c907977322a712", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-83077f4dcaefa1f8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/services/cetus-service.ts:217"}, "properties": {"repobilityId": "0b178520735219b9", "scanner": "scanner-primary", "fingerprint": "83077f4dcaefa1f8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7eef096d1c20ce5c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/services/cetus-errors.ts:431"}, "properties": {"repobilityId": "dd0d637ba38514e8", "scanner": "scanner-primary", "fingerprint": "7eef096d1c20ce5c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a001642501d97e14", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/services/whatsapp-registry-service.ts:87"}, "properties": {"repobilityId": "a616a6009de70bb6", "scanner": "scanner-primary", "fingerprint": "a001642501d97e14", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2cc2bab0b1ee4a8a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/services/network-config.ts:176"}, "properties": {"repobilityId": "1cb19f09a719437a", "scanner": "scanner-primary", "fingerprint": "2cc2bab0b1ee4a8a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-baebcd4383d3d8de", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/services/price-service.ts:132"}, "properties": {"repobilityId": "7bee0dc9a2c2e923", "scanner": "scanner-primary", "fingerprint": "baebcd4383d3d8de", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bda777d0cb892660", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/services/swap-service.ts:160"}, "properties": {"repobilityId": "5f1cd37628760872", "scanner": "scanner-primary", "fingerprint": "bda777d0cb892660", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a91c7a5da8227cc5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/services/mainnet-signup-database.ts:34"}, "properties": {"repobilityId": "a3e63aab2a7b764e", "scanner": "scanner-primary", "fingerprint": "a91c7a5da8227cc5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-468b50be2cf39d43", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/services/circle-status.service.ts:52"}, "properties": {"repobilityId": "79f1920f3f952e67", "scanner": "scanner-primary", "fingerprint": "468b50be2cf39d43", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-abea2e5cd41e2aab", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/services/persistent-salt-service.ts:133"}, "properties": {"repobilityId": "fb61956fb285c46d", "scanner": "scanner-primary", "fingerprint": "abea2e5cd41e2aab", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cb05753f41450ca6", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/services/circle-member-manager.service.ts:242"}, "properties": {"repobilityId": "34391f79bc2ef479", "scanner": "scanner-primary", "fingerprint": "cb05753f41450ca6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-7e6e76b1778fd8e6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/services/enokiZkLoginService.ts:51"}, "properties": {"repobilityId": "7c1106ec6d37e11e", "scanner": "scanner-primary", "fingerprint": "7e6e76b1778fd8e6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a69c2bf56dc2d96c", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:18-alpine3.19"}, "properties": {"repobilityId": "f7f550ccb4acf651", "scanner": "scanner-primary", "fingerprint": "a69c2bf56dc2d96c", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Dockerfile"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-19969849fa62c5e7", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:18-alpine3.19"}, "properties": {"repobilityId": "8470ba5c2cafa9ed", "scanner": "scanner-primary", "fingerprint": "19969849fa62c5e7", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "whatsapp-bot-backend/Dockerfile"}, "region": {"startLine": 4}}}]}, {"ruleId": "scanner-19969849fa62c5e7", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:18-alpine3.19"}, "properties": {"repobilityId": "009fc63798a847d9", "scanner": "scanner-primary", "fingerprint": "19969849fa62c5e7", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "whatsapp-bot-backend/Dockerfile"}, "region": {"startLine": 29}}}]}, {"ruleId": "scanner-aa5acaa49eb8315b", "level": "note", "message": {"text": "Containers defined but no K8s/orchestration manifest found"}, "properties": {"repobilityId": "b230ea9b68736081", "scanner": "scanner-primary", "fingerprint": "aa5acaa49eb8315b", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["coverage", "deployment"]}}, {"ruleId": "scanner-6314cb8374b1fd6e", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in index.ts:14"}, "properties": {"repobilityId": "3eca7970bc825721", "scanner": "scanner-primary", "fingerprint": "6314cb8374b1fd6e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "index.ts"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-69c9a6b555d66b03", "level": "warning", "message": {"text": "Insecure pattern 'weak_hash' in next.config.js:115"}, "properties": {"repobilityId": "40d9fabfc9ff3527", "scanner": "scanner-primary", "fingerprint": "69c9a6b555d66b03", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "weak_hash"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "next.config.js"}, "region": {"startLine": 115}}}]}, {"ruleId": "scanner-4067b6b07c807365", "level": "error", "message": {"text": "Insecure pattern 'exec_used' in scripts/bootstrap-package.mjs:124"}, "properties": {"repobilityId": "35287b550889876a", "scanner": "scanner-primary", "fingerprint": "4067b6b07c807365", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "exec_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/bootstrap-package.mjs"}, "region": {"startLine": 124}}}]}, {"ruleId": "scanner-281b62caefade5c1", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/bootstrap-package.mjs:30"}, "properties": {"repobilityId": "07831ad11d948b3e", "scanner": "scanner-primary", "fingerprint": "281b62caefade5c1", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/bootstrap-package.mjs"}, "region": {"startLine": 30}}}]}, {"ruleId": "scanner-8a28c63435b7b265", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/LegalAcceptanceModal.tsx:316"}, "properties": {"repobilityId": "7df7e4a1167befbb", "scanner": "scanner-primary", "fingerprint": "8a28c63435b7b265", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/LegalAcceptanceModal.tsx"}, "region": {"startLine": 316}}}]}, {"ruleId": "scanner-af3f4edaf9ee2018", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in src/contexts/AuthContext.tsx:222"}, "properties": {"repobilityId": "9887c0a5ad82f295", "scanner": "scanner-primary", "fingerprint": "af3f4edaf9ee2018", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/contexts/AuthContext.tsx"}, "region": {"startLine": 222}}}]}, {"ruleId": "scanner-392d7ee2ac038763", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/pages/index.tsx:573"}, "properties": {"repobilityId": "78dacad9ec3395c8", "scanner": "scanner-primary", "fingerprint": "392d7ee2ac038763", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/pages/index.tsx"}, "region": {"startLine": 573}}}]}, {"ruleId": "scanner-0af1e2baa9cabdd7", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/pages/legal/[doc].tsx:140"}, "properties": {"repobilityId": "ece0a26b97d11250", "scanner": "scanner-primary", "fingerprint": "0af1e2baa9cabdd7", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/pages/legal/[doc].tsx"}, "region": {"startLine": 140}}}]}, {"ruleId": "scanner-b913e72cfd4aac45", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/pages/circle/[id]/contribute/index.tsx:3798"}, "properties": {"repobilityId": "c7327362b2ceaf8e", "scanner": "scanner-primary", "fingerprint": "b913e72cfd4aac45", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/pages/circle/[id]/contribute/index.tsx"}, "region": {"startLine": 3798}}}]}, {"ruleId": "scanner-a3461c497417701f", "level": "error", "message": {"text": "Insecure pattern 'exec_used' in src/services/postgres-adapter.ts:168"}, "properties": {"repobilityId": "5acbe98ee6d5cf60", "scanner": "scanner-primary", "fingerprint": "a3461c497417701f", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "exec_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/services/postgres-adapter.ts"}, "region": {"startLine": 168}}}]}, {"ruleId": "scanner-1ea3c8dc7a541849", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in src/services/persistent-salt-service.ts:107"}, "properties": {"repobilityId": "cb0dad440e3cc80e", "scanner": "scanner-primary", "fingerprint": "1ea3c8dc7a541849", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/services/persistent-salt-service.ts"}, "region": {"startLine": 107}}}]}, {"ruleId": "scanner-f610807a4016d5fc", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "0c0476ddf88d1a1f", "scanner": "scanner-primary", "fingerprint": "f610807a4016d5fc", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/preflight.yml"}, "region": {"startLine": 17}}}]}, {"ruleId": "scanner-f610807a4016d5fc", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ac2536ee0332f4a9", "scanner": "scanner-primary", "fingerprint": "f610807a4016d5fc", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/preflight.yml"}, "region": {"startLine": 20}}}]}, {"ruleId": "scanner-f610807a4016d5fc", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "b6907c55c86a099d", "scanner": "scanner-primary", "fingerprint": "f610807a4016d5fc", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/preflight.yml"}, "region": {"startLine": 27}}}]}, {"ruleId": "scanner-680f581490b32ca0", "level": "note", "message": {"text": "Very large file: whatsapp-bot-backend/src/services/circle-link-listener.service.ts (3094 lines)"}, "properties": {"repobilityId": "8e815a833017a996", "scanner": "scanner-primary", "fingerprint": "680f581490b32ca0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e336962d1d680248", "level": "note", "message": {"text": "Very large file: src/components/SimplifiedSwapUI.tsx (2003 lines)"}, "properties": {"repobilityId": "39154b816f5bfe4c", "scanner": "scanner-primary", "fingerprint": "e336962d1d680248", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-da5b10f57e4c64b8", "level": "note", "message": {"text": "Very large file: src/lib/i18n.ts (993 lines)"}, "properties": {"repobilityId": "1390b2f0160e71ff", "scanner": "scanner-primary", "fingerprint": "da5b10f57e4c64b8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-4437ed1956263bc6", "level": "note", "message": {"text": "Very large file: src/pages/dashboard.tsx (8730 lines)"}, "properties": {"repobilityId": "520ec306f08f75ff", "scanner": "scanner-primary", "fingerprint": "4437ed1956263bc6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-856e4b04f9656d83", "level": "note", "message": {"text": "Very large file: src/pages/create-circle.tsx (2715 lines)"}, "properties": {"repobilityId": "4d1288af5a78cc79", "scanner": "scanner-primary", "fingerprint": "856e4b04f9656d83", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-270bbde51d60dcbe", "level": "note", "message": {"text": "Very large file: src/pages/index.tsx (1378 lines)"}, "properties": {"repobilityId": "57d12fab49020244", "scanner": "scanner-primary", "fingerprint": "270bbde51d60dcbe", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f2a567451d83657c", "level": "note", "message": {"text": "Very large file: src/pages/circle/[id]/index.tsx (1973 lines)"}, "properties": {"repobilityId": "4264a7938f0e2fe3", "scanner": "scanner-primary", "fingerprint": "f2a567451d83657c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-15916b659a512bb3", "level": "note", "message": {"text": "Very large file: src/pages/circle/[id]/manage/index.tsx (8366 lines)"}, "properties": {"repobilityId": "46c7df5853b60ca1", "scanner": "scanner-primary", "fingerprint": "15916b659a512bb3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-5bacf050e3add115", "level": "note", "message": {"text": "Very large file: src/pages/circle/[id]/contribute/index.tsx (4462 lines)"}, "properties": {"repobilityId": "daa8c64433ddadab", "scanner": "scanner-primary", "fingerprint": "5bacf050e3add115", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-7c20f084e66e41b0", "level": "note", "message": {"text": "Very large file: src/pages/circle/[id]/join/index.tsx (1291 lines)"}, "properties": {"repobilityId": "4fbbb3c1fd16631f", "scanner": "scanner-primary", "fingerprint": "7c20f084e66e41b0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-66f2a0f78dc7d70b", "level": "note", "message": {"text": "Very large file: src/pages/api/zkLogin.ts (6435 lines)"}, "properties": {"repobilityId": "19471281fe1c0d00", "scanner": "scanner-primary", "fingerprint": "66f2a0f78dc7d70b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e34ec050169fc72e", "level": "note", "message": {"text": "Very large file: src/services/zkLoginClient.ts (1536 lines)"}, "properties": {"repobilityId": "095c923b7f1db6fc", "scanner": "scanner-primary", "fingerprint": "e34ec050169fc72e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "15830bbc0ebe377f", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ed31d6be92b7b9b3", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: whatsapp-bot-backend/package.json"}, "properties": {"repobilityId": "c58426bf783f6e39", "scanner": "scanner-primary", "fingerprint": "ed31d6be92b7b9b3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "whatsapp-bot-backend/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "69a770721b31103d", "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": "9ff45888a4683f1a", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "26d74543572f8289", "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": "49ad5725b508021d", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "5a552a8da3fc8349", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "882378bc6c2a41ec", "scanner": "scanner-primary", "fingerprint": "ea8f3013f588db25", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-8424db9c75e04ba4", "level": "none", "message": {"text": "Very short observed git history"}, "properties": {"repobilityId": "ab31f71d2684382e", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-70e073791d475a98", "level": "none", "message": {"text": "Commented-code block (11 lines) in next.config.js:7"}, "properties": {"repobilityId": "e18d46c41ac88961", "scanner": "scanner-primary", "fingerprint": "70e073791d475a98", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e2b7e9b5a8856d14", "level": "note", "message": {"text": "Legacy-named symbol `canonicalOrLegacy` in whatsapp-bot-backend/src/config/env.ts:44"}, "properties": {"repobilityId": "5852f2f57f34d5a1", "scanner": "scanner-primary", "fingerprint": "e2b7e9b5a8856d14", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-09f2d18b2fa21f43", "level": "note", "message": {"text": "Legacy-named symbol `daysOld` in whatsapp-bot-backend/src/pages/api/whatsapp/webhook-handler.ts:297"}, "properties": {"repobilityId": "f5a93ffef9d39833", "scanner": "scanner-primary", "fingerprint": "09f2d18b2fa21f43", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-de759f6bc8cdeb71", "level": "none", "message": {"text": "Commented-code block (7 lines) in whatsapp-bot-backend/src/pages/api/whatsapp/webhook.ts:196"}, "properties": {"repobilityId": "08e927fffbde9660", "scanner": "scanner-primary", "fingerprint": "de759f6bc8cdeb71", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9743c0bd8c0332ec", "level": "none", "message": {"text": "Commented-code block (6 lines) in whatsapp-bot-backend/src/services/cycle-reminder.service.ts:6"}, "properties": {"repobilityId": "d5221341524682f3", "scanner": "scanner-primary", "fingerprint": "9743c0bd8c0332ec", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-992dc49c46997ca0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 whatsapp-bot-backend/src/services/cycle-reminder.service.ts:864"}, "properties": {"repobilityId": "3678a349ef280bbd", "scanner": "scanner-primary", "fingerprint": "992dc49c46997ca0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-38e511b7ec5df779", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/smoke-testnet.mjs:2"}, "properties": {"repobilityId": "3a21f2fa02172685", "scanner": "scanner-primary", "fingerprint": "38e511b7ec5df779", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fc12fe57dc6ffaad", "level": "none", "message": {"text": "Commented-code block (7 lines) in scripts/cycle-finalized-notifier.mjs:4"}, "properties": {"repobilityId": "5da4603058d720ef", "scanner": "scanner-primary", "fingerprint": "fc12fe57dc6ffaad", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f2139a72f2132c47", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/cycle-finalized-notifier.mjs:202"}, "properties": {"repobilityId": "fe4143afa44f7bfb", "scanner": "scanner-primary", "fingerprint": "f2139a72f2132c47", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-147eee3c7948f025", "level": "none", "message": {"text": "Commented-code block (14 lines) in scripts/migrate-postgres.mjs:6"}, "properties": {"repobilityId": "71b3612e77c2a823", "scanner": "scanner-primary", "fingerprint": "147eee3c7948f025", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fbcd239cc325ec65", "level": "none", "message": {"text": "Commented-code block (10 lines) in scripts/bootstrap-package.mjs:7"}, "properties": {"repobilityId": "5f6324793618311b", "scanner": "scanner-primary", "fingerprint": "fbcd239cc325ec65", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bc1bf5018bb42573", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/bootstrap-package.mjs:151"}, "properties": {"repobilityId": "364b5ab3781552f6", "scanner": "scanner-primary", "fingerprint": "bc1bf5018bb42573", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-14b224539bdb5429", "level": "none", "message": {"text": "Commented-code block (21 lines) in scripts/generate-secrets.mjs:6"}, "properties": {"repobilityId": "bb38123380d2b603", "scanner": "scanner-primary", "fingerprint": "14b224539bdb5429", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5c2d3eb1388cb350", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/stripe-bootstrap.mjs:6"}, "properties": {"repobilityId": "90eb70cd9166e39f", "scanner": "scanner-primary", "fingerprint": "5c2d3eb1388cb350", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-848258978c3aeae5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/stripe-bootstrap.mjs:123"}, "properties": {"repobilityId": "135ac88664b070c0", "scanner": "scanner-primary", "fingerprint": "848258978c3aeae5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-acd42bed3803a089", "level": "note", "message": {"text": "Legacy-named symbol `canonicalOrLegacy` in scripts/validate-env.mjs:37"}, "properties": {"repobilityId": "ae2b8608fb9769ac", "scanner": "scanner-primary", "fingerprint": "acd42bed3803a089", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-0739255aeae7dacf", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/validate-env.mjs:102"}, "properties": {"repobilityId": "ef3153f1a7bb8f57", "scanner": "scanner-primary", "fingerprint": "0739255aeae7dacf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a2b235ebff5ae7c6", "level": "note", "message": {"text": "Legacy-named symbol `canonicalOrLegacy` in src/config/public-env.ts:113"}, "properties": {"repobilityId": "6497b2042ba29d6e", "scanner": "scanner-primary", "fingerprint": "a2b235ebff5ae7c6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-639046a30a465e80", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/config/public-env.ts:21"}, "properties": {"repobilityId": "4146b1bace30ea17", "scanner": "scanner-primary", "fingerprint": "639046a30a465e80", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b57a041757637e5b", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/middleware/admin-auth.middleware.ts:100"}, "properties": {"repobilityId": "2dad1b194e1c06d9", "scanner": "scanner-primary", "fingerprint": "b57a041757637e5b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f37d7005c67dbb74", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/CycleEscrowPanel.tsx:317"}, "properties": {"repobilityId": "49e6e5a870c4b438", "scanner": "scanner-primary", "fingerprint": "f37d7005c67dbb74", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b3f3239180e3122e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/StablecoinSwapForm.tsx:110"}, "properties": {"repobilityId": "d33f824719e0cd92", "scanner": "scanner-primary", "fingerprint": "b3f3239180e3122e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-63b64f98857df03b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/SimplifiedSwapUI.tsx:652"}, "properties": {"repobilityId": "2e586bceb7092e26", "scanner": "scanner-primary", "fingerprint": "63b64f98857df03b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6e8e0f12113ee69d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/WhatsAppCircleIntegration.tsx:137"}, "properties": {"repobilityId": "6656dceb66e36b34", "scanner": "scanner-primary", "fingerprint": "6e8e0f12113ee69d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f35ca47c665eaa70", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/components/LegalAcceptanceModal.tsx:4"}, "properties": {"repobilityId": "f39b3c2c4911f4ac", "scanner": "scanner-primary", "fingerprint": "f35ca47c665eaa70", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b675476257e1476c", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/milestones/milestone-plan.ts:11"}, "properties": {"repobilityId": "5599ae2f5a210881", "scanner": "scanner-primary", "fingerprint": "b675476257e1476c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-db6da335bb557aa7", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/components/milestones/MilestonePlanEditor.tsx:1"}, "properties": {"repobilityId": "5207889f66c42a73", "scanner": "scanner-primary", "fingerprint": "db6da335bb557aa7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-336591768a84572b", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/components/milestones/MilestoneTimeline.tsx:1"}, "properties": {"repobilityId": "6c6dd27129a21fc9", "scanner": "scanner-primary", "fingerprint": "336591768a84572b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9780c020afd8fc9b", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/milestones/GoalCelebration.tsx:1"}, "properties": {"repobilityId": "98319161b4251da6", "scanner": "scanner-primary", "fingerprint": "9780c020afd8fc9b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-780278ca414304b7", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/milestones/MilestoneCreator.tsx:1"}, "properties": {"repobilityId": "855c15161d5dd4b0", "scanner": "scanner-primary", "fingerprint": "780278ca414304b7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-77f7f96d002c9b08", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/components/milestones/entitlement-preflight.ts:5"}, "properties": {"repobilityId": "5af0a8bca3d25977", "scanner": "scanner-primary", "fingerprint": "77f7f96d002c9b08", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-871dd7373b521366", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/contexts/AuthContext.tsx:71"}, "properties": {"repobilityId": "8449ae61213d3d93", "scanner": "scanner-primary", "fingerprint": "871dd7373b521366", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bd66e2fec98229e4", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/milestone-discovery.ts:1"}, "properties": {"repobilityId": "2a037d00859abb11", "scanner": "scanner-primary", "fingerprint": "bd66e2fec98229e4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-96ea2e184f46ba99", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/client-ip.ts:3"}, "properties": {"repobilityId": "de4acc4dbaf5ff2a", "scanner": "scanner-primary", "fingerprint": "96ea2e184f46ba99", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6371c3502e1b4baf", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/onramp-logging.ts:33"}, "properties": {"repobilityId": "3735fa1d1bead3ce", "scanner": "scanner-primary", "fingerprint": "6371c3502e1b4baf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c00ba38a997cb9b4", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/whatsapp-link-index.ts:1"}, "properties": {"repobilityId": "3df6b91058e0739d", "scanner": "scanner-primary", "fingerprint": "c00ba38a997cb9b4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0733883aaffe2214", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/zklogin-session-registry.ts:3"}, "properties": {"repobilityId": "e1320f2b3d914240", "scanner": "scanner-primary", "fingerprint": "0733883aaffe2214", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-459315185259515a", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/walrus-renewal.ts:6"}, "properties": {"repobilityId": "18ed22d53809bf8e", "scanner": "scanner-primary", "fingerprint": "459315185259515a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1b7903fbde18fa94", "level": "none", "message": {"text": "Commented-code block (12 lines) in src/lib/legal-acceptance-server.ts:9"}, "properties": {"repobilityId": "4035023972abb4de", "scanner": "scanner-primary", "fingerprint": "1b7903fbde18fa94", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e64c69a73eb8ad53", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/cycle-escrow-discovery.ts:63"}, "properties": {"repobilityId": "13416d3c83c69237", "scanner": "scanner-primary", "fingerprint": "e64c69a73eb8ad53", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-773082a7a8285d6d", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/lib/pg-pool.ts:13"}, "properties": {"repobilityId": "2bb915608fa2ea67", "scanner": "scanner-primary", "fingerprint": "773082a7a8285d6d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-99c40d041a9124f5", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/circle-settlement.ts:1"}, "properties": {"repobilityId": "cc3e0050a324f2d5", "scanner": "scanner-primary", "fingerprint": "99c40d041a9124f5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-59d94106046fa4bf", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/lib/webhook-dedupe.ts:3"}, "properties": {"repobilityId": "bc82a3807b4811db", "scanner": "scanner-primary", "fingerprint": "59d94106046fa4bf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ee9066d3f5bc70c6", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/attestation-queue.ts:6"}, "properties": {"repobilityId": "b8ddc8e59bf8983f", "scanner": "scanner-primary", "fingerprint": "ee9066d3f5bc70c6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-71ed34df1ca2b0e7", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/lib/entitlement-gate.ts:6"}, "properties": {"repobilityId": "1e4dd5374f87f835", "scanner": "scanner-primary", "fingerprint": "71ed34df1ca2b0e7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-03a5ae5fb4bf270d", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/compliance-gate.ts:1"}, "properties": {"repobilityId": "55c6c2fa84b50a3d", "scanner": "scanner-primary", "fingerprint": "03a5ae5fb4bf270d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1c7a6a931971c609", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/cetus-service.ts:144"}, "properties": {"repobilityId": "8cbe947245c07c50", "scanner": "scanner-primary", "fingerprint": "1c7a6a931971c609", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b979b98c3b179484", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/lib/ramp-geo.ts:3"}, "properties": {"repobilityId": "f1d20f8e581ff2c1", "scanner": "scanner-primary", "fingerprint": "b979b98c3b179484", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-425d0bca396b65bf", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/zklogin-client-signer.ts:9"}, "properties": {"repobilityId": "4fe315ba81a96b3f", "scanner": "scanner-primary", "fingerprint": "425d0bca396b65bf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3874d8391cf72827", "level": "none", "message": {"text": "Commented-code block (12 lines) in src/lib/cycle-finalized-cron.ts:8"}, "properties": {"repobilityId": "4d3cca6f222690d7", "scanner": "scanner-primary", "fingerprint": "3874d8391cf72827", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-705f88cb17d800a4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/swap-service.ts:170"}, "properties": {"repobilityId": "2feb4826ac9a9553", "scanner": "scanner-primary", "fingerprint": "705f88cb17d800a4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-475ae1b7a78a723a", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/whatsapp-notifier.ts:7"}, "properties": {"repobilityId": "81ebac155f58ac21", "scanner": "scanner-primary", "fingerprint": "475ae1b7a78a723a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cfc973f6a3d4e195", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/lib/rate-limit.ts:4"}, "properties": {"repobilityId": "6eb0e8004f88a9c6", "scanner": "scanner-primary", "fingerprint": "cfc973f6a3d4e195", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-638d7bcb38484c55", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/i18n.ts:18"}, "properties": {"repobilityId": "f68867f7b1318e3c", "scanner": "scanner-primary", "fingerprint": "638d7bcb38484c55", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d6f6c7a0a7198fcc", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/timing-safe.ts:3"}, "properties": {"repobilityId": "542f76713d661e8e", "scanner": "scanner-primary", "fingerprint": "d6f6c7a0a7198fcc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-64646532c0ba2df1", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/circle-admin-verification.ts:3"}, "properties": {"repobilityId": "2dd0693d7a512189", "scanner": "scanner-primary", "fingerprint": "64646532c0ba2df1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7cc0421cccc7fb61", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/membership-discovery.ts:4"}, "properties": {"repobilityId": "5e4f15ddd47181a5", "scanner": "scanner-primary", "fingerprint": "7cc0421cccc7fb61", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d6c6448bcb86a870", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/legal-acceptance.ts:4"}, "properties": {"repobilityId": "3fe013c003a5a047", "scanner": "scanner-primary", "fingerprint": "d6c6448bcb86a870", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f15fb43dd498193f", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/__tests__/milestone-entitlement-preflight.test.ts:121"}, "properties": {"repobilityId": "942702f3034118fd", "scanner": "scanner-primary", "fingerprint": "f15fb43dd498193f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4830409afc8ba0ee", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/__tests__/walrus-renewal.test.ts:1"}, "properties": {"repobilityId": "9d0edbba47ea0e81", "scanner": "scanner-primary", "fingerprint": "4830409afc8ba0ee", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6619d65a7e3a901b", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/__tests__/ramp-pii-redaction.test.ts:1"}, "properties": {"repobilityId": "0ae87f4f369157d1", "scanner": "scanner-primary", "fingerprint": "6619d65a7e3a901b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a92d33d2abb0eb2c", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/__tests__/ramp-webhook-auth.test.ts:1"}, "properties": {"repobilityId": "0083993cb3ebb487", "scanner": "scanner-primary", "fingerprint": "a92d33d2abb0eb2c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5d237dd87fb81823", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/__tests__/i18n-key-parity.test.ts:3"}, "properties": {"repobilityId": "7b97c38771943abc", "scanner": "scanner-primary", "fingerprint": "5d237dd87fb81823", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f23cdfc3266c2c02", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/__tests__/cycle-finalized-cron.test.ts:1"}, "properties": {"repobilityId": "fa98edfb3bc0d1c5", "scanner": "scanner-primary", "fingerprint": "f23cdfc3266c2c02", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a75b8fb213db42df", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/whatsapp-bot/circle-phone.ts:1"}, "properties": {"repobilityId": "396d069a657b6911", "scanner": "scanner-primary", "fingerprint": "a75b8fb213db42df", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9edd7c0da7d55619", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/whatsapp-bot/circle-events.ts:1"}, "properties": {"repobilityId": "9fb2042471e1366d", "scanner": "scanner-primary", "fingerprint": "9edd7c0da7d55619", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e27a3424970016ba", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/pages/dashboard.tsx:173"}, "properties": {"repobilityId": "4b9dae3de9d0ca5c", "scanner": "scanner-primary", "fingerprint": "e27a3424970016ba", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-721bba53d499afea", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/dashboard.tsx:2285"}, "properties": {"repobilityId": "a422bd4ff46be7bc", "scanner": "scanner-primary", "fingerprint": "721bba53d499afea", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-952e9206e40632ba", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/pages/create-circle.tsx:28"}, "properties": {"repobilityId": "6cc7cc14b94bdeea", "scanner": "scanner-primary", "fingerprint": "952e9206e40632ba", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1e320049f191dba1", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/pages/pricing.tsx:3"}, "properties": {"repobilityId": "093b6f172ba05b56", "scanner": "scanner-primary", "fingerprint": "1e320049f191dba1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-833659d73337e462", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/pages/_app.tsx:71"}, "properties": {"repobilityId": "0af621e4a8cfeee5", "scanner": "scanner-primary", "fingerprint": "833659d73337e462", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2b25721650c222ea", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/auth/callback.tsx:150"}, "properties": {"repobilityId": "8104247c68ce257b", "scanner": "scanner-primary", "fingerprint": "2b25721650c222ea", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c9f25eeaa3998bb7", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/pages/circle/[id]/goals.tsx:1"}, "properties": {"repobilityId": "a2152e83e7183e62", "scanner": "scanner-primary", "fingerprint": "c9f25eeaa3998bb7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a6b03b991fab950b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/circle/[id]/manage/index.tsx:1632"}, "properties": {"repobilityId": "c996bba2179b30e4", "scanner": "scanner-primary", "fingerprint": "a6b03b991fab950b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7fff36bcc4b0b8fc", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/pages/circle/[id]/contribute/index.tsx:110"}, "properties": {"repobilityId": "b944cc4aa060e44f", "scanner": "scanner-primary", "fingerprint": "7fff36bcc4b0b8fc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4465a7747ace9085", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/circle/[id]/contribute/index.tsx:2430"}, "properties": {"repobilityId": "a331387478ff4ddd", "scanner": "scanner-primary", "fingerprint": "4465a7747ace9085", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-206871b46c573de9", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/pages/api/health.ts:4"}, "properties": {"repobilityId": "99417324ffc561ba", "scanner": "scanner-primary", "fingerprint": "206871b46c573de9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-41c93f904a51c6f6", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/pages/api/zkLogin.ts:131"}, "properties": {"repobilityId": "30e8f89dec8ab30f", "scanner": "scanner-primary", "fingerprint": "41c93f904a51c6f6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dbc4d26106b75cc8", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/pages/api/legal/accept.ts:4"}, "properties": {"repobilityId": "283684f4395afccb", "scanner": "scanner-primary", "fingerprint": "dbc4d26106b75cc8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2f2ead33bcd7bc59", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/pages/api/legal/data-deletion-request.ts:6"}, "properties": {"repobilityId": "1e3517664873f2ef", "scanner": "scanner-primary", "fingerprint": "2f2ead33bcd7bc59", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-71ff03be47a679ff", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/pages/api/legal/doc.ts:1"}, "properties": {"repobilityId": "3b524d46578b8b96", "scanner": "scanner-primary", "fingerprint": "71ff03be47a679ff", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c1a0f10e73ef6b12", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/pages/api/faucet/drip.ts:3"}, "properties": {"repobilityId": "c77e09022360b6df", "scanner": "scanner-primary", "fingerprint": "c1a0f10e73ef6b12", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cdcb732790c40c98", "level": "none", "message": {"text": "Commented-code block (13 lines) in src/pages/api/onramp/moonpay/webhook.ts:82"}, "properties": {"repobilityId": "b0b91afb5308f962", "scanner": "scanner-primary", "fingerprint": "cdcb732790c40c98", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a23e3b809733d07a", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/pages/api/onramp/coinbase/webhook.ts:9"}, "properties": {"repobilityId": "dbd4325b488d4405", "scanner": "scanner-primary", "fingerprint": "a23e3b809733d07a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7382acfb259db894", "level": "none", "message": {"text": "Commented-code block (12 lines) in src/pages/api/onramp/transak/webhook.ts:79"}, "properties": {"repobilityId": "53483eeff8e838c9", "scanner": "scanner-primary", "fingerprint": "7382acfb259db894", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6ececa4c934e4072", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/pages/api/whatsapp/admin-link-circle.ts:239"}, "properties": {"repobilityId": "b2dd0d3bf8f497c1", "scanner": "scanner-primary", "fingerprint": "6ececa4c934e4072", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-562d2760348dc9a5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/api/whatsapp/webhook.ts:377"}, "properties": {"repobilityId": "662b69d079024816", "scanner": "scanner-primary", "fingerprint": "562d2760348dc9a5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0c98fc788bedcb7c", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/pages/api/cron/cycle-finalized.ts:261"}, "properties": {"repobilityId": "a89b8c6214490764", "scanner": "scanner-primary", "fingerprint": "0c98fc788bedcb7c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9e632cdd1f806c23", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/pages/api/cron/whatsapp-circle-events.ts:370"}, "properties": {"repobilityId": "65ab593c7aef3ef3", "scanner": "scanner-primary", "fingerprint": "9e632cdd1f806c23", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-17a8b8dbb1256dd6", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/hooks/useIdleTimer.ts:52"}, "properties": {"repobilityId": "b5da5975ba2ed6c2", "scanner": "scanner-primary", "fingerprint": "17a8b8dbb1256dd6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e96d720eac91e61c", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/services/zkLoginClient.ts:1439"}, "properties": {"repobilityId": "ef0e19667d94c85e", "scanner": "scanner-primary", "fingerprint": "e96d720eac91e61c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ba08914f01ab320a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/zkLoginClient.ts:256"}, "properties": {"repobilityId": "bdcda22f58c7989f", "scanner": "scanner-primary", "fingerprint": "ba08914f01ab320a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5cfd7a5397d53fa6", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/services/milestone-service.ts:1"}, "properties": {"repobilityId": "ac221942653b4465", "scanner": "scanner-primary", "fingerprint": "5cfd7a5397d53fa6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f36a324ccb8da02d", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/services/compliance-attestation-service.ts:4"}, "properties": {"repobilityId": "ba1626c6b2c4487f", "scanner": "scanner-primary", "fingerprint": "f36a324ccb8da02d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2da91b8124537427", "level": "note", "message": {"text": "Legacy-named symbol `isRegistryDeprecated` in src/services/whatsapp-registry-service.ts:258"}, "properties": {"repobilityId": "b942d405d904d4ac", "scanner": "scanner-primary", "fingerprint": "2da91b8124537427", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-8bc162fe3c3fa114", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/swap-service.ts:74"}, "properties": {"repobilityId": "c798359b5ce026d1", "scanner": "scanner-primary", "fingerprint": "8bc162fe3c3fa114", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6cb537115144ac6f", "level": "note", "message": {"text": "Legacy-named symbol `clob_v2` in src/services/constants.ts:19"}, "properties": {"repobilityId": "d6912722a3bfd0a6", "scanner": "scanner-primary", "fingerprint": "6cb537115144ac6f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-e91c7b48bbb29cfd", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/services/stripe-service.ts:3"}, "properties": {"repobilityId": "df37bdae3be5aeca", "scanner": "scanner-primary", "fingerprint": "e91c7b48bbb29cfd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-849307d6e6e79fdc", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/services/transak-service.ts:3"}, "properties": {"repobilityId": "3394677fbe7812c1", "scanner": "scanner-primary", "fingerprint": "849307d6e6e79fdc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5cb616fe9772490f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/circle-status.service.ts:394"}, "properties": {"repobilityId": "117bcd750273d57b", "scanner": "scanner-primary", "fingerprint": "5cb616fe9772490f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3555af3824aaea3d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/enokiZkLoginService.ts:306"}, "properties": {"repobilityId": "c6193490a266c27a", "scanner": "scanner-primary", "fingerprint": "3555af3824aaea3d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a330d8bcaa9d114e", "level": "note", "message": {"text": "71 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "c3d45b3e514673d8", "scanner": "scanner-primary", "fingerprint": "a330d8bcaa9d114e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-27f5a529559b1f6a", "level": "error", "message": {"text": "Dangling fetch: POST /api/circles/swap-config (src/components/StablecoinSwapForm.tsx:110)"}, "properties": {"repobilityId": "bac04bf20cf0ca4a", "scanner": "scanner-primary", "fingerprint": "27f5a529559b1f6a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-19b371d8102039fc", "level": "error", "message": {"text": "Dangling fetch: POST /api/onramp/moonpay/session (src/components/MoonPayLauncher.tsx:44)"}, "properties": {"repobilityId": "8d63ebb7476dd3b9", "scanner": "scanner-primary", "fingerprint": "19b371d8102039fc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-78f874cb14844377", "level": "error", "message": {"text": "Dangling fetch: GET /api/onramp/coinbase/options?${params.toString()} (src/components/CoinbaseOnrampLauncher.tsx:134)"}, "properties": {"repobilityId": "2a955717b17a82e5", "scanner": "scanner-primary", "fingerprint": "78f874cb14844377", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-392568970cdc1b41", "level": "error", "message": {"text": "Dangling fetch: POST /api/zkLogin (src/components/SimplifiedSwapUI.tsx:652)"}, "properties": {"repobilityId": "59d7fd0c9e9dc9af", "scanner": "scanner-primary", "fingerprint": "392568970cdc1b41", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e091cb35705e1954", "level": "error", "message": {"text": "Dangling fetch: POST /api/zkLogin (src/components/SimplifiedSwapUI.tsx:850)"}, "properties": {"repobilityId": "26c55838690d88a0", "scanner": "scanner-primary", "fingerprint": "e091cb35705e1954", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9b03e424f9932679", "level": "error", "message": {"text": "Dangling fetch: POST /api/zkLogin (src/components/SimplifiedSwapUI.tsx:1140)"}, "properties": {"repobilityId": "65004282d509becb", "scanner": "scanner-primary", "fingerprint": "9b03e424f9932679", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d0d7666604145281", "level": "error", "message": {"text": "Dangling fetch: GET /api/whatsapp/admin-link-circle?circleId=${circleId}&network=${currentNetwork} (src/components/WhatsAppCircleIntegration.tsx:137)"}, "properties": {"repobilityId": "7fac33fd1b60193a", "scanner": "scanner-primary", "fingerprint": "d0d7666604145281", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-01aa084713a55981", "level": "error", "message": {"text": "Dangling fetch: POST /api/whatsapp/admin-link-circle (src/components/WhatsAppCircleIntegration.tsx:197)"}, "properties": {"repobilityId": "87c9410b2a064c58", "scanner": "scanner-primary", "fingerprint": "01aa084713a55981", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dad4d5cedaf1f477", "level": "error", "message": {"text": "Dangling fetch: POST /api/whatsapp/admin-unlink-circle (src/components/WhatsAppCircleIntegration.tsx:255)"}, "properties": {"repobilityId": "b7abced01ae060de", "scanner": "scanner-primary", "fingerprint": "dad4d5cedaf1f477", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0f0a615844912775", "level": "error", "message": {"text": "Dangling fetch: POST /api/onramp/transak/session (src/components/TransakLauncher.tsx:46)"}, "properties": {"repobilityId": "d90f5dcae07c8150", "scanner": "scanner-primary", "fingerprint": "0f0a615844912775", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f16ef13fe5ebe856", "level": "error", "message": {"text": "Dangling fetch: GET /api/legal/doc?doc=risk (src/components/LegalAcceptanceModal.tsx:200)"}, "properties": {"repobilityId": "e6553c9f2c48dc2a", "scanner": "scanner-primary", "fingerprint": "f16ef13fe5ebe856", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-03f7cf8aef9438db", "level": "error", "message": {"text": "Dangling fetch: POST /api/legal/accept (src/components/LegalAcceptanceModal.tsx:292)"}, "properties": {"repobilityId": "6b255a53276cbd6f", "scanner": "scanner-primary", "fingerprint": "03f7cf8aef9438db", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1d21329b339317f5", "level": "error", "message": {"text": "Dangling fetch: GET /api/legal/status (src/components/LegalAcceptanceModal.tsx:498)"}, "properties": {"repobilityId": "0f8f7600157c35d5", "scanner": "scanner-primary", "fingerprint": "1d21329b339317f5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-635ca4018381dfd0", "level": "error", "message": {"text": "Dangling fetch: GET /api/join-requests/pending/mock-circle-1?clear=all (src/components/ui/Navbar.tsx:198)"}, "properties": {"repobilityId": "b4dbf8edf1336a41", "scanner": "scanner-primary", "fingerprint": "635ca4018381dfd0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-30158128d97e0e59", "level": "error", "message": {"text": "Dangling fetch: GET /api/billing/status (src/components/ui/Navbar.tsx:242)"}, "properties": {"repobilityId": "6760ad73844bd021", "scanner": "scanner-primary", "fingerprint": "30158128d97e0e59", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-24328a50e8b0adf1", "level": "error", "message": {"text": "Dangling fetch: GET /api/billing/status (src/components/milestones/entitlement-preflight.ts:56)"}, "properties": {"repobilityId": "fc0cfee35dc6f5de", "scanner": "scanner-primary", "fingerprint": "24328a50e8b0adf1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-180200fc0b6df88f", "level": "error", "message": {"text": "Dangling fetch: POST /api/whatsapp/auth/notify (src/contexts/AuthContext.tsx:323)"}, "properties": {"repobilityId": "2bfe7b6e657da288", "scanner": "scanner-primary", "fingerprint": "180200fc0b6df88f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-31050af82233e2f8", "level": "error", "message": {"text": "Dangling fetch: POST /api/zkLogin (src/contexts/AuthContext.tsx:371)"}, "properties": {"repobilityId": "3b53711f5e510d05", "scanner": "scanner-primary", "fingerprint": "31050af82233e2f8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-79069130c1245238", "level": "error", "message": {"text": "Dangling fetch: POST /api/zkLogin (src/contexts/AuthContext.tsx:477)"}, "properties": {"repobilityId": "d5f6f61ee3557d3b", "scanner": "scanner-primary", "fingerprint": "79069130c1245238", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-77fc54f47460bdc3", "level": "error", "message": {"text": "Dangling fetch: POST /api/zkLogin (src/contexts/AuthContext.tsx:533)"}, "properties": {"repobilityId": "385779c7fbc19cdb", "scanner": "scanner-primary", "fingerprint": "77fc54f47460bdc3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5b5c1e9690320cd3", "level": "error", "message": {"text": "Dangling fetch: GET /api/billing/status (src/lib/entitlement-gate.ts:356)"}, "properties": {"repobilityId": "f4f24362af84e7c8", "scanner": "scanner-primary", "fingerprint": "5b5c1e9690320cd3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-eb9ee9ad8d960fb4", "level": "error", "message": {"text": "Dangling fetch: POST /api/zkLogin (src/lib/cetus-service.ts:144)"}, "properties": {"repobilityId": "db0025749a433303", "scanner": "scanner-primary", "fingerprint": "eb9ee9ad8d960fb4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2bac3045b61a8412", "level": "error", "message": {"text": "Dangling fetch: POST /api/zkLogin (src/lib/swap-service.ts:170)"}, "properties": {"repobilityId": "760bf6853674080e", "scanner": "scanner-primary", "fingerprint": "2bac3045b61a8412", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e35d770fd4578f58", "level": "error", "message": {"text": "Dangling fetch: POST https://graph.facebook.com/v23.0/${phoneNumberId}/messages (src/lib/whatsapp-notifier.ts:369)"}, "properties": {"repobilityId": "74f997380b10e07c", "scanner": "scanner-primary", "fingerprint": "e35d770fd4578f58", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3562b9de776cf4e1", "level": "error", "message": {"text": "Dangling fetch: POST /api/faucet/drip (src/pages/dashboard.tsx:2161)"}, "properties": {"repobilityId": "f4565c4314a66787", "scanner": "scanner-primary", "fingerprint": "3562b9de776cf4e1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5fbef55eedd72bee", "level": "error", "message": {"text": "Dangling fetch: POST /api/zkLogin (src/pages/dashboard.tsx:2285)"}, "properties": {"repobilityId": "8204e69975b04544", "scanner": "scanner-primary", "fingerprint": "5fbef55eedd72bee", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0b44f5528a0eac8d", "level": "error", "message": {"text": "Dangling fetch: GET /api/circle-stats (src/pages/index.tsx:340)"}, "properties": {"repobilityId": "9560e7a28e815c28", "scanner": "scanner-primary", "fingerprint": "0b44f5528a0eac8d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5a020d57b8ca1753", "level": "error", "message": {"text": "Dangling fetch: POST /api/mainnet-signup (src/pages/index.tsx:369)"}, "properties": {"repobilityId": "34adb02152042eb4", "scanner": "scanner-primary", "fingerprint": "5a020d57b8ca1753", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4c1dd2458d210b47", "level": "error", "message": {"text": "Dangling fetch: GET /api/billing/status (src/pages/pricing.tsx:124)"}, "properties": {"repobilityId": "edcd3d359df7481b", "scanner": "scanner-primary", "fingerprint": "4c1dd2458d210b47", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-209d5552f08e5660", "level": "error", "message": {"text": "Dangling fetch: POST /api/billing/checkout-session (src/pages/pricing.tsx:146)"}, "properties": {"repobilityId": "b460fc718daa500f", "scanner": "scanner-primary", "fingerprint": "209d5552f08e5660", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9733a4f11c56316c", "level": "error", "message": {"text": "Dangling fetch: POST /api/billing/portal-session (src/pages/pricing.tsx:176)"}, "properties": {"repobilityId": "8ee4739017b44723", "scanner": "scanner-primary", "fingerprint": "9733a4f11c56316c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f90c33fcb55baec1", "level": "error", "message": {"text": "Dangling fetch: POST /api/automation/start (src/pages/_app.tsx:72)"}, "properties": {"repobilityId": "f05de01ffb3fe9a7", "scanner": "scanner-primary", "fingerprint": "f90c33fcb55baec1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9d0eaae7dbab8e77", "level": "error", "message": {"text": "Dangling fetch: GET /api/automation/dashboard (src/pages/automation/dashboard.tsx:31)"}, "properties": {"repobilityId": "242c4644fbd2af89", "scanner": "scanner-primary", "fingerprint": "9d0eaae7dbab8e77", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-50863b2614f6984f", "level": "error", "message": {"text": "Dangling fetch: POST /api/legal/data-deletion-request (src/pages/legal/data-deletion.tsx:145)"}, "properties": {"repobilityId": "bd204a856273df47", "scanner": "scanner-primary", "fingerprint": "50863b2614f6984f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6e4f47372a8831b2", "level": "error", "message": {"text": "Dangling fetch: POST /api/whatsapp/auth/notify (src/pages/auth/callback.tsx:150)"}, "properties": {"repobilityId": "d311cf5c69fda265", "scanner": "scanner-primary", "fingerprint": "6e4f47372a8831b2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-529fe051ad20c696", "level": "error", "message": {"text": "Dangling fetch: POST /api/whatsapp/auth/notify (src/pages/auth/callback.tsx:207)"}, "properties": {"repobilityId": "1d927053323f766e", "scanner": "scanner-primary", "fingerprint": "529fe051ad20c696", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f11755c946d6ed32", "level": "error", "message": {"text": "Dangling fetch: POST /api/whatsapp/auth/notify (src/pages/auth/whatsapp.tsx:35)"}, "properties": {"repobilityId": "2e3bfa76c8d65ef7", "scanner": "scanner-primary", "fingerprint": "f11755c946d6ed32", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ffc42ea481b2ed00", "level": "error", "message": {"text": "Dangling fetch: POST /api/whatsapp/auth/notify (src/pages/auth/whatsapp.tsx:73)"}, "properties": {"repobilityId": "5b7cee5feae74b7e", "scanner": "scanner-primary", "fingerprint": "ffc42ea481b2ed00", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f58d09958d285efd", "level": "error", "message": {"text": "Dangling fetch: GET /api/join-requests/pending/${id} (src/pages/circle/[id]/manage/index.tsx:1592)"}, "properties": {"repobilityId": "b94f4b92fdb543b5", "scanner": "scanner-primary", "fingerprint": "f58d09958d285efd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1b6fc86c14e15e06", "level": "error", "message": {"text": "Dangling fetch: POST /api/zkLogin (src/pages/circle/[id]/manage/index.tsx:1632)"}, "properties": {"repobilityId": "e676f5039c8bb8c6", "scanner": "scanner-primary", "fingerprint": "1b6fc86c14e15e06", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9335b7a846c3bb24", "level": "error", "message": {"text": "Dangling fetch: POST /api/zkLogin (src/pages/circle/[id]/manage/index.tsx:1709)"}, "properties": {"repobilityId": "04b6f549a1543098", "scanner": "scanner-primary", "fingerprint": "9335b7a846c3bb24", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7bbb7f5f69f6d537", "level": "error", "message": {"text": "Dangling fetch: POST /api/zkLogin (src/pages/circle/[id]/manage/index.tsx:1781)"}, "properties": {"repobilityId": "01895d1aac471ac5", "scanner": "scanner-primary", "fingerprint": "7bbb7f5f69f6d537", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-46c8987fc481bd90", "level": "error", "message": {"text": "Dangling fetch: POST /api/zkLogin (src/pages/circle/[id]/manage/index.tsx:1912)"}, "properties": {"repobilityId": "ce24c245b4f975c2", "scanner": "scanner-primary", "fingerprint": "46c8987fc481bd90", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d19944e6093a8c31", "level": "error", "message": {"text": "Dangling fetch: POST /api/join-requests/${request.circle_id}/update (src/pages/circle/[id]/manage/index.tsx:2120)"}, "properties": {"repobilityId": "23fa8dd89ebd836c", "scanner": "scanner-primary", "fingerprint": "d19944e6093a8c31", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-37f2716dc85d7f62", "level": "error", "message": {"text": "Dangling fetch: POST /api/zkLogin (src/pages/circle/[id]/manage/index.tsx:2205)"}, "properties": {"repobilityId": "5af1c51ac9968674", "scanner": "scanner-primary", "fingerprint": "37f2716dc85d7f62", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-af0feb107d1bac99", "level": "error", "message": {"text": "Dangling fetch: POST /api/join-requests/${request.circle_id}/update (src/pages/circle/[id]/manage/index.tsx:2246)"}, "properties": {"repobilityId": "4a57dbd35700ecdb", "scanner": "scanner-primary", "fingerprint": "af0feb107d1bac99", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dc9d7502792af8b8", "level": "error", "message": {"text": "Dangling fetch: POST /api/join-requests/${request.circle_id}/update (src/pages/circle/[id]/manage/index.tsx:2304)"}, "properties": {"repobilityId": "f96142257a3810a4", "scanner": "scanner-primary", "fingerprint": "dc9d7502792af8b8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a607e100df695354", "level": "error", "message": {"text": "Dangling fetch: POST /api/join-requests/${request.circle_id}/update (src/pages/circle/[id]/manage/index.tsx:2437)"}, "properties": {"repobilityId": "1e36c2d10caf7009", "scanner": "scanner-primary", "fingerprint": "a607e100df695354", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1bd7191460759f25", "level": "error", "message": {"text": "Dangling fetch: POST /api/zkLogin (src/pages/circle/[id]/manage/index.tsx:2945)"}, "properties": {"repobilityId": "e520f1ebc7f73874", "scanner": "scanner-primary", "fingerprint": "1bd7191460759f25", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-89b6147941eb1951", "level": "error", "message": {"text": "Dangling fetch: POST /api/zkLogin (src/pages/circle/[id]/manage/index.tsx:3633)"}, "properties": {"repobilityId": "1608515229b419dc", "scanner": "scanner-primary", "fingerprint": "89b6147941eb1951", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-903303cff1386c43", "level": "error", "message": {"text": "Dangling fetch: POST /api/zkLogin (src/pages/circle/[id]/manage/index.tsx:4086)"}, "properties": {"repobilityId": "ea242e46c75877c3", "scanner": "scanner-primary", "fingerprint": "903303cff1386c43", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3a65c10e4bbe1291", "level": "error", "message": {"text": "Dangling fetch: POST /api/zkLogin (src/pages/circle/[id]/manage/index.tsx:4967)"}, "properties": {"repobilityId": "19a5611b312a9d81", "scanner": "scanner-primary", "fingerprint": "3a65c10e4bbe1291", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-178280bceaf986f1", "level": "error", "message": {"text": "Dangling fetch: POST /api/zkLogin (src/pages/circle/[id]/manage/index.tsx:5069)"}, "properties": {"repobilityId": "79a23ef28f43b371", "scanner": "scanner-primary", "fingerprint": "178280bceaf986f1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7f89884864b54b7c", "level": "error", "message": {"text": "Dangling fetch: POST /api/zkLogin (src/pages/circle/[id]/contribute/index.tsx:2430)"}, "properties": {"repobilityId": "586bfc091d044372", "scanner": "scanner-primary", "fingerprint": "7f89884864b54b7c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-96ebbb8c6baf5968", "level": "error", "message": {"text": "Dangling fetch: POST /api/zkLogin (src/pages/circle/[id]/contribute/index.tsx:2462)"}, "properties": {"repobilityId": "f57e66b2b839c048", "scanner": "scanner-primary", "fingerprint": "96ebbb8c6baf5968", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-75d55afc2fd61542", "level": "error", "message": {"text": "Dangling fetch: POST /api/zkLogin (src/pages/circle/[id]/contribute/index.tsx:2584)"}, "properties": {"repobilityId": "d61304100d8f8939", "scanner": "scanner-primary", "fingerprint": "75d55afc2fd61542", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dc7fca73c3c41ccb", "level": "error", "message": {"text": "Dangling fetch: POST /api/zkLogin (src/pages/circle/[id]/contribute/index.tsx:3063)"}, "properties": {"repobilityId": "bc0bb48a77e414b9", "scanner": "scanner-primary", "fingerprint": "dc7fca73c3c41ccb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-613de6f40f3da6a6", "level": "error", "message": {"text": "Dangling fetch: GET /api/join-requests/check?circleId=${id}&userAddress=${userAddress} (src/pages/circle/[id]/join/index.tsx:480)"}, "properties": {"repobilityId": "83da1b74d1a184cb", "scanner": "scanner-primary", "fingerprint": "613de6f40f3da6a6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-79c523cc4ed4f058", "level": "error", "message": {"text": "Dangling fetch: POST /api/join-requests/create (src/pages/circle/[id]/join/index.tsx:522)"}, "properties": {"repobilityId": "0b05fafa58e39735", "scanner": "scanner-primary", "fingerprint": "79c523cc4ed4f058", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-261cccd6e12c8de5", "level": "error", "message": {"text": "Dangling fetch: POST https://graph.facebook.com/v23.0/${process.env.WHATSAPP_PHONE_NUMBER_ID}/messages (src/pages/api/whatsapp/webhook.ts:323)"}, "properties": {"repobilityId": "a9cef0184e5a147a", "scanner": "scanner-primary", "fingerprint": "261cccd6e12c8de5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9b71e15a8feb3745", "level": "error", "message": {"text": "Dangling fetch: POST https://graph.facebook.com/v23.0/${process.env.WHATSAPP_PHONE_NUMBER_ID}/messages (src/pages/api/whatsapp/webhook.ts:377)"}, "properties": {"repobilityId": "719e7091b9bd4e95", "scanner": "scanner-primary", "fingerprint": "9b71e15a8feb3745", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-69989268776c3d15", "level": "error", "message": {"text": "Dangling fetch: POST https://graph.facebook.com/v23.0/${process.env.WHATSAPP_PHONE_NUMBER_ID}/messages (src/pages/api/whatsapp/webhook.ts:420)"}, "properties": {"repobilityId": "e23fdf8d602de659", "scanner": "scanner-primary", "fingerprint": "69989268776c3d15", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3d9ba093ff90920e", "level": "error", "message": {"text": "Dangling fetch: POST https://graph.facebook.com/v23.0/${process.env.WHATSAPP_PHONE_NUMBER_ID}/messages (src/pages/api/whatsapp/webhook.ts:460)"}, "properties": {"repobilityId": "0225982ad7af8ee9", "scanner": "scanner-primary", "fingerprint": "3d9ba093ff90920e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-130dd7cc241a71cb", "level": "error", "message": {"text": "Dangling fetch: POST https://graph.facebook.com/v23.0/${process.env.WHATSAPP_PHONE_NUMBER_ID}/messages (src/pages/api/whatsapp/webhook.ts:498)"}, "properties": {"repobilityId": "271a68ce1ae5f5d6", "scanner": "scanner-primary", "fingerprint": "130dd7cc241a71cb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-597221d0203b6537", "level": "error", "message": {"text": "Dangling fetch: GET /api/compliance/queue (src/pages/admin/compliance.tsx:146)"}, "properties": {"repobilityId": "4759d43942279b28", "scanner": "scanner-primary", "fingerprint": "597221d0203b6537", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e9d89d01e0e5cc8a", "level": "error", "message": {"text": "Dangling fetch: POST /api/compliance/queue (src/pages/admin/compliance.tsx:186)"}, "properties": {"repobilityId": "c986a58ab493b3f1", "scanner": "scanner-primary", "fingerprint": "e9d89d01e0e5cc8a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fea16da103568fad", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/compliance/stale (src/pages/admin/compliance.tsx:226)"}, "properties": {"repobilityId": "44e5066e19232b4f", "scanner": "scanner-primary", "fingerprint": "fea16da103568fad", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1339d26f656a9d34", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/notifications/recent?address=${encodeURIComponent(notificationAddress)}&limit=50 (src/pages/admin/compliance.tsx:265)"}, "properties": {"repobilityId": "f9373b90730726c9", "scanner": "scanner-primary", "fingerprint": "1339d26f656a9d34", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4e12d29988f5567d", "level": "error", "message": {"text": "Dangling fetch: POST /api/compliance/prepare-issuance (src/pages/admin/compliance.tsx:309)"}, "properties": {"repobilityId": "87fa433e0dd97171", "scanner": "scanner-primary", "fingerprint": "4e12d29988f5567d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ae33018c65618d21", "level": "error", "message": {"text": "Dangling fetch: POST /api/compliance/queue (src/pages/admin/compliance.tsx:360)"}, "properties": {"repobilityId": "d1bc1ac90020029a", "scanner": "scanner-primary", "fingerprint": "ae33018c65618d21", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b5f83e8209483371", "level": "error", "message": {"text": "Dangling fetch: POST /api/onramp/coinbase/session (src/hooks/useCoinbaseSession.ts:141)"}, "properties": {"repobilityId": "34d2ed72976887bc", "scanner": "scanner-primary", "fingerprint": "b5f83e8209483371", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e8f80ccd12ffec5e", "level": "error", "message": {"text": "Dangling fetch: POST /api/zkLogin (src/services/zkLoginClient.ts:256)"}, "properties": {"repobilityId": "de8899a40247c866", "scanner": "scanner-primary", "fingerprint": "e8f80ccd12ffec5e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8549257c40173e17", "level": "error", "message": {"text": "Dangling fetch: POST /api/zkLogin (src/services/zkLoginClient.ts:287)"}, "properties": {"repobilityId": "208b77ae589da63b", "scanner": "scanner-primary", "fingerprint": "8549257c40173e17", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-71fea618066d6286", "level": "error", "message": {"text": "Dangling fetch: POST /api/zkLogin (src/services/zkLoginClient.ts:351)"}, "properties": {"repobilityId": "448085d950585345", "scanner": "scanner-primary", "fingerprint": "71fea618066d6286", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2bf89de288792f8b", "level": "error", "message": {"text": "Dangling fetch: POST /api/zkLogin (src/services/zkLoginClient.ts:421)"}, "properties": {"repobilityId": "bdbc0ed63df49e5c", "scanner": "scanner-primary", "fingerprint": "2bf89de288792f8b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c60c263c1fe2b470", "level": "error", "message": {"text": "Dangling fetch: POST /api/zkLogin (src/services/zkLoginClient.ts:608)"}, "properties": {"repobilityId": "858a610293bd48d9", "scanner": "scanner-primary", "fingerprint": "c60c263c1fe2b470", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fea6818342369390", "level": "error", "message": {"text": "Dangling fetch: POST /api/zkLogin (src/services/zkLoginClient.ts:705)"}, "properties": {"repobilityId": "8bad8cfc2eaecfff", "scanner": "scanner-primary", "fingerprint": "fea6818342369390", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a5a799c456128fb4", "level": "error", "message": {"text": "Dangling fetch: POST /api/zkLogin (src/services/zkLoginClient.ts:788)"}, "properties": {"repobilityId": "27b3c92b19e672a7", "scanner": "scanner-primary", "fingerprint": "a5a799c456128fb4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c529afe1242ddb38", "level": "error", "message": {"text": "Dangling fetch: POST /api/zkLogin (src/services/zkLoginClient.ts:872)"}, "properties": {"repobilityId": "d84d3c580a3ceb68", "scanner": "scanner-primary", "fingerprint": "c529afe1242ddb38", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5245934aed8543bd", "level": "error", "message": {"text": "Dangling fetch: POST /api/zkLogin (src/services/zkLoginClient.ts:927)"}, "properties": {"repobilityId": "383c286aa264aad0", "scanner": "scanner-primary", "fingerprint": "5245934aed8543bd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a0d99642549fdef9", "level": "error", "message": {"text": "Dangling fetch: POST /api/zkLogin (src/services/zkLoginClient.ts:982)"}, "properties": {"repobilityId": "be5d123f820830f9", "scanner": "scanner-primary", "fingerprint": "a0d99642549fdef9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-274a816a5e4c6a0f", "level": "error", "message": {"text": "Dangling fetch: POST /api/zkLogin (src/services/zkLoginClient.ts:1068)"}, "properties": {"repobilityId": "3b722ad07fa7797c", "scanner": "scanner-primary", "fingerprint": "274a816a5e4c6a0f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-223d573a0764a8d2", "level": "error", "message": {"text": "Dangling fetch: POST /api/zkLogin (src/services/zkLoginClient.ts:1171)"}, "properties": {"repobilityId": "6c0082de237a06f6", "scanner": "scanner-primary", "fingerprint": "223d573a0764a8d2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1e0ea213ed3c29e9", "level": "error", "message": {"text": "Dangling fetch: POST /api/zkLogin (src/services/zkLoginClient.ts:1257)"}, "properties": {"repobilityId": "b67ce2fb0946dc88", "scanner": "scanner-primary", "fingerprint": "1e0ea213ed3c29e9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b7a68accf021c335", "level": "error", "message": {"text": "Dangling fetch: POST /api/zkLogin (src/services/zkLoginClient.ts:1330)"}, "properties": {"repobilityId": "31c15c8d45b9fbba", "scanner": "scanner-primary", "fingerprint": "b7a68accf021c335", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1531738e4b94f44f", "level": "error", "message": {"text": "Dangling fetch: POST /api/zkLogin (src/services/zkLoginClient.ts:1379)"}, "properties": {"repobilityId": "7692f72667b6e4f8", "scanner": "scanner-primary", "fingerprint": "1531738e4b94f44f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cbfd0261e0e86795", "level": "error", "message": {"text": "Dangling fetch: POST /api/zkLogin (src/services/zkLoginClient.ts:1518)"}, "properties": {"repobilityId": "3378a5d8f0bdbc8c", "scanner": "scanner-primary", "fingerprint": "cbfd0261e0e86795", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5727970a8b5d720a", "level": "error", "message": {"text": "Dangling fetch: GET /api/circles/swap-config?${queryParams} (src/services/swap-service.ts:74)"}, "properties": {"repobilityId": "2aa47d80e25eda39", "scanner": "scanner-primary", "fingerprint": "5727970a8b5d720a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-963710f42a2c8219", "level": "note", "message": {"text": "Unused endpoint: GET /api/status"}, "properties": {"repobilityId": "f2f9fab16d6c20d3", "scanner": "scanner-primary", "fingerprint": "963710f42a2c8219", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cb2b6355b0334520", "level": "note", "message": {"text": "Unused endpoint: POST /api/whatsapp/send"}, "properties": {"repobilityId": "0a7231626cf68969", "scanner": "scanner-primary", "fingerprint": "cb2b6355b0334520", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-67d106e9cbcde3d8", "level": "note", "message": {"text": "Unused endpoint: POST /api/whatsapp/webhook"}, "properties": {"repobilityId": "beae1d445e4f10f6", "scanner": "scanner-primary", "fingerprint": "67d106e9cbcde3d8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5ae213cae59f019c", "level": "note", "message": {"text": "Unused endpoint: GET /api/whatsapp/webhook"}, "properties": {"repobilityId": "818bb53fee6e65a7", "scanner": "scanner-primary", "fingerprint": "5ae213cae59f019c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-94aca8267d17d1ca", "level": "note", "message": {"text": "Unused endpoint: GET /api/whatsapp/integration"}, "properties": {"repobilityId": "1f7b9efac3a9c714", "scanner": "scanner-primary", "fingerprint": "94aca8267d17d1ca", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-85d5d4bfe9cd08fa", "level": "note", "message": {"text": "Unused endpoint: GET /api/whatsapp/analytics"}, "properties": {"repobilityId": "3efc605486e57195", "scanner": "scanner-primary", "fingerprint": "85d5d4bfe9cd08fa", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-81b3255bdd650565", "level": "note", "message": {"text": "Unused endpoint: GET /api/whatsapp/queue"}, "properties": {"repobilityId": "fed3c812c14e7f0d", "scanner": "scanner-primary", "fingerprint": "81b3255bdd650565", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5baa8971ebe192a1", "level": "note", "message": {"text": "Unused endpoint: GET /"}, "properties": {"repobilityId": "be09f2cf9b558597", "scanner": "scanner-primary", "fingerprint": "5baa8971ebe192a1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5206f80cf3161a38", "level": "note", "message": {"text": "Unused endpoint: POST /get-salt"}, "properties": {"repobilityId": "77bd2121bdb33303", "scanner": "scanner-primary", "fingerprint": "5206f80cf3161a38", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-171755190100cf42", "level": "note", "message": {"text": "Unused endpoint: POST /recover-salt"}, "properties": {"repobilityId": "f16fb69cdba98292", "scanner": "scanner-primary", "fingerprint": "171755190100cf42", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-03c2e5a604548959", "level": "note", "message": {"text": "Unused endpoint: POST /generate-recovery-code"}, "properties": {"repobilityId": "0a3529b5d19ed9b4", "scanner": "scanner-primary", "fingerprint": "03c2e5a604548959", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}