{"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-95540862a63a9bb6", "name": "Possibly dead Python function: async_cancel_booking", "shortDescription": {"text": "Possibly dead Python function: async_cancel_booking"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6f5ae7aef882eed5", "name": "Possibly dead Python function: entrypoint", "shortDescription": {"text": "Possibly dead Python function: entrypoint"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c99a0a8e28f4958f", "name": "Possibly dead Python function: notify_booking_cancelled", "shortDescription": {"text": "Possibly dead Python function: notify_booking_cancelled"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a4e32d925a8f864e", "name": "Possibly dead Python function: notify_agent_error", "shortDescription": {"text": "Possibly dead Python function: notify_agent_error"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2f342d830ed76b7f", "name": "Possibly dead Python function: send_webhook", "shortDescription": {"text": "Possibly dead Python function: send_webhook"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ed575fe882264a2d", "name": "Stray `console.log` in TS/JS \u2014 test-page.js:5", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test-page.js:5"}, "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-d937fbb367450dea", "name": "Stray `console.log` in TS/JS \u2014 scan_tables_clean.js:25", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scan_tables_clean.js:25"}, "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-71b97d8fa2b57d58", "name": "Stray `console.log` in TS/JS \u2014 scan_db.js:29", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scan_db.js:29"}, "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-9f217d7fbb7ef9ac", "name": "Stray `console.log` in TS/JS \u2014 verify_clock_tower.js:34", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 verify_clock_tower.js: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-c260686643d5019a", "name": "Stray `console.log` in TS/JS \u2014 scan_db_extended.js:25", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scan_db_extended.js:25"}, "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-4832651b58dd148e", "name": "Stray `console.log` in TS/JS \u2014 worker.ts:22", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 worker.ts:22"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8bbbca3d49e72610", "name": "Stray `console.log` in TS/JS \u2014 next.config.ts:32", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 next.config.ts:32"}, "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-db2185864c0354db", "name": "Stray `console.log` in TS/JS \u2014 _disabled/app/api/calls/outbound/route.ts:85", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 _disabled/app/api/calls/outbound/route.ts:85"}, "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-ccfcf84ac7a161a7", "name": "Stray `console.log` in TS/JS \u2014 _disabled/app/api/whatsapp/connect/route.ts:124", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 _disabled/app/api/whatsapp/connect/route.ts:124"}, "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-3a7430ea3bf667aa", "name": "Stray `console.log` in TS/JS \u2014 _disabled/app/api/cron/timeout/route.ts:70", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 _disabled/app/api/cron/timeout/route.ts:70"}, "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-e6169e6e9eb92082", "name": "Stray `console.log` in TS/JS \u2014 _disabled/app/api/cron/reset-counters/route.ts:48", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 _disabled/app/api/cron/reset-counters/route.ts:48"}, "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-7328ebd2e7a8a158", "name": "Stray `console.log` in TS/JS \u2014 _disabled/app/api/webhooks/razorpay/route.ts:36", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 _disabled/app/api/webhooks/razorpay/route.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-bd91414eb371323c", "name": "Stray `console.log` in TS/JS \u2014 _disabled/app/api/webhooks/whatsapp/route.ts:28", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 _disabled/app/api/webhooks/whatsapp/route.ts:28"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-263d7095682e9f35", "name": "Stray `console.log` in TS/JS \u2014 _disabled/app/api/webhooks/instagram/route.ts:70", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 _disabled/app/api/webhooks/instagram/route.ts:70"}, "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-38cbc44cf67a97a2", "name": "Stray `console.log` in TS/JS \u2014 scratch/test_meta_webhook.js:10", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scratch/test_meta_webhook.js:10"}, "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-abcc1926f59a86d7", "name": "Stray `console.log` in TS/JS \u2014 scratch/list_tenants.js:16", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scratch/list_tenants.js:16"}, "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-e1b49af9584c7adc", "name": "Stray `console.log` in TS/JS \u2014 scratch/check_schema.js:9", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scratch/check_schema.js: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-f57a912dc9464339", "name": "Stray `console.log` in TS/JS \u2014 scratch/check_messages.js:9", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scratch/check_messages.js: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-c91f8c9004082b89", "name": "Stray `console.log` in TS/JS \u2014 scratch/check_rls.js:9", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scratch/check_rls.js: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-f05350b13306aff2", "name": "Stray `console.log` in TS/JS \u2014 scratch/check_pub.js:9", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scratch/check_pub.js: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-1b7d9ea9f0b6bcec", "name": "Stray `console.log` in TS/JS \u2014 scratch/check_single_message.js:10", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scratch/check_single_message.js:10"}, "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-d2e68bfa053c2a69", "name": "Stray `console.log` in TS/JS \u2014 src/diagnose_booking.ts:29", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/diagnose_booking.ts:29"}, "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-04339d69fbc7061c", "name": "Stray `console.log` in TS/JS \u2014 src/diagnose_sheets.ts:19", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/diagnose_sheets.ts:19"}, "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-55c77649e88c7f50", "name": "Stray `console.log` in TS/JS \u2014 src/reset_booking_ctx.ts:43", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/reset_booking_ctx.ts:43"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c2a526df909f78af", "name": "Stray `console.log` in TS/JS \u2014 src/diagnose_conv.ts:23", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/diagnose_conv.ts:23"}, "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-a49565009a7ec2f7", "name": "Stray `console.log` in TS/JS \u2014 src/scripts/post-fix-audit.ts:40", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/scripts/post-fix-audit.ts:40"}, "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-754920e0092af31f", "name": "Stray `console.log` in TS/JS \u2014 src/scripts/concurrency-simulation.ts:83", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/scripts/concurrency-simulation.ts:83"}, "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-1f970196b68baeb1", "name": "Stray `console.log` in TS/JS \u2014 src/scripts/rotateEncryption.ts:76", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/scripts/rotateEncryption.ts:76"}, "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-f31bd88d0481c9ae", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/page.tsx:74", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/page.tsx:74"}, "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-af4b3cb4514878b4", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/layout.tsx:80", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/layout.tsx:80"}, "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-b54a0827d3ca0bb5", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/integrations/google-sheets/callback/route.ts:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/integrations/google-sheets/callback/route.ts:11"}, "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-5615488983dc3169", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/auth/verify-otp/route.ts:76", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/auth/verify-otp/route.ts:76"}, "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-a1f0ca763ea1ec61", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/auth/callback/route.ts:137", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/auth/callback/route.ts:137"}, "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-db8bf08d7c2184ee", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/auth/signup/route.ts:52", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/auth/signup/route.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-a51918ee57f3f718", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/auth/provision/route.ts:79", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/auth/provision/route.ts:79"}, "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-cbcd2415191e14de", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/auth/send-otp/route.ts:157", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/auth/send-otp/route.ts:157"}, "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-2b2c35d66501a720", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/data-deletion/route.ts:87", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/data-deletion/route.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-88ed666cc550cd40", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/broadcast/launch/route.ts:36", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/broadcast/launch/route.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-c069b3c7df85d0e1", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/broadcast/webhook/route.ts:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/broadcast/webhook/route.ts:17"}, "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-e0be60e0c22f0068", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/broadcast/test/route.ts:72", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/broadcast/test/route.ts: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-d8967cd4b68f1155", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/broadcast/campaign/route.ts:141", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/broadcast/campaign/route.ts:141"}, "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-b5b654b2a40b7776", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/broadcast/campaign/[id]/retry-now/route.ts:68", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/broadcast/campaign/[id]/retry-now/route.ts:68"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a154251a6f8bb702", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/broadcast/campaign/[id]/cancel/route.ts:89", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/broadcast/campaign/[id]/cancel/route.ts:89"}, "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-2813f7436be278d4", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/broadcast/process-queue/route.ts:54", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/broadcast/process-queue/route.ts:54"}, "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-37540bb18b182036", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/settings/route.ts:155", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/settings/route.ts:155"}, "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-0cfd4b99af861188", "name": "React Flow edge with `label=` but no project-wide edge-label CSS override \u2014 src/app/api/dashboard/flows/generate/route.t", "shortDescription": {"text": "React Flow edge with `label=` but no project-wide edge-label CSS override \u2014 src/app/api/dashboard/flows/generate/route.ts:201"}, "fullDescription": {"text": "React Flow edge labels render with a white rectangle behind the text by default, which scatters bright boxes across a dark canvas. Either drop the label, or override `.react-flow__edge-textbg` and `.react-flow__edge-text` in your stylesheet.\n\nWhy: P-H in CHECKLIST.md \u2014 vendor edge labels bleed white through a dark canvas.\nRule id: fq.edge-label.no-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f719c501433c96fd", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/playground/route.ts:130", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/playground/route.ts:130"}, "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-c0b739b3e87633f6", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/playground/reset/route.ts:24", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/playground/reset/route.ts:24"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4b228ccc3dc4c32b", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/chat/delete-message/route.ts:76", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/chat/delete-message/route.ts:76"}, "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-8e75349a4632909c", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/chat/summary/route.ts:50", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/chat/summary/route.ts: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-052ea22681c8d061", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/templates/upload/route.ts:27", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/templates/upload/route.ts:27"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-346eb3152337833f", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/chat/upload/route.ts:271", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/chat/upload/route.ts:271"}, "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-2d49325088685f41", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/chat/save-booking/route.ts:144", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/chat/save-booking/route.ts:144"}, "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-6065fdde4f3288a7", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/chat/send-template/route.ts:76", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/chat/send-template/route.ts:76"}, "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-7ca209f05d86b1b4", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/chat/copy-proxy/route.ts:12", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/chat/copy-proxy/route.ts:12"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ba3afa8e1f64547e", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/provision/route.ts:162", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/provision/route.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-3f035ad620c428dc", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/scheduled-flows/route.ts:27", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/scheduled-flows/route.ts:27"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c5fc86a0433f6699", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/timeout/route.ts:38", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/timeout/route.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-cb0b664793d0e4e2", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/review-requests/route.ts:108", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/review-requests/route.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-881dd57191867227", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/birthday-greetings/route.ts:92", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/birthday-greetings/route.ts:92"}, "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-814ba146af58f8f9", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/expire-bookings/route.ts:23", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/expire-bookings/route.ts:23"}, "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-7b02bfffe71b82f4", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/instagram-refresh/route.ts:34", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/instagram-refresh/route.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-009d75ec9f69e7d5", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/restaurant/route.ts:105", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/restaurant/route.ts:105"}, "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-dafdfcdc8d1efb4c", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/process-deletions/route.ts:91", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/process-deletions/route.ts:91"}, "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-49115517c07b2e4e", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/reset-counters/route.ts:44", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/reset-counters/route.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-229c892936e70ef7", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/broadcasts/test-send/route.ts:59", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/broadcasts/test-send/route.ts:59"}, "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-b0d2bb4c248b0b54", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/restaurant/cron/cleanup/route.ts:42", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/restaurant/cron/cleanup/route.ts:42"}, "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-d72da4356599641c", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/webhooks/razorpay/route.ts:66", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/webhooks/razorpay/route.ts:66"}, "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-776f9f3c4c3f8d94", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/webhooks/meta-leads/route.ts:83", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/webhooks/meta-leads/route.ts:83"}, "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-4bedc12c17652aa4", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/webhooks/whatsapp/route.ts:43", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/webhooks/whatsapp/route.ts:43"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ea04df9576483934", "name": "React Flow <MiniMap> without dark background \u2014 src/app/dashboard/flows/_components/FlowCanvas.tsx:416", "shortDescription": {"text": "React Flow <MiniMap> without dark background \u2014 src/app/dashboard/flows/_components/FlowCanvas.tsx:416"}, "fullDescription": {"text": "A bare <MiniMap> renders with the vendor's white default in dark themes. Wrap the canvas in a class that overrides `.react-flow__minimap` background, or pass an explicit `style`/`maskColor`/`bgColor`.\n\nWhy: P1 in CHECKLIST.md \u2014 vendor defaults bleed light through.\nRule id: fq.minimap.no-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5b98558aadc42341", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/flows/_components/FlowInspector.tsx:1584", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/flows/_components/FlowInspector.tsx:1584"}, "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-7b5c0ac78a00516f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/flows/_components/FlowSimulator.tsx:195", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/flows/_components/FlowSimulator.tsx:195"}, "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-3062bb7f547b06ee", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/flows/_components/VariableTextarea.tsx:232", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/flows/_components/VariableTextarea.tsx:232"}, "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-5c1da06f8a65f2d6", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/flows/_components/FlowSidebar.tsx:390", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/flows/_components/FlowSidebar.tsx:390"}, "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-0cf768d87c320934", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/dashboard/flows/_components/FlowSidebar.tsx:256", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/dashboard/flows/_components/FlowSidebar.tsx:256"}, "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-03ccec23405d50ff", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/operations/_components/AgentPerformanceStatus.tsx", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/operations/_components/AgentPerformanceStatus.tsx:194"}, "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-ea7ad24e4323c7da", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/operations/_components/LiveActivityFeed.tsx:154", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/operations/_components/LiveActivityFeed.tsx:154"}, "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-053a9ed4a4f2153b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/leads/_components/LeadsClient.tsx:237", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/leads/_components/LeadsClient.tsx:237"}, "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-d788e50ca99b5938", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/broadcast/_components/AudienceBuilder.tsx:367", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/broadcast/_components/AudienceBuilder.tsx:367"}, "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-3d57f34555f4bf95", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/broadcast/_components/ContactPickerDrawer.tsx:161", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/broadcast/_components/ContactPickerDrawer.tsx:161"}, "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-595ab40f4f0f59f3", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/broadcast/_components/BroadcastBuilder.tsx:730", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/broadcast/_components/BroadcastBuilder.tsx:730"}, "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-516bad3a4ded77ec", "name": "Stray `console.log` in TS/JS \u2014 src/app/dashboard/broadcast/_components/BroadcastBuilder.tsx:284", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/dashboard/broadcast/_components/BroadcastBuilder.tsx:284"}, "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-e92d198db5008fd7", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/broadcast/_components/BroadcastPerformanceCard.ts", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/broadcast/_components/BroadcastPerformanceCard.tsx:106"}, "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-6cd2e13faaaf285c", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/broadcast/_components/TemplateSelector.tsx:245", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/broadcast/_components/TemplateSelector.tsx:245"}, "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-f1a56d1fee4e5f23", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/broadcast/_components/LaunchSafetyModal.tsx:112", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/broadcast/_components/LaunchSafetyModal.tsx:112"}, "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-80648db0d3636446", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/broadcast/_components/RecipientDrawer.tsx:369", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/broadcast/_components/RecipientDrawer.tsx:369"}, "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-0a3944ce37cb2cef", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/broadcast/_components/CampaignReview.tsx:283", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/broadcast/_components/CampaignReview.tsx:283"}, "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-a87585132c7b515f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/broadcast/_components/WhatsAppPreview.tsx:251", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/broadcast/_components/WhatsAppPreview.tsx:251"}, "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-6dfe3781a0a9b407", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/broadcast/_components/VariableMapper.tsx:167", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/broadcast/_components/VariableMapper.tsx:167"}, "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-28ea9b9c287c1164", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/broadcast/_components/BroadcastClient.tsx:162", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/broadcast/_components/BroadcastClient.tsx:162"}, "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-0cada7f89a0e682f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/broadcast/_components/BroadcastPanel.tsx:214", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/broadcast/_components/BroadcastPanel.tsx:214"}, "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-7403cda27b00fa62", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/team/_components/TeamClient.tsx:196", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/team/_components/TeamClient.tsx:196"}, "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-553b1cc0ebd282ce", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/_layout/AppSidebar.tsx:341", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/_layout/AppSidebar.tsx:341"}, "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-c480d94c69b18e6f", "name": "Stray `console.log` in TS/JS \u2014 src/app/dashboard/chat/ChatArea.tsx:344", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/dashboard/chat/ChatArea.tsx:344"}, "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-767aedeef06e7775", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/chat/AttachmentBubble.tsx:248", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/chat/AttachmentBubble.tsx:248"}, "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-695dce00d5e1e473", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/chat/CRMPanel.tsx:389", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/chat/CRMPanel.tsx:389"}, "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-7d365b0bb6a0a3e4", "name": "Stray `console.log` in TS/JS \u2014 src/app/dashboard/chat/ChatSidebar.tsx:176", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/dashboard/chat/ChatSidebar.tsx: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-026474b766c59fd8", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/templates/_components/ValidationPanel.tsx:509", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/templates/_components/ValidationPanel.tsx:509"}, "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-71a8ac99ed7a57ba", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/templates/_components/TemplateLibrary.tsx:93", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/templates/_components/TemplateLibrary.tsx:93"}, "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-b93ebd966a82b855", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/templates/_components/TemplateStudio.tsx:198", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/templates/_components/TemplateStudio.tsx:198"}, "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-faad61d36b0bc3ad", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/templates/_components/MediaUpload.tsx:193", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/templates/_components/MediaUpload.tsx:193"}, "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-091f9b050102816c", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/templates/_components/TemplateList.tsx:208", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/templates/_components/TemplateList.tsx:208"}, "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-9c3d12f93b09404a", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/templates/_components/WhatsAppPreview.tsx:82", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/templates/_components/WhatsAppPreview.tsx:82"}, "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-39049b3ed0665a30", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/templates/_components/sections/ButtonBuilder.tsx:", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/templates/_components/sections/ButtonBuilder.tsx:143"}, "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-1896b4d292fbb3f0", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/logs/page.tsx:128", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/logs/page.tsx:128"}, "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-c899832293a5587c", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/logs/_components/LogsClient.tsx:115", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/logs/_components/LogsClient.tsx:115"}, "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-895e85a245dc2eeb", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/admin/onboard/_components/OnboardClient.tsx:200", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/admin/onboard/_components/OnboardClient.tsx:200"}, "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-468acadb3add677a", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/admin/approvals/_components/ApprovalsClient.tsx:1", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/admin/approvals/_components/ApprovalsClient.tsx:108"}, "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-8a1549f19404e782", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/agents/page.tsx:1488", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/agents/page.tsx:1488"}, "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-ab3b293cc7227e5b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/agents/_components/AgentsClient.tsx:199", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/agents/_components/AgentsClient.tsx:199"}, "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-587444ad919f0103", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/system/status/page.tsx:106", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/system/status/page.tsx:106"}, "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-913e20d76b91fc4f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/system/dead-letter/page.tsx:113", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/system/dead-letter/page.tsx:113"}, "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-9e783d1fea1cdb17", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/campaigns/_components/CampaignsClient.tsx:167", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/campaigns/_components/CampaignsClient.tsx:167"}, "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-52718213d3836475", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/contacts/_components/ContactsClient.tsx:945", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/contacts/_components/ContactsClient.tsx:945"}, "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-aac5bb5e560f3ba6", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/automations/_components/AutomationsClient.tsx:264", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/automations/_components/AutomationsClient.tsx:264"}, "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-a63e444f431b9a16", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/restaurant/guests/_components/GuestsClient.tsx:36", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/restaurant/guests/_components/GuestsClient.tsx:366"}, "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-1d172b4f8c1c39cf", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/restaurant/bookings/_components/BookingsClient.ts", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/restaurant/bookings/_components/BookingsClient.tsx:641"}, "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-c76909e5602eebc0", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/restaurant/bookings/_components/GuestProfilePanel", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/restaurant/bookings/_components/GuestProfilePanel.tsx:111"}, "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-6c75b0fed6b70ff6", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/restaurant/bookings/_components/ArrivingNextWidge", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/restaurant/bookings/_components/ArrivingNextWidget.tsx:119"}, "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-becd950dbf13490d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/restaurant/tables/_components/TablesClient.tsx:10", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/restaurant/tables/_components/TablesClient.tsx:105"}, "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-d6b39cd65635a8c9", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/restaurant/waitlist/_components/WaitlistClient.ts", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/restaurant/waitlist/_components/WaitlistClient.tsx:248"}, "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-e837986c3af59aa2", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/restaurant/_components/RestaurantOverviewClient.t", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/restaurant/_components/RestaurantOverviewClient.tsx:155"}, "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-cca83a47b1d7916f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/_sections/RecentChats.tsx:116", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/_sections/RecentChats.tsx:116"}, "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-3b735ed846217bda", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/_sections/DashboardMetrics.tsx:113", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/_sections/DashboardMetrics.tsx:113"}, "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-fa98bac09f65ac59", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/_sections/TeamActivity.tsx:65", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/_sections/TeamActivity.tsx:65"}, "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-3c53c733ff12bcfc", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/meta-ads/_components/MetaAdsLeadsClient.tsx:174", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/meta-ads/_components/MetaAdsLeadsClient.tsx:174"}, "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-69e1da0a1214f33e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/meta-ads/_components/MetaAdsSettingsClient.tsx:78", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/meta-ads/_components/MetaAdsSettingsClient.tsx:78"}, "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-99662949a2a3f0b8", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/meta-ads/_components/MetaAdsDashboardClient.tsx:2", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/meta-ads/_components/MetaAdsDashboardClient.tsx:267"}, "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-f0a82bdfa7102c03", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/preview/tables/TablesDemo.tsx:126", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/preview/tables/TablesDemo.tsx:126"}, "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-0f5a72b1cf35e750", "name": "Stray `console.log` in TS/JS \u2014 src/lib/integrations/meta-capi.ts:148", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/integrations/meta-capi.ts:148"}, "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-9a5d7c3ce6fe33b5", "name": "Stray `console.log` in TS/JS \u2014 src/lib/integrations/runner.ts:46", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/integrations/runner.ts:46"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9675a40241b54eaf", "name": "Stray `console.log` in TS/JS \u2014 src/lib/integrations/google-sheets.ts:43", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/integrations/google-sheets.ts:43"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e11d14ef3dd702d6", "name": "Stray `console.log` in TS/JS \u2014 src/lib/flows/engine.ts:291", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/flows/engine.ts:291"}, "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-c71708e2f7d65e83", "name": "Stray `console.log` in TS/JS \u2014 src/lib/ai/client.ts:28", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/ai/client.ts:28"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a2b3cb5feb09bb6c", "name": "Stray `console.log` in TS/JS \u2014 src/lib/ai/engine.ts:488", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/ai/engine.ts:488"}, "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-aedb71836a70ba38", "name": "Stray `console.log` in TS/JS \u2014 src/lib/followup/engine.ts:55", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/followup/engine.ts:55"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9153272c5b06930b", "name": "Stray `console.log` in TS/JS \u2014 src/lib/auth/getTenantId.ts:36", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/auth/getTenantId.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-ee0a5ae536977b0a", "name": "Stray `console.log` in TS/JS \u2014 src/lib/broadcast/queue.ts:109", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/broadcast/queue.ts:109"}, "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-736b5f570abdd651", "name": "Stray `console.log` in TS/JS \u2014 src/lib/broadcast/services/automation-engine.service.ts:27", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/broadcast/services/automation-engine.service.ts:27"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c6e75b5ad6b86d44", "name": "Stray `console.log` in TS/JS \u2014 src/lib/broadcast/services/scheduler.service.ts:25", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/broadcast/services/scheduler.service.ts:25"}, "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-aabc5b037466991d", "name": "Stray `console.log` in TS/JS \u2014 src/lib/broadcast/services/audit-log.service.ts:71", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/broadcast/services/audit-log.service.ts:71"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3cbb80480222cc29", "name": "Stray `console.log` in TS/JS \u2014 src/lib/broadcast/services/telemetry.service.ts:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/broadcast/services/telemetry.service.ts:15"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7b0d38217c6ca7c0", "name": "Stray `console.log` in TS/JS \u2014 src/lib/broadcast/services/execution-event.service.ts:47", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/broadcast/services/execution-event.service.ts:47"}, "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-522fb05dd17170d5", "name": "Stray `console.log` in TS/JS \u2014 src/lib/broadcast/services/broadcast-engine.service.ts:193", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/broadcast/services/broadcast-engine.service.ts:193"}, "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-12247cc677087599", "name": "Stray `console.log` in TS/JS \u2014 src/lib/meta/service.ts:630", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/meta/service.ts:630"}, "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-11abd98ef04335c7", "name": "Stray `console.log` in TS/JS \u2014 src/lib/billing/razorpay.ts:150", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/billing/razorpay.ts:150"}, "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-16ee0c6826746720", "name": "Stray `console.log` in TS/JS \u2014 src/lib/failsafe/index.ts:31", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/failsafe/index.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-44111b3b005f8f5c", "name": "Stray `console.log` in TS/JS \u2014 src/lib/idempotency/index.ts:56", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/idempotency/index.ts:56"}, "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-c003cf80ce8affd5", "name": "Stray `console.log` in TS/JS \u2014 src/lib/whatsapp/sendMessage.ts:125", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/whatsapp/sendMessage.ts:125"}, "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-50080aea7239df57", "name": "Stray `console.log` in TS/JS \u2014 src/lib/instagram/processor.ts:48", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/instagram/processor.ts:48"}, "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-7a0b17bf434f87e8", "name": "Stray `console.log` in TS/JS \u2014 src/lib/tenant/manager.ts:165", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/tenant/manager.ts:165"}, "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-529ea00cb5df1008", "name": "Dockerfile runs as root: voice-agent/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: voice-agent/Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-28479fd44db19d22", "name": "Docker base image is tag-pinned but not digest-pinned: python:3.11-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.11-slim"}, "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-efbf642f2586768c", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/page.tsx:74", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/page.tsx:74"}, "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-7203569ec239f820", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/layout.tsx:80", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/layout.tsx:80"}, "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-6477ecc43a2be52e", "name": "Insecure pattern 'cors_wildcard' in src/app/api/chat/copy-proxy/route.ts:22", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in src/app/api/chat/copy-proxy/route.ts:22"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-17c9686e8a6b58de", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/dashboard/flows/_components/FlowSidebar.tsx:256", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/dashboard/flows/_components/FlowSidebar.tsx:256"}, "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-93e4dea9b87378e2", "name": "Very large file: src/app/api/webhooks/whatsapp/route.ts (2155 lines)", "shortDescription": {"text": "Very large file: src/app/api/webhooks/whatsapp/route.ts (2155 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-86be1b04c35d3fd8", "name": "Very large file: src/app/dashboard/settings/page.tsx (1236 lines)", "shortDescription": {"text": "Very large file: src/app/dashboard/settings/page.tsx (1236 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-3ac339c6845f2428", "name": "Very large file: src/app/dashboard/flows/_components/FlowInspector.tsx (1604 lines)", "shortDescription": {"text": "Very large file: src/app/dashboard/flows/_components/FlowInspector.tsx (1604 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-aa3704eb8c327409", "name": "Very large file: src/app/dashboard/chat/ChatArea.tsx (1850 lines)", "shortDescription": {"text": "Very large file: src/app/dashboard/chat/ChatArea.tsx (1850 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-b159d5472878300d", "name": "Very large file: src/app/dashboard/agents/page.tsx (1818 lines)", "shortDescription": {"text": "Very large file: src/app/dashboard/agents/page.tsx (1818 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-f14f2b4b36b490f3", "name": "Very large file: src/app/dashboard/contacts/_components/ContactsClient.tsx (1450 lines)", "shortDescription": {"text": "Very large file: src/app/dashboard/contacts/_components/ContactsClient.tsx (1450 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-974538fa2daac3fe", "name": "Very large file: src/app/dashboard/restaurant/bookings/_components/BookingsClient.tsx (1050 lines)", "shortDescription": {"text": "Very large file: src/app/dashboard/restaurant/bookings/_components/BookingsClient.tsx (1050 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-ca2fb90217d1bfa4", "name": "Very large file: src/app/_components/LandingPageClient.tsx (3411 lines)", "shortDescription": {"text": "Very large file: src/app/_components/LandingPageClient.tsx (3411 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-bac915e1bd141fd4", "name": "Very large file: src/lib/flows/engine.ts (1579 lines)", "shortDescription": {"text": "Very large file: src/lib/flows/engine.ts (1579 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "24 test file(s) for 495 source file(s) (ratio 0.05). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 447 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 293 placeholder/mock markers across 71 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9d79c4077342a7d0", "name": "Runtime service client appears to use placeholder configuration", "shortDescription": {"text": "Runtime service client appears to use placeholder configuration"}, "fullDescription": {"text": "A runtime source file appears to wire Supabase/Firebase/AI/payment-style clients to placeholder URLs, keys, or fallback values. In the Fable corpus this often means the UI/API shape is present while the backend service is not actually configured."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-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. 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-e725d2ab884fbd49", "name": "Multiple root agent instruction files without precedence", "shortDescription": {"text": "Multiple root agent instruction files without precedence"}, "fullDescription": {"text": "The repo has multiple top-level AI-coder instruction files. Without precedence rules, different agents may follow different policies."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-61cb58c9c190e0bc", "name": "Commented-code block (6 lines) in middleware.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in middleware.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-8c7c1a370aaf73a4", "name": "Commented-code block (7 lines) in worker.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in worker.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-749bd4c08c90cb74", "name": "Commented-code block (9 lines) in tests/engine-hardening.test.ts:1", "shortDescription": {"text": "Commented-code block (9 lines) in tests/engine-hardening.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-2966b0b69a2428cd", "name": "Legacy-named symbol `promo_v1` in tests/broadcast-trust-v4-1.test.ts:115", "shortDescription": {"text": "Legacy-named symbol `promo_v1` in tests/broadcast-trust-v4-1.test.ts:115"}, "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-26ea431f1c6f3573", "name": "Legacy-named symbol `20260604_hospitality_os_v1` in scripts/check-migrations.mjs:67", "shortDescription": {"text": "Legacy-named symbol `20260604_hospitality_os_v1` in scripts/check-migrations.mjs:67"}, "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-7e32c34e777dfad0", "name": "Commented-code block (6 lines) in scripts/check-migrations.mjs:9", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/check-migrations.mjs: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-34ab42c1605a9625", "name": "Commented-code block (7 lines) in _disabled/DashboardShell.original.tsx:3", "shortDescription": {"text": "Commented-code block (7 lines) in _disabled/DashboardShell.original.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-74c9c6f21de7aa00", "name": "Commented-code block (6 lines) in _disabled/app/api/admin/overview/route.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in _disabled/app/api/admin/overview/route.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9bd5c433f9c4b7bc", "name": "Commented-code block (5 lines) in _disabled/app/api/calls/outbound/route.ts:15", "shortDescription": {"text": "Commented-code block (5 lines) in _disabled/app/api/calls/outbound/route.ts:15"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-075a7315a6194d01", "name": "`fetch()` without try/.catch or AbortSignal \u2014 _disabled/app/api/calls/outbound/route.ts:88", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 _disabled/app/api/calls/outbound/route.ts:88"}, "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-f3b93b6513a71b09", "name": "Commented-code block (7 lines) in _disabled/app/api/cron/timeout/route.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in _disabled/app/api/cron/timeout/route.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-77d16778ddece1f2", "name": "Commented-code block (5 lines) in voice-agent/calendar_tools.py:90", "shortDescription": {"text": "Commented-code block (5 lines) in voice-agent/calendar_tools.py:90"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-65d16c7273199692", "name": "Commented-code block (5 lines) in voice-agent/agent.py:320", "shortDescription": {"text": "Commented-code block (5 lines) in voice-agent/agent.py:320"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-457dff5e35867a93", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/diagnose_sheets.ts:52", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/diagnose_sheets.ts:52"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-813b2eca51110fe5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/run-concurrency-test.mjs:27", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/run-concurrency-test.mjs:27"}, "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-1d2623c21f467ae6", "name": "Commented-code block (8 lines) in src/scripts/concurrency-simulation.ts:1", "shortDescription": {"text": "Commented-code block (8 lines) in src/scripts/concurrency-simulation.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-1af1b806eecb85cd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/concurrency-simulation.ts:72", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/concurrency-simulation.ts:72"}, "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-c4475bc3283038e1", "name": "Commented-code block (6 lines) in src/scripts/rotateEncryption.ts:11", "shortDescription": {"text": "Commented-code block (6 lines) in src/scripts/rotateEncryption.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-1f9f7d2f6005e26c", "name": "Commented-code block (9 lines) in src/app/api/flows/trigger/[token]/route.ts:1", "shortDescription": {"text": "Commented-code block (9 lines) in src/app/api/flows/trigger/[token]/route.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-39c5c7ca2e4eb3ac", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/auth/google/callback/route.ts:37", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/auth/google/callback/route.ts:37"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f59dc90d5c3d619a", "name": "Commented-code block (5 lines) in src/app/api/auth/callback/route.ts:25", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/auth/callback/route.ts:25"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e34b3bdf6fe65e61", "name": "Commented-code block (9 lines) in src/app/api/auth/signup/route.ts:1", "shortDescription": {"text": "Commented-code block (9 lines) in src/app/api/auth/signup/route.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c56836c218c236c1", "name": "Commented-code block (7 lines) in src/app/api/auth/send-otp/route.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/api/auth/send-otp/route.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c8d49cce0cf10de0", "name": "Commented-code block (7 lines) in src/app/api/broadcast/health/route.ts:5", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/api/broadcast/health/route.ts:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ea46a11d76369977", "name": "Commented-code block (8 lines) in src/app/api/dashboard/flows/[id]/simulate/route.ts:1", "shortDescription": {"text": "Commented-code block (8 lines) in src/app/api/dashboard/flows/[id]/simulate/route.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ec692244871b1633", "name": "Commented-code block (7 lines) in src/app/api/dashboard/playground/route.ts:99", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/api/dashboard/playground/route.ts:99"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-add34c61c47bc735", "name": "Commented-code block (10 lines) in src/app/api/dashboard/leads/export/route.ts:1", "shortDescription": {"text": "Commented-code block (10 lines) in src/app/api/dashboard/leads/export/route.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4fb9e0cea9b2cf8a", "name": "Commented-code block (7 lines) in src/app/api/dashboard/data-deletion/route.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/api/dashboard/data-deletion/route.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8fb6930a0a9b217f", "name": "Commented-code block (6 lines) in src/app/api/dashboard/chat/conversations/route.ts:13", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/dashboard/chat/conversations/route.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-e1d706389fb40f58", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/dashboard/billing/route.ts:23", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/dashboard/billing/route.ts:23"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4d0161e364fc77ff", "name": "Commented-code block (9 lines) in src/app/api/dashboard/scripted-replies/route.ts:1", "shortDescription": {"text": "Commented-code block (9 lines) in src/app/api/dashboard/scripted-replies/route.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f646f7602aa90554", "name": "Commented-code block (7 lines) in src/app/api/dashboard/scripted-replies/upload/route.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/api/dashboard/scripted-replies/upload/route.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-382c698130ae3827", "name": "Commented-code block (6 lines) in src/app/api/dashboard/knowledge/route.ts:99", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/dashboard/knowledge/route.ts:99"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cd38af63a16e68fe", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/chat/copy-proxy/route.ts:13", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/chat/copy-proxy/route.ts:13"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6024cdf7df9ae251", "name": "Commented-code block (8 lines) in src/app/api/admin/provision/route.ts:1", "shortDescription": {"text": "Commented-code block (8 lines) in src/app/api/admin/provision/route.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cd646fc91f493964", "name": "Commented-code block (5 lines) in src/app/api/cron/birthday-greetings/route.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/cron/birthday-greetings/route.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ac8e3c51836380ce", "name": "Commented-code block (5 lines) in src/app/api/restaurant/blocked-dates/route.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/restaurant/blocked-dates/route.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-81c6d7d021ee7a66", "name": "Commented-code block (5 lines) in src/app/api/restaurant/bookings/route.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/restaurant/bookings/route.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-83170797f04be293", "name": "Commented-code block (5 lines) in src/app/api/restaurant/bookings/import/route.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/restaurant/bookings/import/route.ts:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0097a554982b148d", "name": "Commented-code block (13 lines) in src/app/api/restaurant/bookings/confirm/route.ts:1", "shortDescription": {"text": "Commented-code block (13 lines) in src/app/api/restaurant/bookings/confirm/route.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-54c320fe751c0744", "name": "Commented-code block (5 lines) in src/app/api/restaurant/slots/route.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/restaurant/slots/route.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6fbeff83e11bcc56", "name": "Commented-code block (7 lines) in src/app/api/restaurant/slots/check-availability/route.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/api/restaurant/slots/check-availability/route.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c3bc98b174d57c61", "name": "Commented-code block (8 lines) in src/app/api/restaurant/slots/lock/route.ts:1", "shortDescription": {"text": "Commented-code block (8 lines) in src/app/api/restaurant/slots/lock/route.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e2d4f8409e8b1357", "name": "Commented-code block (5 lines) in src/app/api/restaurant/tables/route.ts:13", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/restaurant/tables/route.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-2d0365c11a43cb91", "name": "Commented-code block (7 lines) in src/app/api/webhooks/meta-leads/route.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/api/webhooks/meta-leads/route.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3805a1d7ec4ed967", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/webhooks/meta-leads/route.ts:125", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/webhooks/meta-leads/route.ts:125"}, "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-8a334845a8cb82b7", "name": "Commented-code block (7 lines) in src/app/api/webhooks/whatsapp/route.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/api/webhooks/whatsapp/route.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-754915c4a5792a10", "name": "Commented-code block (6 lines) in src/app/api/meta-ads/notifications/route.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/meta-ads/notifications/route.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8159941522c444a5", "name": "Commented-code block (7 lines) in src/app/api/meta-ads/connect/route.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/api/meta-ads/connect/route.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d736119be75bd5fa", "name": "Commented-code block (8 lines) in src/app/api/meta-ads/analytics/route.ts:1", "shortDescription": {"text": "Commented-code block (8 lines) in src/app/api/meta-ads/analytics/route.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e1120746a47ef69c", "name": "Commented-code block (10 lines) in src/app/api/meta-ads/callback/route.ts:1", "shortDescription": {"text": "Commented-code block (10 lines) in src/app/api/meta-ads/callback/route.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5d79750a554f11fa", "name": "Commented-code block (6 lines) in src/app/api/meta-ads/accounts/route.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/meta-ads/accounts/route.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1c40cb3aa1a99d99", "name": "Commented-code block (7 lines) in src/app/api/meta-ads/status/route.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/api/meta-ads/status/route.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d4809238f2b8b34d", "name": "Commented-code block (8 lines) in src/app/api/meta-ads/cron/route.ts:1", "shortDescription": {"text": "Commented-code block (8 lines) in src/app/api/meta-ads/cron/route.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c95f208dc930f3a6", "name": "Commented-code block (7 lines) in src/app/api/meta-ads/campaigns/route.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/api/meta-ads/campaigns/route.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b6bcadb4dd1b7e76", "name": "Commented-code block (6 lines) in src/app/api/meta-ads/targeting/route.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/meta-ads/targeting/route.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d82f28b7047aaab9", "name": "Commented-code block (5 lines) in src/app/dashboard/settings/page.tsx:222", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/dashboard/settings/page.tsx:222"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3c91a6bd9c3c1e9f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/settings/page.tsx:459", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/settings/page.tsx:459"}, "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-7a2865973a344a80", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/flows/store.ts:236", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/flows/store.ts:236"}, "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-44934d53a4ede622", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/flows/page.tsx:57", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/flows/page.tsx:57"}, "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-2bab33b8dbae898d", "name": "Commented-code block (5 lines) in src/app/dashboard/flows/_components/FlowInspector.tsx:72", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/dashboard/flows/_components/FlowInspector.tsx:72"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-46b95b91b550e8e8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/flows/_components/FlowInspector.tsx:994", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/flows/_components/FlowInspector.tsx:994"}, "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-6f70b3051ca2c85a", "name": "Commented-code block (7 lines) in src/app/dashboard/flows/_components/VariableTextarea.tsx:3", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/dashboard/flows/_components/VariableTextarea.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-c9460ed89a776a14", "name": "Commented-code block (6 lines) in src/app/dashboard/broadcast/store/broadcast.store.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/dashboard/broadcast/store/broadcast.store.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-b5fc8475aa7342ff", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/broadcast/_components/ContactPickerDrawer.tsx:74", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/broadcast/_components/ContactPickerDrawer.tsx: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-fb9cc0d76447a2a3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/broadcast/_components/BroadcastBuilder.tsx:474", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/broadcast/_components/BroadcastBuilder.tsx:474"}, "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-0e90aaa481ffced6", "name": "Legacy-named symbol `welcome_offer_v2` in src/app/dashboard/broadcast/_components/BroadcastPanel.tsx:306", "shortDescription": {"text": "Legacy-named symbol `welcome_offer_v2` in src/app/dashboard/broadcast/_components/BroadcastPanel.tsx:306"}, "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-91d60da41bc6b567", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/_layout/MetaAdsNotificationBell.tsx:99", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/_layout/MetaAdsNotificationBell.tsx:99"}, "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-0ef2f91e68b9421a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/chat/ChatArea.tsx:395", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/chat/ChatArea.tsx:395"}, "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-ab447cb088c2c9f2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/admin/onboard/_components/OnboardClient.tsx:134", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/admin/onboard/_components/OnboardClient.tsx:134"}, "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-66c6a798c3672935", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/agents/page.tsx:351", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/agents/page.tsx:351"}, "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-99f322ea6073d9f9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/agents/_components/AgentsClient.tsx:82", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/agents/_components/AgentsClient.tsx:82"}, "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-a691ad81b2da1fdd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/system/dead-letter/page.tsx:51", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/system/dead-letter/page.tsx:51"}, "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-3c6af71f9b093f80", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/contacts/_components/ContactsClient.tsx:169", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/contacts/_components/ContactsClient.tsx:169"}, "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-b5df614ebc2c7bf8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/automations/_components/AutomationsClient.tsx:123", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/automations/_components/AutomationsClient.tsx: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-5819ebbd30ce9cc4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/restaurant/waitlist/_components/WaitlistClient.tsx:63", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/restaurant/waitlist/_components/WaitlistClient.tsx:63"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-edc4f02c0afe10f6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/meta-ads/_components/MetaAdsLeadsClient.tsx:32", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/meta-ads/_components/MetaAdsLeadsClient.tsx:32"}, "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-488ee9a8647a78f8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/meta-ads/_components/CampaignWizardModal.tsx:144", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/meta-ads/_components/CampaignWizardModal.tsx: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-05d993d08b13b4db", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/meta-ads/_components/MetaAdsSettingsClient.tsx:221", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/meta-ads/_components/MetaAdsSettingsClient.tsx:221"}, "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-9c3a01c71165c3ed", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/meta-ads/_components/MetaAdsDashboardClient.tsx:86", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/meta-ads/_components/MetaAdsDashboardClient.tsx:86"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c7f1ef2a3b8a1ed5", "name": "Commented-code block (6 lines) in src/app/signup/page.tsx:8", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/signup/page.tsx:8"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-159afded0298a808", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/signup/page.tsx:127", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/signup/page.tsx:127"}, "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-7d182d0cb08376ae", "name": "Commented-code block (6 lines) in src/app/libra/page.tsx:5", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/libra/page.tsx:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-349d5d6108395bec", "name": "Commented-code block (6 lines) in src/app/onboard/page.tsx:8", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/onboard/page.tsx:8"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-05f3d8dc6f3938af", "name": "Commented-code block (6 lines) in src/lib/env.ts:48", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/env.ts:48"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-548f42ddaf625b24", "name": "Commented-code block (10 lines) in src/lib/brand.ts:1", "shortDescription": {"text": "Commented-code block (10 lines) in src/lib/brand.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-b404907f13fba617", "name": "Commented-code block (10 lines) in src/lib/integrations/google-calendar.ts:1", "shortDescription": {"text": "Commented-code block (10 lines) in src/lib/integrations/google-calendar.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-bf4336e048c69ed2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/integrations/google-calendar.ts:40", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/integrations/google-calendar.ts:40"}, "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-62f7686ac3c2341c", "name": "Commented-code block (6 lines) in src/lib/integrations/capi-trigger.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/integrations/capi-trigger.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-d56752121b19fb9e", "name": "Commented-code block (6 lines) in src/lib/integrations/meta-capi.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/integrations/meta-capi.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-88dd465234be7964", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/integrations/meta-capi.ts:127", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/integrations/meta-capi.ts:127"}, "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-c28231a70249ad89", "name": "Commented-code block (6 lines) in src/lib/integrations/google-sheets.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/integrations/google-sheets.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-b08dc2d1ff88f9ce", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/integrations/google-sheets.ts:46", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/integrations/google-sheets.ts:46"}, "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-b8baadb4fc8ef1d3", "name": "Commented-code block (7 lines) in src/lib/flows/engine.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/flows/engine.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-a03750868613e3cf", "name": "Commented-code block (7 lines) in src/lib/flows/variables.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/flows/variables.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-55f2b58084e58959", "name": "Commented-code block (10 lines) in src/lib/ai/embedding-queue.ts:1", "shortDescription": {"text": "Commented-code block (10 lines) in src/lib/ai/embedding-queue.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-b9c8814dd558a694", "name": "Commented-code block (5 lines) in src/lib/ai/rag.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/ai/rag.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-ba943f50ac497407", "name": "Commented-code block (10 lines) in src/lib/ai/engine.ts:1", "shortDescription": {"text": "Commented-code block (10 lines) in src/lib/ai/engine.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-a8b68ad2a54e88e4", "name": "Commented-code block (6 lines) in src/lib/followup/engine.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/followup/engine.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-438885a0b3d1ce46", "name": "Commented-code block (8 lines) in src/lib/webhook/decisions.ts:4", "shortDescription": {"text": "Commented-code block (8 lines) in src/lib/webhook/decisions.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-e633476e95495375", "name": "Commented-code block (10 lines) in src/lib/broadcast/fetch-leads.ts:1", "shortDescription": {"text": "Commented-code block (10 lines) in src/lib/broadcast/fetch-leads.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-01b0ca93c19ddcc6", "name": "Commented-code block (6 lines) in src/lib/broadcast/services/audience-engine.service.ts:126", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/broadcast/services/audience-engine.service.ts:126"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-34bd82cea50eb47e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/broadcast/services/meta-template-sync.service.ts:54", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/broadcast/services/meta-template-sync.service.ts:54"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5a50894f835d21ac", "name": "Commented-code block (7 lines) in src/lib/utils/ssrf.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/utils/ssrf.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-76afce126b9fa8d6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/utils/ssrf.ts:4", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/utils/ssrf.ts:4"}, "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-d9d4799b199d900f", "name": "Commented-code block (5 lines) in src/lib/utils/crypto.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/utils/crypto.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-57466f22c86b7989", "name": "Commented-code block (15 lines) in src/lib/observability/trace.ts:83", "shortDescription": {"text": "Commented-code block (15 lines) in src/lib/observability/trace.ts:83"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f9d47fc2c951453a", "name": "Commented-code block (9 lines) in src/lib/redis/client.ts:1", "shortDescription": {"text": "Commented-code block (9 lines) in src/lib/redis/client.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-d22d4b70c14c6022", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/redis/client.ts:37", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/redis/client.ts:37"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4f9c364eb8e14177", "name": "Commented-code block (7 lines) in src/lib/meta/service.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/meta/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-1cd8bac3dee17666", "name": "Commented-code block (19 lines) in src/lib/audit/logger.ts:66", "shortDescription": {"text": "Commented-code block (19 lines) in src/lib/audit/logger.ts:66"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ec06c277b1bc3ac4", "name": "Commented-code block (6 lines) in src/lib/billing/razorpay.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/billing/razorpay.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-3bb1fa77c18d5d22", "name": "Commented-code block (7 lines) in src/lib/billing/costProtection.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/billing/costProtection.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-f950ba07e25b88b2", "name": "Commented-code block (7 lines) in src/lib/queue/deadLetter.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/queue/deadLetter.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-1017e1bdc927d25e", "name": "Commented-code block (6 lines) in src/lib/supabase/client.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/supabase/client.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-aacc2497c79f1636", "name": "Commented-code block (6 lines) in src/lib/supabase/admin.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/supabase/admin.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-ccdf57b18db0cc8e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/instagram/service.ts:25", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/instagram/service.ts:25"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6b5e81177fc5aecb", "name": "Commented-code block (9 lines) in src/lib/abuse/prevention.ts:1", "shortDescription": {"text": "Commented-code block (9 lines) in src/lib/abuse/prevention.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-41666118a880e323", "name": "Commented-code block (9 lines) in src/lib/handoff/manager.ts:1", "shortDescription": {"text": "Commented-code block (9 lines) in src/lib/handoff/manager.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-2701f2898576639b", "name": "Commented-code block (7 lines) in src/lib/tenant/manager.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/tenant/manager.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-1f5b6d522b6c455d", "name": "FastAPI POST `trigger_outbound_call` without auth dependency \u2014 voice-agent/ui_server.py:47", "shortDescription": {"text": "FastAPI POST `trigger_outbound_call` without auth dependency \u2014 voice-agent/ui_server.py:47"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-28aad06ba983e18d", "name": "Dangling fetch: GET /api/dashboard/stats (_disabled/dashboard_page_with_recharts.tsx:108)", "shortDescription": {"text": "Dangling fetch: GET /api/dashboard/stats (_disabled/dashboard_page_with_recharts.tsx:108)"}, "fullDescription": {"text": "`_disabled/dashboard_page_with_recharts.tsx:108` calls `GET /api/dashboard/stats` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/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-eae2381ce8baff75", "name": "Dangling fetch: POST /api/auth/logout (_disabled/DashboardShell.original.tsx:93)", "shortDescription": {"text": "Dangling fetch: POST /api/auth/logout (_disabled/DashboardShell.original.tsx:93)"}, "fullDescription": {"text": "`_disabled/DashboardShell.original.tsx:93` calls `POST /api/auth/logout` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/logout`\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-b4f0f03398e25a0f", "name": "Dangling fetch: GET https://graph.instagram.com/refresh_access_token (_disabled/app/api/cron/instagram-refresh/route.ts:", "shortDescription": {"text": "Dangling fetch: GET https://graph.instagram.com/refresh_access_token (_disabled/app/api/cron/instagram-refresh/route.ts:32)"}, "fullDescription": {"text": "`_disabled/app/api/cron/instagram-refresh/route.ts:32` calls `GET https://graph.instagram.com/refresh_access_token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/graph.instagram.com/refresh_access_token`\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-98257533542804cf", "name": "Dangling fetch: GET /api/admin/overview (_disabled/app/admin/page.tsx:82)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/overview (_disabled/app/admin/page.tsx:82)"}, "fullDescription": {"text": "`_disabled/app/admin/page.tsx:82` calls `GET /api/admin/overview` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/overview`\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-04f0b9ed887d1576", "name": "Dangling fetch: GET /api/admin/overview (_disabled/app/admin/analytics/page.tsx:32)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/overview (_disabled/app/admin/analytics/page.tsx:32)"}, "fullDescription": {"text": "`_disabled/app/admin/analytics/page.tsx:32` calls `GET /api/admin/overview` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/overview`\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-1cb4383cbed34d61", "name": "Dangling fetch: GET /api/admin/overview (_disabled/app/admin/clients/page.tsx:47)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/overview (_disabled/app/admin/clients/page.tsx:47)"}, "fullDescription": {"text": "`_disabled/app/admin/clients/page.tsx:47` calls `GET /api/admin/overview` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/overview`\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-8d5036ca2c115ffd", "name": "Dangling fetch: PATCH /api/admin/overview (_disabled/app/admin/clients/page.tsx:64)", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/overview (_disabled/app/admin/clients/page.tsx:64)"}, "fullDescription": {"text": "`_disabled/app/admin/clients/page.tsx:64` calls `PATCH /api/admin/overview` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/overview`\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-95aca41ae57acafe", "name": "Dangling fetch: GET /api/admin/overview (_disabled/app/admin/revenue/page.tsx:29)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/overview (_disabled/app/admin/revenue/page.tsx:29)"}, "fullDescription": {"text": "`_disabled/app/admin/revenue/page.tsx:29` calls `GET /api/admin/overview` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/overview`\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-654b42f0fd0a7fcd", "name": "Dangling fetch: POST https://oauth2.googleapis.com/token (src/diagnose_sheets.ts:52)", "shortDescription": {"text": "Dangling fetch: POST https://oauth2.googleapis.com/token (src/diagnose_sheets.ts:52)"}, "fullDescription": {"text": "`src/diagnose_sheets.ts:52` calls `POST https://oauth2.googleapis.com/token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/oauth2.googleapis.com/token`\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-77819a2a61348c13", "name": "Dangling fetch: GET https://sheets.googleapis.com/v4/spreadsheets/${cfg.spreadsheet_id}?fields=sheets.properties.title (", "shortDescription": {"text": "Dangling fetch: GET https://sheets.googleapis.com/v4/spreadsheets/${cfg.spreadsheet_id}?fields=sheets.properties.title (src/diagnose_sheets.ts:88)"}, "fullDescription": {"text": "`src/diagnose_sheets.ts:88` calls `GET https://sheets.googleapis.com/v4/spreadsheets/${cfg.spreadsheet_id}?fields=sheets.properties.title` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/sheets.googleapis.com/v4/spreadsheets/<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-05dc8079f415ed3f", "name": "Dangling fetch: POST https://sheets.googleapis.com/v4/spreadsheets/${cfg.spreadsheet_id}/values/${encodeURIComponent(app", "shortDescription": {"text": "Dangling fetch: POST https://sheets.googleapis.com/v4/spreadsheets/${cfg.spreadsheet_id}/values/${encodeURIComponent(appendRange)}:append?valueInputOption=USER_ENTERED&insertDataOption=INSERT_ROWS (src/diagnose_sheets.ts:106)"}, "fullDescription": {"text": "`src/diagnose_sheets.ts:106` calls `POST https://sheets.googleapis.com/v4/spreadsheets/${cfg.spreadsheet_id}/values/${encodeURIComponent(appendRange)}:append?valueInputOption=USER_ENTERED&insertDataOption=INSERT_ROWS` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/sheets.googleapis.com/v4/spreadsheets/<p>/values/<p>/<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-299744e5416c66e7", "name": "Dangling fetch: POST /api/auth/verify-otp (src/app/login/page.tsx:101)", "shortDescription": {"text": "Dangling fetch: POST /api/auth/verify-otp (src/app/login/page.tsx:101)"}, "fullDescription": {"text": "`src/app/login/page.tsx:101` calls `POST /api/auth/verify-otp` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/verify-otp`\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-3b9c11d918e02cc8", "name": "Dangling fetch: POST https://oauth2.googleapis.com/token (src/app/api/auth/google/callback/route.ts:37)", "shortDescription": {"text": "Dangling fetch: POST https://oauth2.googleapis.com/token (src/app/api/auth/google/callback/route.ts:37)"}, "fullDescription": {"text": "`src/app/api/auth/google/callback/route.ts:37` calls `POST https://oauth2.googleapis.com/token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/oauth2.googleapis.com/token`\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-3701d83daf658695", "name": "Dangling fetch: GET https://graph.facebook.com/v20.0/${leadgenId}?access_token=${systemToken} (src/app/api/webhooks/meta", "shortDescription": {"text": "Dangling fetch: GET https://graph.facebook.com/v20.0/${leadgenId}?access_token=${systemToken} (src/app/api/webhooks/meta-leads/route.ts:125)"}, "fullDescription": {"text": "`src/app/api/webhooks/meta-leads/route.ts:125` calls `GET https://graph.facebook.com/v20.0/${leadgenId}?access_token=${systemToken}` 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/v20.0/<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-da57a3399d28940a", "name": "Dangling fetch: PUT /api/dashboard/integrations (src/app/dashboard/integrations/_components/IntegrationsClient.tsx:197)", "shortDescription": {"text": "Dangling fetch: PUT /api/dashboard/integrations (src/app/dashboard/integrations/_components/IntegrationsClient.tsx:197)"}, "fullDescription": {"text": "`src/app/dashboard/integrations/_components/IntegrationsClient.tsx:197` calls `PUT /api/dashboard/integrations` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/integrations`\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-2b8692a1808d2630", "name": "Dangling fetch: DELETE /api/dashboard/integrations?id=${integration.id} (src/app/dashboard/integrations/_components/Inte", "shortDescription": {"text": "Dangling fetch: DELETE /api/dashboard/integrations?id=${integration.id} (src/app/dashboard/integrations/_components/IntegrationsClient.tsx:215)"}, "fullDescription": {"text": "`src/app/dashboard/integrations/_components/IntegrationsClient.tsx:215` calls `DELETE /api/dashboard/integrations?id=${integration.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/integrations`\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-9d0ea3911c3e91e4", "name": "Dangling fetch: GET /api/dashboard/integrations (src/app/dashboard/integrations/_components/IntegrationsClient.tsx:354)", "shortDescription": {"text": "Dangling fetch: GET /api/dashboard/integrations (src/app/dashboard/integrations/_components/IntegrationsClient.tsx:354)"}, "fullDescription": {"text": "`src/app/dashboard/integrations/_components/IntegrationsClient.tsx:354` calls `GET /api/dashboard/integrations` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/integrations`\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-42723c7781be4666", "name": "Dangling fetch: GET /api/dashboard/settings (src/app/dashboard/settings/page.tsx:374)", "shortDescription": {"text": "Dangling fetch: GET /api/dashboard/settings (src/app/dashboard/settings/page.tsx:374)"}, "fullDescription": {"text": "`src/app/dashboard/settings/page.tsx:374` calls `GET /api/dashboard/settings` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/settings`\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-e9aaa4e3f58ca84c", "name": "Dangling fetch: GET /api/dashboard/follow-up-templates (src/app/dashboard/settings/page.tsx:375)", "shortDescription": {"text": "Dangling fetch: GET /api/dashboard/follow-up-templates (src/app/dashboard/settings/page.tsx:375)"}, "fullDescription": {"text": "`src/app/dashboard/settings/page.tsx:375` calls `GET /api/dashboard/follow-up-templates` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/follow-up-templates`\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-39c4862a856ceb3d", "name": "Dangling fetch: POST /api/dashboard/settings/test-whatsapp (src/app/dashboard/settings/page.tsx:393)", "shortDescription": {"text": "Dangling fetch: POST /api/dashboard/settings/test-whatsapp (src/app/dashboard/settings/page.tsx:393)"}, "fullDescription": {"text": "`src/app/dashboard/settings/page.tsx:393` calls `POST /api/dashboard/settings/test-whatsapp` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/settings/test-whatsapp`\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-7c725c9dec2edfeb", "name": "Dangling fetch: PATCH /api/dashboard/settings (src/app/dashboard/settings/page.tsx:445)", "shortDescription": {"text": "Dangling fetch: PATCH /api/dashboard/settings (src/app/dashboard/settings/page.tsx:445)"}, "fullDescription": {"text": "`src/app/dashboard/settings/page.tsx:445` calls `PATCH /api/dashboard/settings` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/settings`\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-70c2fe34c6b9e4b7", "name": "Dangling fetch: PATCH /api/dashboard/follow-up-templates (src/app/dashboard/settings/page.tsx:459)", "shortDescription": {"text": "Dangling fetch: PATCH /api/dashboard/follow-up-templates (src/app/dashboard/settings/page.tsx:459)"}, "fullDescription": {"text": "`src/app/dashboard/settings/page.tsx:459` calls `PATCH /api/dashboard/follow-up-templates` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/follow-up-templates`\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-1acb49300148c2ab", "name": "Dangling fetch: GET /api/dashboard/settings/audit-log (src/app/dashboard/settings/audit-log/page.tsx:41)", "shortDescription": {"text": "Dangling fetch: GET /api/dashboard/settings/audit-log (src/app/dashboard/settings/audit-log/page.tsx:41)"}, "fullDescription": {"text": "`src/app/dashboard/settings/audit-log/page.tsx:41` calls `GET /api/dashboard/settings/audit-log` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/settings/audit-log`\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-867830953158981a", "name": "Dangling fetch: GET /api/dashboard/flows/${id} (src/app/dashboard/flows/store.ts:202)", "shortDescription": {"text": "Dangling fetch: GET /api/dashboard/flows/${id} (src/app/dashboard/flows/store.ts:202)"}, "fullDescription": {"text": "`src/app/dashboard/flows/store.ts:202` calls `GET /api/dashboard/flows/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/flows/<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-bf418df4b92235f8", "name": "Dangling fetch: PUT /api/dashboard/flows/${flowId} (src/app/dashboard/flows/store.ts:229)", "shortDescription": {"text": "Dangling fetch: PUT /api/dashboard/flows/${flowId} (src/app/dashboard/flows/store.ts:229)"}, "fullDescription": {"text": "`src/app/dashboard/flows/store.ts:229` calls `PUT /api/dashboard/flows/${flowId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/flows/<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-92b2cf6aed974d99", "name": "Dangling fetch: POST /api/dashboard/flows (src/app/dashboard/flows/store.ts:236)", "shortDescription": {"text": "Dangling fetch: POST /api/dashboard/flows (src/app/dashboard/flows/store.ts:236)"}, "fullDescription": {"text": "`src/app/dashboard/flows/store.ts:236` calls `POST /api/dashboard/flows` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/flows`\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-4deadc1fbe9ceb35", "name": "Dangling fetch: PUT /api/dashboard/flows/${id} (src/app/dashboard/flows/store.ts:271)", "shortDescription": {"text": "Dangling fetch: PUT /api/dashboard/flows/${id} (src/app/dashboard/flows/store.ts:271)"}, "fullDescription": {"text": "`src/app/dashboard/flows/store.ts:271` calls `PUT /api/dashboard/flows/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/flows/<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-f7e9338710c054b6", "name": "Dangling fetch: GET /api/dashboard/flows (src/app/dashboard/flows/page.tsx:38)", "shortDescription": {"text": "Dangling fetch: GET /api/dashboard/flows (src/app/dashboard/flows/page.tsx:38)"}, "fullDescription": {"text": "`src/app/dashboard/flows/page.tsx:38` calls `GET /api/dashboard/flows` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/flows`\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-3daf0aa1d50e7685", "name": "Dangling fetch: PUT /api/dashboard/flows/${flow.id} (src/app/dashboard/flows/page.tsx:46)", "shortDescription": {"text": "Dangling fetch: PUT /api/dashboard/flows/${flow.id} (src/app/dashboard/flows/page.tsx:46)"}, "fullDescription": {"text": "`src/app/dashboard/flows/page.tsx:46` calls `PUT /api/dashboard/flows/${flow.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/flows/<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-4ba78daba1907c5f", "name": "Dangling fetch: DELETE /api/dashboard/flows/${id} (src/app/dashboard/flows/page.tsx:57)", "shortDescription": {"text": "Dangling fetch: DELETE /api/dashboard/flows/${id} (src/app/dashboard/flows/page.tsx:57)"}, "fullDescription": {"text": "`src/app/dashboard/flows/page.tsx:57` calls `DELETE /api/dashboard/flows/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/flows/<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-bfa11891ef3fd3ea", "name": "Dangling fetch: POST /api/dashboard/flows/${id}/versions (src/app/dashboard/flows/editor/[id]/_FlowEditorMain.tsx:75)", "shortDescription": {"text": "Dangling fetch: POST /api/dashboard/flows/${id}/versions (src/app/dashboard/flows/editor/[id]/_FlowEditorMain.tsx:75)"}, "fullDescription": {"text": "`src/app/dashboard/flows/editor/[id]/_FlowEditorMain.tsx:75` calls `POST /api/dashboard/flows/${id}/versions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/flows/<p>/versions`\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-61e0a25338597a0c", "name": "Dangling fetch: GET /api/dashboard/flows/${flowId}/executions (src/app/dashboard/flows/_components/FlowFlightRecorder.ts", "shortDescription": {"text": "Dangling fetch: GET /api/dashboard/flows/${flowId}/executions (src/app/dashboard/flows/_components/FlowFlightRecorder.tsx:66)"}, "fullDescription": {"text": "`src/app/dashboard/flows/_components/FlowFlightRecorder.tsx:66` calls `GET /api/dashboard/flows/${flowId}/executions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/flows/<p>/executions`\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-725965cbd310cd75", "name": "Dangling fetch: GET /api/dashboard/flows/${flowId}/executions?conversation_id=${exec.conversation_id} (src/app/dashboard", "shortDescription": {"text": "Dangling fetch: GET /api/dashboard/flows/${flowId}/executions?conversation_id=${exec.conversation_id} (src/app/dashboard/flows/_components/FlowFlightRecorder.tsx:76)"}, "fullDescription": {"text": "`src/app/dashboard/flows/_components/FlowFlightRecorder.tsx:76` calls `GET /api/dashboard/flows/${flowId}/executions?conversation_id=${exec.conversation_id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/flows/<p>/executions`\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-cb5e0b116044f5b7", "name": "Dangling fetch: GET /api/dashboard/flows/${flowId}/versions (src/app/dashboard/flows/_components/FlowVersionPanel.tsx:37", "shortDescription": {"text": "Dangling fetch: GET /api/dashboard/flows/${flowId}/versions (src/app/dashboard/flows/_components/FlowVersionPanel.tsx:37)"}, "fullDescription": {"text": "`src/app/dashboard/flows/_components/FlowVersionPanel.tsx:37` calls `GET /api/dashboard/flows/${flowId}/versions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/flows/<p>/versions`\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-68bac6c750452257", "name": "Dangling fetch: PUT /api/dashboard/flows/${flowId}/versions (src/app/dashboard/flows/_components/FlowVersionPanel.tsx:51", "shortDescription": {"text": "Dangling fetch: PUT /api/dashboard/flows/${flowId}/versions (src/app/dashboard/flows/_components/FlowVersionPanel.tsx:51)"}, "fullDescription": {"text": "`src/app/dashboard/flows/_components/FlowVersionPanel.tsx:51` calls `PUT /api/dashboard/flows/${flowId}/versions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/flows/<p>/versions`\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-cc5c6f58a61afdd5", "name": "Dangling fetch: GET /api/dashboard/flows/${flowId}/analytics?days=${days} (src/app/dashboard/flows/_components/FlowAnaly", "shortDescription": {"text": "Dangling fetch: GET /api/dashboard/flows/${flowId}/analytics?days=${days} (src/app/dashboard/flows/_components/FlowAnalytics.tsx:79)"}, "fullDescription": {"text": "`src/app/dashboard/flows/_components/FlowAnalytics.tsx:79` calls `GET /api/dashboard/flows/${flowId}/analytics?days=${days}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/flows/<p>/analytics`\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-3b9a1cff5d3e0bca", "name": "Dangling fetch: POST /api/dashboard/flows/${flowId}/simulate (src/app/dashboard/flows/_components/FlowSimulator.tsx:87)", "shortDescription": {"text": "Dangling fetch: POST /api/dashboard/flows/${flowId}/simulate (src/app/dashboard/flows/_components/FlowSimulator.tsx:87)"}, "fullDescription": {"text": "`src/app/dashboard/flows/_components/FlowSimulator.tsx:87` calls `POST /api/dashboard/flows/${flowId}/simulate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/flows/<p>/simulate`\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-f1a0e2e66864791e", "name": "Dangling fetch: POST /api/dashboard/flows/generate (src/app/dashboard/flows/_components/AIFlowAssistant.tsx:33)", "shortDescription": {"text": "Dangling fetch: POST /api/dashboard/flows/generate (src/app/dashboard/flows/_components/AIFlowAssistant.tsx:33)"}, "fullDescription": {"text": "`src/app/dashboard/flows/_components/AIFlowAssistant.tsx:33` calls `POST /api/dashboard/flows/generate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/flows/generate`\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-965227477cbbdfa2", "name": "Dangling fetch: GET /api/dashboard/agents (src/app/dashboard/operations/_components/AgentPerformanceStatus.tsx:37)", "shortDescription": {"text": "Dangling fetch: GET /api/dashboard/agents (src/app/dashboard/operations/_components/AgentPerformanceStatus.tsx:37)"}, "fullDescription": {"text": "`src/app/dashboard/operations/_components/AgentPerformanceStatus.tsx:37` calls `GET /api/dashboard/agents` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/agents`\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-de8e6059e53db73c", "name": "Dangling fetch: GET /api/dashboard/analytics (src/app/dashboard/operations/_components/ResponseMetricsChart.tsx:25)", "shortDescription": {"text": "Dangling fetch: GET /api/dashboard/analytics (src/app/dashboard/operations/_components/ResponseMetricsChart.tsx:25)"}, "fullDescription": {"text": "`src/app/dashboard/operations/_components/ResponseMetricsChart.tsx:25` calls `GET /api/dashboard/analytics` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/analytics`\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-21424c3152ba7dfa", "name": "Dangling fetch: GET /api/dashboard/stats (src/app/dashboard/operations/_components/QuickActionsGrid.tsx:17)", "shortDescription": {"text": "Dangling fetch: GET /api/dashboard/stats (src/app/dashboard/operations/_components/QuickActionsGrid.tsx:17)"}, "fullDescription": {"text": "`src/app/dashboard/operations/_components/QuickActionsGrid.tsx:17` calls `GET /api/dashboard/stats` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/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-fac624c3cd26b956", "name": "Dangling fetch: GET /api/dashboard/analytics (src/app/dashboard/operations/_components/AIEfficiencyPanel.tsx:35)", "shortDescription": {"text": "Dangling fetch: GET /api/dashboard/analytics (src/app/dashboard/operations/_components/AIEfficiencyPanel.tsx:35)"}, "fullDescription": {"text": "`src/app/dashboard/operations/_components/AIEfficiencyPanel.tsx:35` calls `GET /api/dashboard/analytics` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/analytics`\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-0d2f5f4527e8082b", "name": "Dangling fetch: GET /api/dashboard/stats (src/app/dashboard/operations/_components/OperationsKPIs.tsx:35)", "shortDescription": {"text": "Dangling fetch: GET /api/dashboard/stats (src/app/dashboard/operations/_components/OperationsKPIs.tsx:35)"}, "fullDescription": {"text": "`src/app/dashboard/operations/_components/OperationsKPIs.tsx:35` calls `GET /api/dashboard/stats` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/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-1a515bd2f5c8e829", "name": "Dangling fetch: GET /api/dashboard/automations (src/app/dashboard/operations/_components/OperationsKPIs.tsx:36)", "shortDescription": {"text": "Dangling fetch: GET /api/dashboard/automations (src/app/dashboard/operations/_components/OperationsKPIs.tsx:36)"}, "fullDescription": {"text": "`src/app/dashboard/operations/_components/OperationsKPIs.tsx:36` calls `GET /api/dashboard/automations` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/automations`\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-5234aa1958ba4138", "name": "Dangling fetch: GET /api/dashboard/logs (src/app/dashboard/operations/_components/LiveActivityFeed.tsx:48)", "shortDescription": {"text": "Dangling fetch: GET /api/dashboard/logs (src/app/dashboard/operations/_components/LiveActivityFeed.tsx:48)"}, "fullDescription": {"text": "`src/app/dashboard/operations/_components/LiveActivityFeed.tsx:48` calls `GET /api/dashboard/logs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/logs`\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-277dfbbf976041d2", "name": "Dangling fetch: GET /api/dashboard/analytics (src/app/dashboard/analytics/_components/AnalyticsClient.tsx:34)", "shortDescription": {"text": "Dangling fetch: GET /api/dashboard/analytics (src/app/dashboard/analytics/_components/AnalyticsClient.tsx:34)"}, "fullDescription": {"text": "`src/app/dashboard/analytics/_components/AnalyticsClient.tsx:34` calls `GET /api/dashboard/analytics` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/analytics`\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-aa0690dba231f4de", "name": "Dangling fetch: GET /api/dashboard/readiness (src/app/dashboard/readiness/page.tsx:38)", "shortDescription": {"text": "Dangling fetch: GET /api/dashboard/readiness (src/app/dashboard/readiness/page.tsx:38)"}, "fullDescription": {"text": "`src/app/dashboard/readiness/page.tsx:38` calls `GET /api/dashboard/readiness` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/readiness`\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-b6dc563cdc2fc9cc", "name": "Dangling fetch: GET /api/dashboard/leads (src/app/dashboard/leads/_components/LeadsClient.tsx:45)", "shortDescription": {"text": "Dangling fetch: GET /api/dashboard/leads (src/app/dashboard/leads/_components/LeadsClient.tsx:45)"}, "fullDescription": {"text": "`src/app/dashboard/leads/_components/LeadsClient.tsx:45` calls `GET /api/dashboard/leads` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/leads`\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-dd2c2332e955b70e", "name": "Dangling fetch: GET /api/dashboard/team (src/app/dashboard/leads/_components/LeadsClient.tsx:57)", "shortDescription": {"text": "Dangling fetch: GET /api/dashboard/team (src/app/dashboard/leads/_components/LeadsClient.tsx:57)"}, "fullDescription": {"text": "`src/app/dashboard/leads/_components/LeadsClient.tsx:57` calls `GET /api/dashboard/team` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/team`\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-e6086861c34f7cff", "name": "Dangling fetch: GET /api/dashboard/campaigns (src/app/dashboard/leads/_components/LeadsClient.tsx:70)", "shortDescription": {"text": "Dangling fetch: GET /api/dashboard/campaigns (src/app/dashboard/leads/_components/LeadsClient.tsx:70)"}, "fullDescription": {"text": "`src/app/dashboard/leads/_components/LeadsClient.tsx:70` calls `GET /api/dashboard/campaigns` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/campaigns`\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-47a630ea72efca34", "name": "Dangling fetch: PATCH /api/dashboard/leads/${leadId}/assign (src/app/dashboard/leads/_components/LeadsClient.tsx:101)", "shortDescription": {"text": "Dangling fetch: PATCH /api/dashboard/leads/${leadId}/assign (src/app/dashboard/leads/_components/LeadsClient.tsx:101)"}, "fullDescription": {"text": "`src/app/dashboard/leads/_components/LeadsClient.tsx:101` calls `PATCH /api/dashboard/leads/${leadId}/assign` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/leads/<p>/assign`\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-2883bd3e2a28f4aa", "name": "Dangling fetch: POST /api/broadcast/campaign/${campaignId}/retry-now (src/app/dashboard/broadcast/[id]/stats/page.tsx:39", "shortDescription": {"text": "Dangling fetch: POST /api/broadcast/campaign/${campaignId}/retry-now (src/app/dashboard/broadcast/[id]/stats/page.tsx:39)"}, "fullDescription": {"text": "`src/app/dashboard/broadcast/[id]/stats/page.tsx:39` calls `POST /api/broadcast/campaign/${campaignId}/retry-now` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/broadcast/campaign/<p>/retry-now`\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-ec0d5c98556c44ac", "name": "Dangling fetch: GET /api/broadcast/campaign/${campaignId}/stats (src/app/dashboard/broadcast/[id]/stats/page.tsx:54)", "shortDescription": {"text": "Dangling fetch: GET /api/broadcast/campaign/${campaignId}/stats (src/app/dashboard/broadcast/[id]/stats/page.tsx:54)"}, "fullDescription": {"text": "`src/app/dashboard/broadcast/[id]/stats/page.tsx:54` calls `GET /api/broadcast/campaign/${campaignId}/stats` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/broadcast/campaign/<p>/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-d8e886964bea927b", "name": "Dangling fetch: POST /api/broadcast/csv/upload (src/app/dashboard/broadcast/_components/AudienceBuilder.tsx:304)", "shortDescription": {"text": "Dangling fetch: POST /api/broadcast/csv/upload (src/app/dashboard/broadcast/_components/AudienceBuilder.tsx:304)"}, "fullDescription": {"text": "`src/app/dashboard/broadcast/_components/AudienceBuilder.tsx:304` calls `POST /api/broadcast/csv/upload` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/broadcast/csv/upload`\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-c9842315c316049b", "name": "Dangling fetch: GET /api/broadcasts/timeline?campaignId=${campaignId} (src/app/dashboard/broadcast/_components/Broadcast", "shortDescription": {"text": "Dangling fetch: GET /api/broadcasts/timeline?campaignId=${campaignId} (src/app/dashboard/broadcast/_components/BroadcastExecutionTimeline.tsx:32)"}, "fullDescription": {"text": "`src/app/dashboard/broadcast/_components/BroadcastExecutionTimeline.tsx:32` calls `GET /api/broadcasts/timeline?campaignId=${campaignId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/broadcasts/timeline`\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-9a7cf23c97f22bb2", "name": "Dangling fetch: GET /api/broadcasts/audit-logs?campaignId=${campaignId} (src/app/dashboard/broadcast/_components/Broadca", "shortDescription": {"text": "Dangling fetch: GET /api/broadcasts/audit-logs?campaignId=${campaignId} (src/app/dashboard/broadcast/_components/BroadcastAuditLog.tsx:25)"}, "fullDescription": {"text": "`src/app/dashboard/broadcast/_components/BroadcastAuditLog.tsx:25` calls `GET /api/broadcasts/audit-logs?campaignId=${campaignId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/broadcasts/audit-logs`\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-82c928bc800864ad", "name": "Dangling fetch: GET /api/broadcast/contacts/search?${queryParams.toString()} (src/app/dashboard/broadcast/_components/Co", "shortDescription": {"text": "Dangling fetch: GET /api/broadcast/contacts/search?${queryParams.toString()} (src/app/dashboard/broadcast/_components/ContactPickerDrawer.tsx:74)"}, "fullDescription": {"text": "`src/app/dashboard/broadcast/_components/ContactPickerDrawer.tsx:74` calls `GET /api/broadcast/contacts/search?${queryParams.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/broadcast/contacts/search`\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-46bef6e71ff6b46a", "name": "Dangling fetch: GET /api/broadcasts/observability?campaignId=${campaignId} (src/app/dashboard/broadcast/_components/Queu", "shortDescription": {"text": "Dangling fetch: GET /api/broadcasts/observability?campaignId=${campaignId} (src/app/dashboard/broadcast/_components/QueueStatusCard.tsx:43)"}, "fullDescription": {"text": "`src/app/dashboard/broadcast/_components/QueueStatusCard.tsx:43` calls `GET /api/broadcasts/observability?campaignId=${campaignId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/broadcasts/observability`\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-a2e5bd1a3e6b2b75", "name": "Dangling fetch: GET /api/dashboard/templates (src/app/dashboard/broadcast/_components/BroadcastBuilder.tsx:254)", "shortDescription": {"text": "Dangling fetch: GET /api/dashboard/templates (src/app/dashboard/broadcast/_components/BroadcastBuilder.tsx:254)"}, "fullDescription": {"text": "`src/app/dashboard/broadcast/_components/BroadcastBuilder.tsx:254` calls `GET /api/dashboard/templates` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/templates`\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-5ecbb4be2ea4da33", "name": "Dangling fetch: GET /api/dashboard/leads (src/app/dashboard/broadcast/_components/BroadcastBuilder.tsx:269)", "shortDescription": {"text": "Dangling fetch: GET /api/dashboard/leads (src/app/dashboard/broadcast/_components/BroadcastBuilder.tsx:269)"}, "fullDescription": {"text": "`src/app/dashboard/broadcast/_components/BroadcastBuilder.tsx:269` calls `GET /api/dashboard/leads` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/leads`\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-bf55f6f0cfd88bdb", "name": "Dangling fetch: POST /api/broadcast/campaign (src/app/dashboard/broadcast/_components/BroadcastBuilder.tsx:286)", "shortDescription": {"text": "Dangling fetch: POST /api/broadcast/campaign (src/app/dashboard/broadcast/_components/BroadcastBuilder.tsx:286)"}, "fullDescription": {"text": "`src/app/dashboard/broadcast/_components/BroadcastBuilder.tsx:286` calls `POST /api/broadcast/campaign` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/broadcast/campaign`\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-142e1aabc88b2c1b", "name": "Dangling fetch: POST /api/broadcast/campaign (src/app/dashboard/broadcast/_components/BroadcastBuilder.tsx:399)", "shortDescription": {"text": "Dangling fetch: POST /api/broadcast/campaign (src/app/dashboard/broadcast/_components/BroadcastBuilder.tsx:399)"}, "fullDescription": {"text": "`src/app/dashboard/broadcast/_components/BroadcastBuilder.tsx:399` calls `POST /api/broadcast/campaign` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/broadcast/campaign`\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-856b77c21db25db7", "name": "Dangling fetch: POST /api/broadcast/test (src/app/dashboard/broadcast/_components/BroadcastBuilder.tsx:474)", "shortDescription": {"text": "Dangling fetch: POST /api/broadcast/test (src/app/dashboard/broadcast/_components/BroadcastBuilder.tsx:474)"}, "fullDescription": {"text": "`src/app/dashboard/broadcast/_components/BroadcastBuilder.tsx:474` calls `POST /api/broadcast/test` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/broadcast/test`\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-a5509022702c0cb8", "name": "Dangling fetch: POST /api/broadcasts/test-send (src/app/dashboard/broadcast/_components/BroadcastBuilder.tsx:487)", "shortDescription": {"text": "Dangling fetch: POST /api/broadcasts/test-send (src/app/dashboard/broadcast/_components/BroadcastBuilder.tsx:487)"}, "fullDescription": {"text": "`src/app/dashboard/broadcast/_components/BroadcastBuilder.tsx:487` calls `POST /api/broadcasts/test-send` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/broadcasts/test-send`\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-c620c35a68351a21", "name": "Dangling fetch: POST /api/broadcast/launch (src/app/dashboard/broadcast/_components/BroadcastBuilder.tsx:534)", "shortDescription": {"text": "Dangling fetch: POST /api/broadcast/launch (src/app/dashboard/broadcast/_components/BroadcastBuilder.tsx:534)"}, "fullDescription": {"text": "`src/app/dashboard/broadcast/_components/BroadcastBuilder.tsx:534` calls `POST /api/broadcast/launch` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/broadcast/launch`\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-137f4a8cd897f856", "name": "Dangling fetch: POST /api/broadcast/recipients (src/app/dashboard/broadcast/_components/BroadcastBuilder.tsx:644)", "shortDescription": {"text": "Dangling fetch: POST /api/broadcast/recipients (src/app/dashboard/broadcast/_components/BroadcastBuilder.tsx:644)"}, "fullDescription": {"text": "`src/app/dashboard/broadcast/_components/BroadcastBuilder.tsx:644` calls `POST /api/broadcast/recipients` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/broadcast/recipients`\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-b4387e4f2f7f3fc9", "name": "Dangling fetch: GET /api/broadcasts/performance (src/app/dashboard/broadcast/_components/BroadcastPerformanceCard.tsx:31", "shortDescription": {"text": "Dangling fetch: GET /api/broadcasts/performance (src/app/dashboard/broadcast/_components/BroadcastPerformanceCard.tsx:31)"}, "fullDescription": {"text": "`src/app/dashboard/broadcast/_components/BroadcastPerformanceCard.tsx:31` calls `GET /api/broadcasts/performance` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/broadcasts/performance`\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-325a8068e1362c6d", "name": "Dangling fetch: GET /api/broadcast/contacts/search?q=${encodeURIComponent(searchQuery)}&limit=15 (src/app/dashboard/broa", "shortDescription": {"text": "Dangling fetch: GET /api/broadcast/contacts/search?q=${encodeURIComponent(searchQuery)}&limit=15 (src/app/dashboard/broadcast/_components/RecipientDrawer.tsx:68)"}, "fullDescription": {"text": "`src/app/dashboard/broadcast/_components/RecipientDrawer.tsx:68` calls `GET /api/broadcast/contacts/search?q=${encodeURIComponent(searchQuery)}&limit=15` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/broadcast/contacts/search`\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-dc6798a45b69bedc", "name": "Dangling fetch: GET /api/broadcast/campaigns (src/app/dashboard/broadcast/_components/BroadcastClient.tsx:439)", "shortDescription": {"text": "Dangling fetch: GET /api/broadcast/campaigns (src/app/dashboard/broadcast/_components/BroadcastClient.tsx:439)"}, "fullDescription": {"text": "`src/app/dashboard/broadcast/_components/BroadcastClient.tsx:439` calls `GET /api/broadcast/campaigns` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/broadcast/campaigns`\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-5e1c667315a581eb", "name": "Dangling fetch: POST /api/broadcasts/send (src/app/dashboard/broadcast/_components/BroadcastClient.tsx:484)", "shortDescription": {"text": "Dangling fetch: POST /api/broadcasts/send (src/app/dashboard/broadcast/_components/BroadcastClient.tsx:484)"}, "fullDescription": {"text": "`src/app/dashboard/broadcast/_components/BroadcastClient.tsx:484` calls `POST /api/broadcasts/send` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/broadcasts/send`\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-edf8e705761071b2", "name": "Dangling fetch: DELETE /api/broadcast/campaign?id=${id} (src/app/dashboard/broadcast/_components/BroadcastClient.tsx:503", "shortDescription": {"text": "Dangling fetch: DELETE /api/broadcast/campaign?id=${id} (src/app/dashboard/broadcast/_components/BroadcastClient.tsx:503)"}, "fullDescription": {"text": "`src/app/dashboard/broadcast/_components/BroadcastClient.tsx:503` calls `DELETE /api/broadcast/campaign?id=${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/broadcast/campaign`\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-12252e3ab0c3fd86", "name": "Dangling fetch: GET /api/dashboard/team (src/app/dashboard/team/_components/TeamClient.tsx:43)", "shortDescription": {"text": "Dangling fetch: GET /api/dashboard/team (src/app/dashboard/team/_components/TeamClient.tsx:43)"}, "fullDescription": {"text": "`src/app/dashboard/team/_components/TeamClient.tsx:43` calls `GET /api/dashboard/team` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/team`\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-f7bfa2b9f2e35008", "name": "Dangling fetch: POST /api/dashboard/team (src/app/dashboard/team/_components/TeamClient.tsx:67)", "shortDescription": {"text": "Dangling fetch: POST /api/dashboard/team (src/app/dashboard/team/_components/TeamClient.tsx:67)"}, "fullDescription": {"text": "`src/app/dashboard/team/_components/TeamClient.tsx:67` calls `POST /api/dashboard/team` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/team`\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-ae1b53e25c9bb935", "name": "Dangling fetch: PATCH /api/dashboard/team (src/app/dashboard/team/_components/TeamClient.tsx:94)", "shortDescription": {"text": "Dangling fetch: PATCH /api/dashboard/team (src/app/dashboard/team/_components/TeamClient.tsx:94)"}, "fullDescription": {"text": "`src/app/dashboard/team/_components/TeamClient.tsx:94` calls `PATCH /api/dashboard/team` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/team`\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-9b3f72cdd94c0498", "name": "Dangling fetch: DELETE /api/dashboard/team?id=${user.id} (src/app/dashboard/team/_components/TeamClient.tsx:115)", "shortDescription": {"text": "Dangling fetch: DELETE /api/dashboard/team?id=${user.id} (src/app/dashboard/team/_components/TeamClient.tsx:115)"}, "fullDescription": {"text": "`src/app/dashboard/team/_components/TeamClient.tsx:115` calls `DELETE /api/dashboard/team?id=${user.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/team`\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-2d9148c331ad06df", "name": "Dangling fetch: POST /api/auth/logout (src/app/dashboard/_layout/AppSidebar.tsx:198)", "shortDescription": {"text": "Dangling fetch: POST /api/auth/logout (src/app/dashboard/_layout/AppSidebar.tsx:198)"}, "fullDescription": {"text": "`src/app/dashboard/_layout/AppSidebar.tsx:198` calls `POST /api/auth/logout` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/logout`\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-ab53fbdfe763d287", "name": "Dangling fetch: GET /api/meta-ads/notifications?unread=1&limit=1 (src/app/dashboard/_layout/MetaAdsNotificationBell.tsx:", "shortDescription": {"text": "Dangling fetch: GET /api/meta-ads/notifications?unread=1&limit=1 (src/app/dashboard/_layout/MetaAdsNotificationBell.tsx:48)"}, "fullDescription": {"text": "`src/app/dashboard/_layout/MetaAdsNotificationBell.tsx:48` calls `GET /api/meta-ads/notifications?unread=1&limit=1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/meta-ads/notifications`\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-009855cfaf301772", "name": "Dangling fetch: GET /api/meta-ads/notifications?limit=20 (src/app/dashboard/_layout/MetaAdsNotificationBell.tsx:68)", "shortDescription": {"text": "Dangling fetch: GET /api/meta-ads/notifications?limit=20 (src/app/dashboard/_layout/MetaAdsNotificationBell.tsx:68)"}, "fullDescription": {"text": "`src/app/dashboard/_layout/MetaAdsNotificationBell.tsx:68` calls `GET /api/meta-ads/notifications?limit=20` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/meta-ads/notifications`\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-158a06493ac5fcb0", "name": "Dangling fetch: PATCH /api/meta-ads/notifications (src/app/dashboard/_layout/MetaAdsNotificationBell.tsx:99)", "shortDescription": {"text": "Dangling fetch: PATCH /api/meta-ads/notifications (src/app/dashboard/_layout/MetaAdsNotificationBell.tsx:99)"}, "fullDescription": {"text": "`src/app/dashboard/_layout/MetaAdsNotificationBell.tsx:99` calls `PATCH /api/meta-ads/notifications` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/meta-ads/notifications`\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-65c0928ec3312668", "name": "Dangling fetch: PATCH /api/meta-ads/notifications (src/app/dashboard/_layout/MetaAdsNotificationBell.tsx:107)", "shortDescription": {"text": "Dangling fetch: PATCH /api/meta-ads/notifications (src/app/dashboard/_layout/MetaAdsNotificationBell.tsx:107)"}, "fullDescription": {"text": "`src/app/dashboard/_layout/MetaAdsNotificationBell.tsx:107` calls `PATCH /api/meta-ads/notifications` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/meta-ads/notifications`\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-01ae1ac6a210e083", "name": "Dangling fetch: POST /api/ai/assist (src/app/dashboard/chat/AIAssistPanel.tsx:232)", "shortDescription": {"text": "Dangling fetch: POST /api/ai/assist (src/app/dashboard/chat/AIAssistPanel.tsx:232)"}, "fullDescription": {"text": "`src/app/dashboard/chat/AIAssistPanel.tsx:232` calls `POST /api/ai/assist` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/ai/assist`\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-d8d41f4f902c694b", "name": "Dangling fetch: POST /api/dashboard/contacts (src/app/dashboard/chat/ChatArea.tsx:235)", "shortDescription": {"text": "Dangling fetch: POST /api/dashboard/contacts (src/app/dashboard/chat/ChatArea.tsx:235)"}, "fullDescription": {"text": "`src/app/dashboard/chat/ChatArea.tsx:235` calls `POST /api/dashboard/contacts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/contacts`\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-94d1e777564eb515", "name": "Dangling fetch: POST /api/chat/upload (src/app/dashboard/chat/ChatArea.tsx:395)", "shortDescription": {"text": "Dangling fetch: POST /api/chat/upload (src/app/dashboard/chat/ChatArea.tsx:395)"}, "fullDescription": {"text": "`src/app/dashboard/chat/ChatArea.tsx:395` calls `POST /api/chat/upload` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/chat/upload`\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-820ae435b806289c", "name": "Dangling fetch: GET /api/dashboard/chat/conversation?id=${conversationId}&_t=${Date.now()} (src/app/dashboard/chat/ChatA", "shortDescription": {"text": "Dangling fetch: GET /api/dashboard/chat/conversation?id=${conversationId}&_t=${Date.now()} (src/app/dashboard/chat/ChatArea.tsx:452)"}, "fullDescription": {"text": "`src/app/dashboard/chat/ChatArea.tsx:452` calls `GET /api/dashboard/chat/conversation?id=${conversationId}&_t=${Date.now()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/chat/conversation`\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-6bd03cc4e3eb1e2d", "name": "Dangling fetch: GET /api/dashboard/chat/statuses?conversationId=${conversationId} (src/app/dashboard/chat/ChatArea.tsx:5", "shortDescription": {"text": "Dangling fetch: GET /api/dashboard/chat/statuses?conversationId=${conversationId} (src/app/dashboard/chat/ChatArea.tsx:528)"}, "fullDescription": {"text": "`src/app/dashboard/chat/ChatArea.tsx:528` calls `GET /api/dashboard/chat/statuses?conversationId=${conversationId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/chat/statuses`\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-0037562d2c161abe", "name": "Dangling fetch: GET /api/dashboard/chat/new-messages?${params} (src/app/dashboard/chat/ChatArea.tsx:572)", "shortDescription": {"text": "Dangling fetch: GET /api/dashboard/chat/new-messages?${params} (src/app/dashboard/chat/ChatArea.tsx:572)"}, "fullDescription": {"text": "`src/app/dashboard/chat/ChatArea.tsx:572` calls `GET /api/dashboard/chat/new-messages?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/chat/new-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-5494c5a80098e57e", "name": "Dangling fetch: POST /api/chat/send (src/app/dashboard/chat/ChatArea.tsx:653)", "shortDescription": {"text": "Dangling fetch: POST /api/chat/send (src/app/dashboard/chat/ChatArea.tsx:653)"}, "fullDescription": {"text": "`src/app/dashboard/chat/ChatArea.tsx:653` calls `POST /api/chat/send` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/chat/send`\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-62c9852ee02ec07b", "name": "Dangling fetch: POST /api/chat/send (src/app/dashboard/chat/ChatArea.tsx:687)", "shortDescription": {"text": "Dangling fetch: POST /api/chat/send (src/app/dashboard/chat/ChatArea.tsx:687)"}, "fullDescription": {"text": "`src/app/dashboard/chat/ChatArea.tsx:687` calls `POST /api/chat/send` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/chat/send`\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-4fddb02cdea4815e", "name": "Dangling fetch: PATCH /api/dashboard/chat/conversation?id=${conversationId} (src/app/dashboard/chat/ChatArea.tsx:706)", "shortDescription": {"text": "Dangling fetch: PATCH /api/dashboard/chat/conversation?id=${conversationId} (src/app/dashboard/chat/ChatArea.tsx:706)"}, "fullDescription": {"text": "`src/app/dashboard/chat/ChatArea.tsx:706` calls `PATCH /api/dashboard/chat/conversation?id=${conversationId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/chat/conversation`\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-9e281147ab0b1ae7", "name": "Dangling fetch: POST /api/dashboard/chat/delete-message (src/app/dashboard/chat/ChatArea.tsx:856)", "shortDescription": {"text": "Dangling fetch: POST /api/dashboard/chat/delete-message (src/app/dashboard/chat/ChatArea.tsx:856)"}, "fullDescription": {"text": "`src/app/dashboard/chat/ChatArea.tsx:856` calls `POST /api/dashboard/chat/delete-message` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/chat/delete-message`\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-b6072570f1e86ea4", "name": "Dangling fetch: GET /api/dashboard/team (src/app/dashboard/chat/CRMPanel.tsx:171)", "shortDescription": {"text": "Dangling fetch: GET /api/dashboard/team (src/app/dashboard/chat/CRMPanel.tsx:171)"}, "fullDescription": {"text": "`src/app/dashboard/chat/CRMPanel.tsx:171` calls `GET /api/dashboard/team` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/team`\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-ea72a30d1d52ade0", "name": "Dangling fetch: PATCH /api/dashboard/leads/${localLead.id}/assign (src/app/dashboard/chat/CRMPanel.tsx:219)", "shortDescription": {"text": "Dangling fetch: PATCH /api/dashboard/leads/${localLead.id}/assign (src/app/dashboard/chat/CRMPanel.tsx:219)"}, "fullDescription": {"text": "`src/app/dashboard/chat/CRMPanel.tsx:219` calls `PATCH /api/dashboard/leads/${localLead.id}/assign` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/leads/<p>/assign`\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-b0983609ca15b501", "name": "Dangling fetch: GET /api/dashboard/chat/conversations?_t=${Date.now()} (src/app/dashboard/chat/ChatSidebar.tsx:101)", "shortDescription": {"text": "Dangling fetch: GET /api/dashboard/chat/conversations?_t=${Date.now()} (src/app/dashboard/chat/ChatSidebar.tsx:101)"}, "fullDescription": {"text": "`src/app/dashboard/chat/ChatSidebar.tsx:101` calls `GET /api/dashboard/chat/conversations?_t=${Date.now()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/chat/conversations`\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-949dc00afd1d2e61", "name": "Dangling fetch: GET /api/dashboard/templates (src/app/dashboard/templates/page.tsx:87)", "shortDescription": {"text": "Dangling fetch: GET /api/dashboard/templates (src/app/dashboard/templates/page.tsx:87)"}, "fullDescription": {"text": "`src/app/dashboard/templates/page.tsx:87` calls `GET /api/dashboard/templates` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/templates`\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-1fea218d200153ab", "name": "Dangling fetch: POST /api/dashboard/templates/sync (src/app/dashboard/templates/page.tsx:108)", "shortDescription": {"text": "Dangling fetch: POST /api/dashboard/templates/sync (src/app/dashboard/templates/page.tsx:108)"}, "fullDescription": {"text": "`src/app/dashboard/templates/page.tsx:108` calls `POST /api/dashboard/templates/sync` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/templates/sync`\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-9f2974710089ba43", "name": "Dangling fetch: DELETE /api/dashboard/templates/${id}?name=${encodeURIComponent(name)} (src/app/dashboard/templates/page", "shortDescription": {"text": "Dangling fetch: DELETE /api/dashboard/templates/${id}?name=${encodeURIComponent(name)} (src/app/dashboard/templates/page.tsx:219)"}, "fullDescription": {"text": "`src/app/dashboard/templates/page.tsx:219` calls `DELETE /api/dashboard/templates/${id}?name=${encodeURIComponent(name)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/templates/<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-8a31dfe591cdb3f3", "name": "Dangling fetch: POST /api/dashboard/templates (src/app/dashboard/templates/_components/TemplateStudio.tsx:62)", "shortDescription": {"text": "Dangling fetch: POST /api/dashboard/templates (src/app/dashboard/templates/_components/TemplateStudio.tsx:62)"}, "fullDescription": {"text": "`src/app/dashboard/templates/_components/TemplateStudio.tsx:62` calls `POST /api/dashboard/templates` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/templates`\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-88d060c3b2adf23f", "name": "Dangling fetch: POST /api/dashboard/templates (src/app/dashboard/templates/_components/TemplateStudio.tsx:94)", "shortDescription": {"text": "Dangling fetch: POST /api/dashboard/templates (src/app/dashboard/templates/_components/TemplateStudio.tsx:94)"}, "fullDescription": {"text": "`src/app/dashboard/templates/_components/TemplateStudio.tsx:94` calls `POST /api/dashboard/templates` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/templates`\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-c7d495abf97c4c1a", "name": "Dangling fetch: POST /api/dashboard/templates (src/app/dashboard/templates/_components/TemplateStudio.tsx:135)", "shortDescription": {"text": "Dangling fetch: POST /api/dashboard/templates (src/app/dashboard/templates/_components/TemplateStudio.tsx:135)"}, "fullDescription": {"text": "`src/app/dashboard/templates/_components/TemplateStudio.tsx:135` calls `POST /api/dashboard/templates` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/templates`\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-22492060a3f8748c", "name": "Dangling fetch: POST /api/dashboard/templates/upload (src/app/dashboard/templates/_components/MediaUpload.tsx:70)", "shortDescription": {"text": "Dangling fetch: POST /api/dashboard/templates/upload (src/app/dashboard/templates/_components/MediaUpload.tsx:70)"}, "fullDescription": {"text": "`src/app/dashboard/templates/_components/MediaUpload.tsx:70` calls `POST /api/dashboard/templates/upload` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/templates/upload`\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-b82842ae47867eac", "name": "Dangling fetch: GET /api/dashboard/logs (src/app/dashboard/logs/page.tsx:30)", "shortDescription": {"text": "Dangling fetch: GET /api/dashboard/logs (src/app/dashboard/logs/page.tsx:30)"}, "fullDescription": {"text": "`src/app/dashboard/logs/page.tsx:30` calls `GET /api/dashboard/logs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/logs`\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-7052fa28f8e832a3", "name": "Dangling fetch: GET /api/dashboard/logs (src/app/dashboard/logs/_components/LogsClient.tsx:26)", "shortDescription": {"text": "Dangling fetch: GET /api/dashboard/logs (src/app/dashboard/logs/_components/LogsClient.tsx:26)"}, "fullDescription": {"text": "`src/app/dashboard/logs/_components/LogsClient.tsx:26` calls `GET /api/dashboard/logs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/logs`\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-77f824121de465b0", "name": "Dangling fetch: GET /api/admin/provision (src/app/dashboard/admin/onboard/_components/OnboardClient.tsx:79)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/provision (src/app/dashboard/admin/onboard/_components/OnboardClient.tsx:79)"}, "fullDescription": {"text": "`src/app/dashboard/admin/onboard/_components/OnboardClient.tsx:79` calls `GET /api/admin/provision` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/provision`\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-c2f94ddba2bddf6c", "name": "Dangling fetch: GET /api/admin/provision?tenant_id=${encodeURIComponent(id)} (src/app/dashboard/admin/onboard/_component", "shortDescription": {"text": "Dangling fetch: GET /api/admin/provision?tenant_id=${encodeURIComponent(id)} (src/app/dashboard/admin/onboard/_components/OnboardClient.tsx:107)"}, "fullDescription": {"text": "`src/app/dashboard/admin/onboard/_components/OnboardClient.tsx:107` calls `GET /api/admin/provision?tenant_id=${encodeURIComponent(id)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/provision`\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-4b6129c3802101cf", "name": "Dangling fetch: PATCH /api/admin/provision (src/app/dashboard/admin/onboard/_components/OnboardClient.tsx:134)", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/provision (src/app/dashboard/admin/onboard/_components/OnboardClient.tsx:134)"}, "fullDescription": {"text": "`src/app/dashboard/admin/onboard/_components/OnboardClient.tsx:134` calls `PATCH /api/admin/provision` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/provision`\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-113b067620107739", "name": "Dangling fetch: GET /api/admin/approvals (src/app/dashboard/admin/approvals/_components/ApprovalsClient.tsx:22)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/approvals (src/app/dashboard/admin/approvals/_components/ApprovalsClient.tsx:22)"}, "fullDescription": {"text": "`src/app/dashboard/admin/approvals/_components/ApprovalsClient.tsx:22` calls `GET /api/admin/approvals` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/approvals`\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-a784f761f3d0c200", "name": "Dangling fetch: POST /api/admin/approvals (src/app/dashboard/admin/approvals/_components/ApprovalsClient.tsx:37)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/approvals (src/app/dashboard/admin/approvals/_components/ApprovalsClient.tsx:37)"}, "fullDescription": {"text": "`src/app/dashboard/admin/approvals/_components/ApprovalsClient.tsx:37` calls `POST /api/admin/approvals` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/approvals`\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-e9441ba65c3badb5", "name": "Dangling fetch: POST /api/admin/approvals (src/app/dashboard/admin/approvals/_components/ApprovalsClient.tsx:60)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/approvals (src/app/dashboard/admin/approvals/_components/ApprovalsClient.tsx:60)"}, "fullDescription": {"text": "`src/app/dashboard/admin/approvals/_components/ApprovalsClient.tsx:60` calls `POST /api/admin/approvals` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/approvals`\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-a2181d48e31cf796", "name": "Dangling fetch: GET /api/dashboard/scripted-replies (src/app/dashboard/agents/page.tsx:321)", "shortDescription": {"text": "Dangling fetch: GET /api/dashboard/scripted-replies (src/app/dashboard/agents/page.tsx:321)"}, "fullDescription": {"text": "`src/app/dashboard/agents/page.tsx:321` calls `GET /api/dashboard/scripted-replies` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/scripted-replies`\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-fe91741b41030fc9", "name": "Dangling fetch: GET /api/dashboard/settings (src/app/dashboard/agents/page.tsx:347)", "shortDescription": {"text": "Dangling fetch: GET /api/dashboard/settings (src/app/dashboard/agents/page.tsx:347)"}, "fullDescription": {"text": "`src/app/dashboard/agents/page.tsx:347` calls `GET /api/dashboard/settings` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/settings`\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-aa0004fb72dddc5b", "name": "Dangling fetch: GET /api/dashboard/knowledge (src/app/dashboard/agents/page.tsx:351)", "shortDescription": {"text": "Dangling fetch: GET /api/dashboard/knowledge (src/app/dashboard/agents/page.tsx:351)"}, "fullDescription": {"text": "`src/app/dashboard/agents/page.tsx:351` calls `GET /api/dashboard/knowledge` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/knowledge`\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-ea7965861394339c", "name": "Dangling fetch: GET /api/dashboard/scripted-replies (src/app/dashboard/agents/page.tsx:462)", "shortDescription": {"text": "Dangling fetch: GET /api/dashboard/scripted-replies (src/app/dashboard/agents/page.tsx:462)"}, "fullDescription": {"text": "`src/app/dashboard/agents/page.tsx:462` calls `GET /api/dashboard/scripted-replies` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/scripted-replies`\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-6ce9d46c49de89e3", "name": "Dangling fetch: POST /api/dashboard/scripted-replies (src/app/dashboard/agents/page.tsx:476)", "shortDescription": {"text": "Dangling fetch: POST /api/dashboard/scripted-replies (src/app/dashboard/agents/page.tsx:476)"}, "fullDescription": {"text": "`src/app/dashboard/agents/page.tsx:476` calls `POST /api/dashboard/scripted-replies` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/scripted-replies`\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-4ea93110bac4ad65", "name": "Dangling fetch: PATCH /api/dashboard/scripted-replies/${id} (src/app/dashboard/agents/page.tsx:497)", "shortDescription": {"text": "Dangling fetch: PATCH /api/dashboard/scripted-replies/${id} (src/app/dashboard/agents/page.tsx:497)"}, "fullDescription": {"text": "`src/app/dashboard/agents/page.tsx:497` calls `PATCH /api/dashboard/scripted-replies/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/scripted-replies/<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-0d425a2bb2e3fbd2", "name": "Dangling fetch: DELETE /api/dashboard/scripted-replies/${id} (src/app/dashboard/agents/page.tsx:506)", "shortDescription": {"text": "Dangling fetch: DELETE /api/dashboard/scripted-replies/${id} (src/app/dashboard/agents/page.tsx:506)"}, "fullDescription": {"text": "`src/app/dashboard/agents/page.tsx:506` calls `DELETE /api/dashboard/scripted-replies/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/scripted-replies/<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-e278318862b6eedf", "name": "Dangling fetch: POST /api/dashboard/scripted-replies/upload (src/app/dashboard/agents/page.tsx:517)", "shortDescription": {"text": "Dangling fetch: POST /api/dashboard/scripted-replies/upload (src/app/dashboard/agents/page.tsx:517)"}, "fullDescription": {"text": "`src/app/dashboard/agents/page.tsx:517` calls `POST /api/dashboard/scripted-replies/upload` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/scripted-replies/upload`\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-561494f62a77830e", "name": "Dangling fetch: GET /api/dashboard/knowledge (src/app/dashboard/agents/page.tsx:542)", "shortDescription": {"text": "Dangling fetch: GET /api/dashboard/knowledge (src/app/dashboard/agents/page.tsx:542)"}, "fullDescription": {"text": "`src/app/dashboard/agents/page.tsx:542` calls `GET /api/dashboard/knowledge` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/knowledge`\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-f7523a9539248d1c", "name": "Dangling fetch: POST /api/dashboard/knowledge (src/app/dashboard/agents/page.tsx:599)", "shortDescription": {"text": "Dangling fetch: POST /api/dashboard/knowledge (src/app/dashboard/agents/page.tsx:599)"}, "fullDescription": {"text": "`src/app/dashboard/agents/page.tsx:599` calls `POST /api/dashboard/knowledge` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/knowledge`\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-1a44a5997dd22175", "name": "Dangling fetch: DELETE /api/dashboard/knowledge?id=${docId} (src/app/dashboard/agents/page.tsx:627)", "shortDescription": {"text": "Dangling fetch: DELETE /api/dashboard/knowledge?id=${docId} (src/app/dashboard/agents/page.tsx:627)"}, "fullDescription": {"text": "`src/app/dashboard/agents/page.tsx:627` calls `DELETE /api/dashboard/knowledge?id=${docId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/knowledge`\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-e0c6829b0783c07a", "name": "Dangling fetch: POST /api/dashboard/playground (src/app/dashboard/agents/page.tsx:662)", "shortDescription": {"text": "Dangling fetch: POST /api/dashboard/playground (src/app/dashboard/agents/page.tsx:662)"}, "fullDescription": {"text": "`src/app/dashboard/agents/page.tsx:662` calls `POST /api/dashboard/playground` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/playground`\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-a203eadd4077b617", "name": "Dangling fetch: DELETE /api/dashboard/playground/reset (src/app/dashboard/agents/page.tsx:764)", "shortDescription": {"text": "Dangling fetch: DELETE /api/dashboard/playground/reset (src/app/dashboard/agents/page.tsx:764)"}, "fullDescription": {"text": "`src/app/dashboard/agents/page.tsx:764` calls `DELETE /api/dashboard/playground/reset` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/playground/reset`\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-665ee1c4445410e3", "name": "Dangling fetch: PATCH /api/dashboard/settings (src/app/dashboard/agents/page.tsx:776)", "shortDescription": {"text": "Dangling fetch: PATCH /api/dashboard/settings (src/app/dashboard/agents/page.tsx:776)"}, "fullDescription": {"text": "`src/app/dashboard/agents/page.tsx:776` calls `PATCH /api/dashboard/settings` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/settings`\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-0aaed96d5bff18d7", "name": "Dangling fetch: GET /api/dashboard/agents (src/app/dashboard/agents/_components/AgentsClient.tsx:32)", "shortDescription": {"text": "Dangling fetch: GET /api/dashboard/agents (src/app/dashboard/agents/_components/AgentsClient.tsx:32)"}, "fullDescription": {"text": "`src/app/dashboard/agents/_components/AgentsClient.tsx:32` calls `GET /api/dashboard/agents` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/agents`\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-a63f722d800c38fb", "name": "Dangling fetch: PUT /api/dashboard/agents/${editingAgent.id} (src/app/dashboard/agents/_components/AgentsClient.tsx:82)", "shortDescription": {"text": "Dangling fetch: PUT /api/dashboard/agents/${editingAgent.id} (src/app/dashboard/agents/_components/AgentsClient.tsx:82)"}, "fullDescription": {"text": "`src/app/dashboard/agents/_components/AgentsClient.tsx:82` calls `PUT /api/dashboard/agents/${editingAgent.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/agents/<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-dafd42962a7524b4", "name": "Dangling fetch: POST /api/dashboard/agents (src/app/dashboard/agents/_components/AgentsClient.tsx:88)", "shortDescription": {"text": "Dangling fetch: POST /api/dashboard/agents (src/app/dashboard/agents/_components/AgentsClient.tsx:88)"}, "fullDescription": {"text": "`src/app/dashboard/agents/_components/AgentsClient.tsx:88` calls `POST /api/dashboard/agents` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/agents`\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-483bace6f0036e66", "name": "Dangling fetch: DELETE /api/dashboard/agents/${id} (src/app/dashboard/agents/_components/AgentsClient.tsx:113)", "shortDescription": {"text": "Dangling fetch: DELETE /api/dashboard/agents/${id} (src/app/dashboard/agents/_components/AgentsClient.tsx:113)"}, "fullDescription": {"text": "`src/app/dashboard/agents/_components/AgentsClient.tsx:113` calls `DELETE /api/dashboard/agents/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/agents/<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-7636da29027cb28a", "name": "Dangling fetch: GET /api/dashboard/system/dlq (src/app/dashboard/system/dead-letter/page.tsx:51)", "shortDescription": {"text": "Dangling fetch: GET /api/dashboard/system/dlq (src/app/dashboard/system/dead-letter/page.tsx:51)"}, "fullDescription": {"text": "`src/app/dashboard/system/dead-letter/page.tsx:51` calls `GET /api/dashboard/system/dlq` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/system/dlq`\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-6938e2484ff353b0", "name": "Dangling fetch: POST /api/dashboard/system/dlq (src/app/dashboard/system/dead-letter/page.tsx:61)", "shortDescription": {"text": "Dangling fetch: POST /api/dashboard/system/dlq (src/app/dashboard/system/dead-letter/page.tsx:61)"}, "fullDescription": {"text": "`src/app/dashboard/system/dead-letter/page.tsx:61` calls `POST /api/dashboard/system/dlq` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/system/dlq`\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-dd512854d5638794", "name": "Dangling fetch: GET /api/dashboard/campaigns (src/app/dashboard/campaigns/_components/CampaignsClient.tsx:30)", "shortDescription": {"text": "Dangling fetch: GET /api/dashboard/campaigns (src/app/dashboard/campaigns/_components/CampaignsClient.tsx:30)"}, "fullDescription": {"text": "`src/app/dashboard/campaigns/_components/CampaignsClient.tsx:30` calls `GET /api/dashboard/campaigns` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/campaigns`\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-f7a5a427aec9d570", "name": "Dangling fetch: POST /api/dashboard/campaigns (src/app/dashboard/campaigns/_components/CampaignsClient.tsx:56)", "shortDescription": {"text": "Dangling fetch: POST /api/dashboard/campaigns (src/app/dashboard/campaigns/_components/CampaignsClient.tsx:56)"}, "fullDescription": {"text": "`src/app/dashboard/campaigns/_components/CampaignsClient.tsx:56` calls `POST /api/dashboard/campaigns` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/campaigns`\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-cf801a8f61939429", "name": "Dangling fetch: DELETE /api/dashboard/campaigns?id=${c.id} (src/app/dashboard/campaigns/_components/CampaignsClient.tsx:", "shortDescription": {"text": "Dangling fetch: DELETE /api/dashboard/campaigns?id=${c.id} (src/app/dashboard/campaigns/_components/CampaignsClient.tsx:81)"}, "fullDescription": {"text": "`src/app/dashboard/campaigns/_components/CampaignsClient.tsx:81` calls `DELETE /api/dashboard/campaigns?id=${c.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/campaigns`\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-9b022da8448ece2c", "name": "Dangling fetch: GET /api/dashboard/contacts?${params.toString()} (src/app/dashboard/contacts/_components/ContactsClient.", "shortDescription": {"text": "Dangling fetch: GET /api/dashboard/contacts?${params.toString()} (src/app/dashboard/contacts/_components/ContactsClient.tsx:169)"}, "fullDescription": {"text": "`src/app/dashboard/contacts/_components/ContactsClient.tsx:169` calls `GET /api/dashboard/contacts?${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: `/dashboard/contacts`\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-b51f57cc092f9ff9", "name": "Dangling fetch: POST /api/dashboard/contacts/import/check (src/app/dashboard/contacts/_components/ContactsClient.tsx:283", "shortDescription": {"text": "Dangling fetch: POST /api/dashboard/contacts/import/check (src/app/dashboard/contacts/_components/ContactsClient.tsx:283)"}, "fullDescription": {"text": "`src/app/dashboard/contacts/_components/ContactsClient.tsx:283` calls `POST /api/dashboard/contacts/import/check` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/contacts/import/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-215cc45be330057c", "name": "Dangling fetch: POST /api/dashboard/contacts (src/app/dashboard/contacts/_components/ContactsClient.tsx:323)", "shortDescription": {"text": "Dangling fetch: POST /api/dashboard/contacts (src/app/dashboard/contacts/_components/ContactsClient.tsx:323)"}, "fullDescription": {"text": "`src/app/dashboard/contacts/_components/ContactsClient.tsx:323` calls `POST /api/dashboard/contacts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/contacts`\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-3a873be30a4b6342", "name": "Dangling fetch: PATCH /api/dashboard/contacts/${selectedContactId} (src/app/dashboard/contacts/_components/ContactsClien", "shortDescription": {"text": "Dangling fetch: PATCH /api/dashboard/contacts/${selectedContactId} (src/app/dashboard/contacts/_components/ContactsClient.tsx:370)"}, "fullDescription": {"text": "`src/app/dashboard/contacts/_components/ContactsClient.tsx:370` calls `PATCH /api/dashboard/contacts/${selectedContactId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/contacts/<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-4e7cca0066d5f635", "name": "Dangling fetch: DELETE /api/dashboard/contacts/${selectedContactId} (src/app/dashboard/contacts/_components/ContactsClie", "shortDescription": {"text": "Dangling fetch: DELETE /api/dashboard/contacts/${selectedContactId} (src/app/dashboard/contacts/_components/ContactsClient.tsx:408)"}, "fullDescription": {"text": "`src/app/dashboard/contacts/_components/ContactsClient.tsx:408` calls `DELETE /api/dashboard/contacts/${selectedContactId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/contacts/<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-b43103812a25443f", "name": "Dangling fetch: POST /api/dashboard/contacts/import/check (src/app/dashboard/contacts/_components/ContactsClient.tsx:496", "shortDescription": {"text": "Dangling fetch: POST /api/dashboard/contacts/import/check (src/app/dashboard/contacts/_components/ContactsClient.tsx:496)"}, "fullDescription": {"text": "`src/app/dashboard/contacts/_components/ContactsClient.tsx:496` calls `POST /api/dashboard/contacts/import/check` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/contacts/import/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-7f013141447af5b8", "name": "Dangling fetch: POST /api/dashboard/contacts/import?${params.toString()} (src/app/dashboard/contacts/_components/Contact", "shortDescription": {"text": "Dangling fetch: POST /api/dashboard/contacts/import?${params.toString()} (src/app/dashboard/contacts/_components/ContactsClient.tsx:541)"}, "fullDescription": {"text": "`src/app/dashboard/contacts/_components/ContactsClient.tsx:541` calls `POST /api/dashboard/contacts/import?${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: `/dashboard/contacts/import`\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-45eaa071aa26fe52", "name": "Dangling fetch: GET /api/dashboard/automations (src/app/dashboard/automations/_components/AutomationsClient.tsx:85)", "shortDescription": {"text": "Dangling fetch: GET /api/dashboard/automations (src/app/dashboard/automations/_components/AutomationsClient.tsx:85)"}, "fullDescription": {"text": "`src/app/dashboard/automations/_components/AutomationsClient.tsx:85` calls `GET /api/dashboard/automations` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/automations`\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-6905f1bdd665611a", "name": "Dangling fetch: POST /api/dashboard/automations (src/app/dashboard/automations/_components/AutomationsClient.tsx:115)", "shortDescription": {"text": "Dangling fetch: POST /api/dashboard/automations (src/app/dashboard/automations/_components/AutomationsClient.tsx:115)"}, "fullDescription": {"text": "`src/app/dashboard/automations/_components/AutomationsClient.tsx:115` calls `POST /api/dashboard/automations` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/automations`\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-3f8edd52689cc934", "name": "Dangling fetch: PUT /api/dashboard/automations/${draft.id} (src/app/dashboard/automations/_components/AutomationsClient.", "shortDescription": {"text": "Dangling fetch: PUT /api/dashboard/automations/${draft.id} (src/app/dashboard/automations/_components/AutomationsClient.tsx:123)"}, "fullDescription": {"text": "`src/app/dashboard/automations/_components/AutomationsClient.tsx:123` calls `PUT /api/dashboard/automations/${draft.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/automations/<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-a31a83a2c3793785", "name": "Dangling fetch: DELETE /api/dashboard/automations/${id} (src/app/dashboard/automations/_components/AutomationsClient.tsx", "shortDescription": {"text": "Dangling fetch: DELETE /api/dashboard/automations/${id} (src/app/dashboard/automations/_components/AutomationsClient.tsx:144)"}, "fullDescription": {"text": "`src/app/dashboard/automations/_components/AutomationsClient.tsx:144` calls `DELETE /api/dashboard/automations/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/automations/<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-fc10b3781130a847", "name": "Dangling fetch: PATCH /api/dashboard/automations/${rule.id} (src/app/dashboard/automations/_components/AutomationsClient", "shortDescription": {"text": "Dangling fetch: PATCH /api/dashboard/automations/${rule.id} (src/app/dashboard/automations/_components/AutomationsClient.tsx:159)"}, "fullDescription": {"text": "`src/app/dashboard/automations/_components/AutomationsClient.tsx:159` calls `PATCH /api/dashboard/automations/${rule.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/automations/<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-e23e4ee90db68e5a", "name": "Dangling fetch: GET /api/restaurant/blocked-dates?month=${toMonthStr(year, month)} (src/app/dashboard/restaurant/blocked", "shortDescription": {"text": "Dangling fetch: GET /api/restaurant/blocked-dates?month=${toMonthStr(year, month)} (src/app/dashboard/restaurant/blocked-dates/_components/BlockedDatesClient.tsx:70)"}, "fullDescription": {"text": "`src/app/dashboard/restaurant/blocked-dates/_components/BlockedDatesClient.tsx:70` calls `GET /api/restaurant/blocked-dates?month=${toMonthStr(year, month)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/restaurant/blocked-dates`\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-811b1da0056b4479", "name": "Dangling fetch: POST /api/restaurant/blocked-dates (src/app/dashboard/restaurant/blocked-dates/_components/BlockedDatesC", "shortDescription": {"text": "Dangling fetch: POST /api/restaurant/blocked-dates (src/app/dashboard/restaurant/blocked-dates/_components/BlockedDatesClient.tsx:100)"}, "fullDescription": {"text": "`src/app/dashboard/restaurant/blocked-dates/_components/BlockedDatesClient.tsx:100` calls `POST /api/restaurant/blocked-dates` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/restaurant/blocked-dates`\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-6ac33b7e3febd112", "name": "Dangling fetch: DELETE /api/restaurant/blocked-dates/${id} (src/app/dashboard/restaurant/blocked-dates/_components/Block", "shortDescription": {"text": "Dangling fetch: DELETE /api/restaurant/blocked-dates/${id} (src/app/dashboard/restaurant/blocked-dates/_components/BlockedDatesClient.tsx:122)"}, "fullDescription": {"text": "`src/app/dashboard/restaurant/blocked-dates/_components/BlockedDatesClient.tsx:122` calls `DELETE /api/restaurant/blocked-dates/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/restaurant/blocked-dates/<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-c00f1813cad96d42", "name": "Dangling fetch: GET /api/restaurant/guests/calendar?year=${y}&month=${m} (src/app/dashboard/restaurant/guests/_component", "shortDescription": {"text": "Dangling fetch: GET /api/restaurant/guests/calendar?year=${y}&month=${m} (src/app/dashboard/restaurant/guests/_components/GuestsClient.tsx:142)"}, "fullDescription": {"text": "`src/app/dashboard/restaurant/guests/_components/GuestsClient.tsx:142` calls `GET /api/restaurant/guests/calendar?year=${y}&month=${m}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/restaurant/guests/calendar`\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-4b4e8d060fc59a07", "name": "Dangling fetch: GET /api/restaurant/bookings?date=${date} (src/app/dashboard/restaurant/guests/_components/GuestsClient.", "shortDescription": {"text": "Dangling fetch: GET /api/restaurant/bookings?date=${date} (src/app/dashboard/restaurant/guests/_components/GuestsClient.tsx:164)"}, "fullDescription": {"text": "`src/app/dashboard/restaurant/guests/_components/GuestsClient.tsx:164` calls `GET /api/restaurant/bookings?date=${date}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/restaurant/bookings`\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-79d51002a1d80bc4", "name": "Dangling fetch: GET /api/restaurant/guests?phone=${g.customer_phone}&name=${encodeURIComponent(g.customer_name)} (src/ap", "shortDescription": {"text": "Dangling fetch: GET /api/restaurant/guests?phone=${g.customer_phone}&name=${encodeURIComponent(g.customer_name)} (src/app/dashboard/restaurant/guests/_components/GuestsClient.tsx:189)"}, "fullDescription": {"text": "`src/app/dashboard/restaurant/guests/_components/GuestsClient.tsx:189` calls `GET /api/restaurant/guests?phone=${g.customer_phone}&name=${encodeURIComponent(g.customer_name)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/restaurant/guests`\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-48ff20d9c9251141", "name": "Dangling fetch: GET /api/restaurant/bookings?${params} (src/app/dashboard/restaurant/bookings/_components/BookingsClient", "shortDescription": {"text": "Dangling fetch: GET /api/restaurant/bookings?${params} (src/app/dashboard/restaurant/bookings/_components/BookingsClient.tsx:214)"}, "fullDescription": {"text": "`src/app/dashboard/restaurant/bookings/_components/BookingsClient.tsx:214` calls `GET /api/restaurant/bookings?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/restaurant/bookings`\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-243e395a27e3029a", "name": "Dangling fetch: GET /api/restaurant/slots (src/app/dashboard/restaurant/bookings/_components/BookingsClient.tsx:228)", "shortDescription": {"text": "Dangling fetch: GET /api/restaurant/slots (src/app/dashboard/restaurant/bookings/_components/BookingsClient.tsx:228)"}, "fullDescription": {"text": "`src/app/dashboard/restaurant/bookings/_components/BookingsClient.tsx:228` calls `GET /api/restaurant/slots` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/restaurant/slots`\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-d4a57cd5bc683c80", "name": "Dangling fetch: PATCH /api/restaurant/bookings/${bookingId}/status (src/app/dashboard/restaurant/bookings/_components/Bo", "shortDescription": {"text": "Dangling fetch: PATCH /api/restaurant/bookings/${bookingId}/status (src/app/dashboard/restaurant/bookings/_components/BookingsClient.tsx:258)"}, "fullDescription": {"text": "`src/app/dashboard/restaurant/bookings/_components/BookingsClient.tsx:258` calls `PATCH /api/restaurant/bookings/${bookingId}/status` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/restaurant/bookings/<p>/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-55cc7b664e776508", "name": "Dangling fetch: POST /api/restaurant/bookings (src/app/dashboard/restaurant/bookings/_components/BookingsClient.tsx:274)", "shortDescription": {"text": "Dangling fetch: POST /api/restaurant/bookings (src/app/dashboard/restaurant/bookings/_components/BookingsClient.tsx:274)"}, "fullDescription": {"text": "`src/app/dashboard/restaurant/bookings/_components/BookingsClient.tsx:274` calls `POST /api/restaurant/bookings` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/restaurant/bookings`\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-7c2801c188623b31", "name": "Dangling fetch: PATCH /api/restaurant/bookings/${editBooking.id} (src/app/dashboard/restaurant/bookings/_components/Book", "shortDescription": {"text": "Dangling fetch: PATCH /api/restaurant/bookings/${editBooking.id} (src/app/dashboard/restaurant/bookings/_components/BookingsClient.tsx:308)"}, "fullDescription": {"text": "`src/app/dashboard/restaurant/bookings/_components/BookingsClient.tsx:308` calls `PATCH /api/restaurant/bookings/${editBooking.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/restaurant/bookings/<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-7183105008c634c1", "name": "Dangling fetch: GET /api/restaurant/guests?phone=${booking.customer_phone}&name=${encodeURIComponent(booking.customer_na", "shortDescription": {"text": "Dangling fetch: GET /api/restaurant/guests?phone=${booking.customer_phone}&name=${encodeURIComponent(booking.customer_name)} (src/app/dashboard/restaurant/bookings/_components/BookingsClient.tsx:331)"}, "fullDescription": {"text": "`src/app/dashboard/restaurant/bookings/_components/BookingsClient.tsx:331` calls `GET /api/restaurant/guests?phone=${booking.customer_phone}&name=${encodeURIComponent(booking.customer_name)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/restaurant/guests`\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-7e9b991fcb9c69af", "name": "Dangling fetch: POST /api/restaurant/bookings/import (src/app/dashboard/restaurant/bookings/_components/BookingsClient.t", "shortDescription": {"text": "Dangling fetch: POST /api/restaurant/bookings/import (src/app/dashboard/restaurant/bookings/_components/BookingsClient.tsx:410)"}, "fullDescription": {"text": "`src/app/dashboard/restaurant/bookings/_components/BookingsClient.tsx:410` calls `POST /api/restaurant/bookings/import` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/restaurant/bookings/import`\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-1b96707788159f3f", "name": "Dangling fetch: PATCH /api/restaurant/guests (src/app/dashboard/restaurant/bookings/_components/GuestProfilePanel.tsx:71", "shortDescription": {"text": "Dangling fetch: PATCH /api/restaurant/guests (src/app/dashboard/restaurant/bookings/_components/GuestProfilePanel.tsx:71)"}, "fullDescription": {"text": "`src/app/dashboard/restaurant/bookings/_components/GuestProfilePanel.tsx:71` calls `PATCH /api/restaurant/guests` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/restaurant/guests`\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-928963dbd25684fa", "name": "Dangling fetch: GET /api/restaurant/slots?date=${today} (src/app/dashboard/restaurant/slots/_components/SlotsClient.tsx:", "shortDescription": {"text": "Dangling fetch: GET /api/restaurant/slots?date=${today} (src/app/dashboard/restaurant/slots/_components/SlotsClient.tsx:51)"}, "fullDescription": {"text": "`src/app/dashboard/restaurant/slots/_components/SlotsClient.tsx:51` calls `GET /api/restaurant/slots?date=${today}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/restaurant/slots`\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-c58722701757d011", "name": "Dangling fetch: POST /api/restaurant/slots (src/app/dashboard/restaurant/slots/_components/SlotsClient.tsx:71)", "shortDescription": {"text": "Dangling fetch: POST /api/restaurant/slots (src/app/dashboard/restaurant/slots/_components/SlotsClient.tsx:71)"}, "fullDescription": {"text": "`src/app/dashboard/restaurant/slots/_components/SlotsClient.tsx:71` calls `POST /api/restaurant/slots` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/restaurant/slots`\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-a67eb0516ee05248", "name": "Dangling fetch: PUT /api/restaurant/slots/${slotId} (src/app/dashboard/restaurant/slots/_components/SlotsClient.tsx:105)", "shortDescription": {"text": "Dangling fetch: PUT /api/restaurant/slots/${slotId} (src/app/dashboard/restaurant/slots/_components/SlotsClient.tsx:105)"}, "fullDescription": {"text": "`src/app/dashboard/restaurant/slots/_components/SlotsClient.tsx:105` calls `PUT /api/restaurant/slots/${slotId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/restaurant/slots/<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-0748d76f31b7ae7b", "name": "Dangling fetch: DELETE /api/restaurant/slots/${slotId} (src/app/dashboard/restaurant/slots/_components/SlotsClient.tsx:1", "shortDescription": {"text": "Dangling fetch: DELETE /api/restaurant/slots/${slotId} (src/app/dashboard/restaurant/slots/_components/SlotsClient.tsx:128)"}, "fullDescription": {"text": "`src/app/dashboard/restaurant/slots/_components/SlotsClient.tsx:128` calls `DELETE /api/restaurant/slots/${slotId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/restaurant/slots/<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-f230e902b60bf25e", "name": "Dangling fetch: GET /api/restaurant/tables (src/app/dashboard/restaurant/tables/_components/use-tables-api.ts:95)", "shortDescription": {"text": "Dangling fetch: GET /api/restaurant/tables (src/app/dashboard/restaurant/tables/_components/use-tables-api.ts:95)"}, "fullDescription": {"text": "`src/app/dashboard/restaurant/tables/_components/use-tables-api.ts:95` calls `GET /api/restaurant/tables` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/restaurant/tables`\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-08806ae8302896a7", "name": "Dangling fetch: POST /api/restaurant/tables/cycle (src/app/dashboard/restaurant/tables/_components/use-tables-api.ts:145", "shortDescription": {"text": "Dangling fetch: POST /api/restaurant/tables/cycle (src/app/dashboard/restaurant/tables/_components/use-tables-api.ts:145)"}, "fullDescription": {"text": "`src/app/dashboard/restaurant/tables/_components/use-tables-api.ts:145` calls `POST /api/restaurant/tables/cycle` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/restaurant/tables/cycle`\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-81aca2a7b9c0dff6", "name": "Dangling fetch: POST /api/restaurant/tables/walk-in (src/app/dashboard/restaurant/tables/_components/use-tables-api.ts:1", "shortDescription": {"text": "Dangling fetch: POST /api/restaurant/tables/walk-in (src/app/dashboard/restaurant/tables/_components/use-tables-api.ts:159)"}, "fullDescription": {"text": "`src/app/dashboard/restaurant/tables/_components/use-tables-api.ts:159` calls `POST /api/restaurant/tables/walk-in` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/restaurant/tables/walk-in`\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-05433bddeaf60883", "name": "Dangling fetch: POST /api/restaurant/tables/reserve (src/app/dashboard/restaurant/tables/_components/use-tables-api.ts:1", "shortDescription": {"text": "Dangling fetch: POST /api/restaurant/tables/reserve (src/app/dashboard/restaurant/tables/_components/use-tables-api.ts:181)"}, "fullDescription": {"text": "`src/app/dashboard/restaurant/tables/_components/use-tables-api.ts:181` calls `POST /api/restaurant/tables/reserve` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/restaurant/tables/reserve`\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-398ebc6b0aede33d", "name": "Dangling fetch: POST /api/restaurant/tables (src/app/dashboard/restaurant/tables/_components/TablesClient.tsx:565)", "shortDescription": {"text": "Dangling fetch: POST /api/restaurant/tables (src/app/dashboard/restaurant/tables/_components/TablesClient.tsx:565)"}, "fullDescription": {"text": "`src/app/dashboard/restaurant/tables/_components/TablesClient.tsx:565` calls `POST /api/restaurant/tables` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/restaurant/tables`\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-793073b94d8db586", "name": "Dangling fetch: GET /api/restaurant/waitlist?date=${selectedDate} (src/app/dashboard/restaurant/waitlist/_components/Wai", "shortDescription": {"text": "Dangling fetch: GET /api/restaurant/waitlist?date=${selectedDate} (src/app/dashboard/restaurant/waitlist/_components/WaitlistClient.tsx:55)"}, "fullDescription": {"text": "`src/app/dashboard/restaurant/waitlist/_components/WaitlistClient.tsx:55` calls `GET /api/restaurant/waitlist?date=${selectedDate}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/restaurant/waitlist`\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-b456d2869f20737b", "name": "Dangling fetch: GET /api/restaurant/guests/list (src/app/dashboard/restaurant/waitlist/_components/WaitlistClient.tsx:63", "shortDescription": {"text": "Dangling fetch: GET /api/restaurant/guests/list (src/app/dashboard/restaurant/waitlist/_components/WaitlistClient.tsx:63)"}, "fullDescription": {"text": "`src/app/dashboard/restaurant/waitlist/_components/WaitlistClient.tsx:63` calls `GET /api/restaurant/guests/list` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/restaurant/guests/list`\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-fdca991a0cd01a27", "name": "Dangling fetch: GET /api/restaurant/slots (src/app/dashboard/restaurant/waitlist/_components/WaitlistClient.tsx:84)", "shortDescription": {"text": "Dangling fetch: GET /api/restaurant/slots (src/app/dashboard/restaurant/waitlist/_components/WaitlistClient.tsx:84)"}, "fullDescription": {"text": "`src/app/dashboard/restaurant/waitlist/_components/WaitlistClient.tsx:84` calls `GET /api/restaurant/slots` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/restaurant/slots`\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-47fa3358e2f05bb4", "name": "Dangling fetch: PATCH /api/restaurant/waitlist/${id} (src/app/dashboard/restaurant/waitlist/_components/WaitlistClient.t", "shortDescription": {"text": "Dangling fetch: PATCH /api/restaurant/waitlist/${id} (src/app/dashboard/restaurant/waitlist/_components/WaitlistClient.tsx:97)"}, "fullDescription": {"text": "`src/app/dashboard/restaurant/waitlist/_components/WaitlistClient.tsx:97` calls `PATCH /api/restaurant/waitlist/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/restaurant/waitlist/<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-484b095f770ee8a1", "name": "Dangling fetch: POST /api/restaurant/waitlist (src/app/dashboard/restaurant/waitlist/_components/WaitlistClient.tsx:134)", "shortDescription": {"text": "Dangling fetch: POST /api/restaurant/waitlist (src/app/dashboard/restaurant/waitlist/_components/WaitlistClient.tsx:134)"}, "fullDescription": {"text": "`src/app/dashboard/restaurant/waitlist/_components/WaitlistClient.tsx:134` calls `POST /api/restaurant/waitlist` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/restaurant/waitlist`\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-d5e326658b5372a5", "name": "Dangling fetch: GET /api/restaurant/overview (src/app/dashboard/restaurant/_components/RestaurantOverviewClient.tsx:352)", "shortDescription": {"text": "Dangling fetch: GET /api/restaurant/overview (src/app/dashboard/restaurant/_components/RestaurantOverviewClient.tsx:352)"}, "fullDescription": {"text": "`src/app/dashboard/restaurant/_components/RestaurantOverviewClient.tsx:352` calls `GET /api/restaurant/overview` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/restaurant/overview`\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-90bd6647ca19a9e6", "name": "Dangling fetch: GET /api/restaurant/slots?date=${today} (src/app/dashboard/restaurant/_components/RestaurantOverviewClie", "shortDescription": {"text": "Dangling fetch: GET /api/restaurant/slots?date=${today} (src/app/dashboard/restaurant/_components/RestaurantOverviewClient.tsx:353)"}, "fullDescription": {"text": "`src/app/dashboard/restaurant/_components/RestaurantOverviewClient.tsx:353` calls `GET /api/restaurant/slots?date=${today}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/restaurant/slots`\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-5498b58a07fa6414", "name": "Dangling fetch: GET /api/restaurant/settings (src/app/dashboard/restaurant/_components/WhatsAppFlowDemo.tsx:52)", "shortDescription": {"text": "Dangling fetch: GET /api/restaurant/settings (src/app/dashboard/restaurant/_components/WhatsAppFlowDemo.tsx:52)"}, "fullDescription": {"text": "`src/app/dashboard/restaurant/_components/WhatsAppFlowDemo.tsx:52` calls `GET /api/restaurant/settings` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/restaurant/settings`\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-12a657768b480bd9", "name": "Dangling fetch: GET /api/dashboard/conversations?limit=5&active=false (src/app/dashboard/_sections/RecentChats.tsx:66)", "shortDescription": {"text": "Dangling fetch: GET /api/dashboard/conversations?limit=5&active=false (src/app/dashboard/_sections/RecentChats.tsx:66)"}, "fullDescription": {"text": "`src/app/dashboard/_sections/RecentChats.tsx:66` calls `GET /api/dashboard/conversations?limit=5&active=false` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/conversations`\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-bf63122226f834ab", "name": "Dangling fetch: GET /api/dashboard/stats (src/app/dashboard/_sections/QuickActions.tsx:17)", "shortDescription": {"text": "Dangling fetch: GET /api/dashboard/stats (src/app/dashboard/_sections/QuickActions.tsx:17)"}, "fullDescription": {"text": "`src/app/dashboard/_sections/QuickActions.tsx:17` calls `GET /api/dashboard/stats` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/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-b03702defaff6daa", "name": "Dangling fetch: GET /api/dashboard/stats (src/app/dashboard/_sections/DashboardMetrics.tsx:33)", "shortDescription": {"text": "Dangling fetch: GET /api/dashboard/stats (src/app/dashboard/_sections/DashboardMetrics.tsx:33)"}, "fullDescription": {"text": "`src/app/dashboard/_sections/DashboardMetrics.tsx:33` calls `GET /api/dashboard/stats` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/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-dba61f4f28cebda1", "name": "Dangling fetch: GET /api/meta-ads/leads/${leadId} (src/app/dashboard/meta-ads/_components/MetaAdsLeadsClient.tsx:32)", "shortDescription": {"text": "Dangling fetch: GET /api/meta-ads/leads/${leadId} (src/app/dashboard/meta-ads/_components/MetaAdsLeadsClient.tsx:32)"}, "fullDescription": {"text": "`src/app/dashboard/meta-ads/_components/MetaAdsLeadsClient.tsx:32` calls `GET /api/meta-ads/leads/${leadId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/meta-ads/leads/<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-2911a90062d26271", "name": "Dangling fetch: GET /api/meta-ads/leads?${params} (src/app/dashboard/meta-ads/_components/MetaAdsLeadsClient.tsx:102)", "shortDescription": {"text": "Dangling fetch: GET /api/meta-ads/leads?${params} (src/app/dashboard/meta-ads/_components/MetaAdsLeadsClient.tsx:102)"}, "fullDescription": {"text": "`src/app/dashboard/meta-ads/_components/MetaAdsLeadsClient.tsx:102` calls `GET /api/meta-ads/leads?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/meta-ads/leads`\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-1939bc18154fc579", "name": "Dangling fetch: GET /api/meta-ads/accounts (src/app/dashboard/meta-ads/_components/CampaignWizardModal.tsx:144)", "shortDescription": {"text": "Dangling fetch: GET /api/meta-ads/accounts (src/app/dashboard/meta-ads/_components/CampaignWizardModal.tsx:144)"}, "fullDescription": {"text": "`src/app/dashboard/meta-ads/_components/CampaignWizardModal.tsx:144` calls `GET /api/meta-ads/accounts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/meta-ads/accounts`\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-a15382292ebf7d01", "name": "Dangling fetch: POST /api/meta-ads/campaigns (src/app/dashboard/meta-ads/_components/CampaignWizardModal.tsx:197)", "shortDescription": {"text": "Dangling fetch: POST /api/meta-ads/campaigns (src/app/dashboard/meta-ads/_components/CampaignWizardModal.tsx:197)"}, "fullDescription": {"text": "`src/app/dashboard/meta-ads/_components/CampaignWizardModal.tsx:197` calls `POST /api/meta-ads/campaigns` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/meta-ads/campaigns`\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-996e180cf89cc4d5", "name": "Dangling fetch: POST /api/meta-ads/campaigns/${campaign.id}/publish (src/app/dashboard/meta-ads/_components/CampaignWiza", "shortDescription": {"text": "Dangling fetch: POST /api/meta-ads/campaigns/${campaign.id}/publish (src/app/dashboard/meta-ads/_components/CampaignWizardModal.tsx:212)"}, "fullDescription": {"text": "`src/app/dashboard/meta-ads/_components/CampaignWizardModal.tsx:212` calls `POST /api/meta-ads/campaigns/${campaign.id}/publish` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/meta-ads/campaigns/<p>/publish`\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-71d2bb4c1d408cba", "name": "Dangling fetch: GET /api/meta-ads/status (src/app/dashboard/meta-ads/_components/MetaAdsSettingsClient.tsx:154)", "shortDescription": {"text": "Dangling fetch: GET /api/meta-ads/status (src/app/dashboard/meta-ads/_components/MetaAdsSettingsClient.tsx:154)"}, "fullDescription": {"text": "`src/app/dashboard/meta-ads/_components/MetaAdsSettingsClient.tsx:154` calls `GET /api/meta-ads/status` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/meta-ads/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-d645e688aeba1a57", "name": "Dangling fetch: GET /api/meta-ads/accounts (src/app/dashboard/meta-ads/_components/MetaAdsSettingsClient.tsx:155)", "shortDescription": {"text": "Dangling fetch: GET /api/meta-ads/accounts (src/app/dashboard/meta-ads/_components/MetaAdsSettingsClient.tsx:155)"}, "fullDescription": {"text": "`src/app/dashboard/meta-ads/_components/MetaAdsSettingsClient.tsx:155` calls `GET /api/meta-ads/accounts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/meta-ads/accounts`\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-bf99a01ead8a5d71", "name": "Dangling fetch: GET /api/meta-ads/connect (src/app/dashboard/meta-ads/_components/MetaAdsSettingsClient.tsx:171)", "shortDescription": {"text": "Dangling fetch: GET /api/meta-ads/connect (src/app/dashboard/meta-ads/_components/MetaAdsSettingsClient.tsx:171)"}, "fullDescription": {"text": "`src/app/dashboard/meta-ads/_components/MetaAdsSettingsClient.tsx:171` calls `GET /api/meta-ads/connect` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/meta-ads/connect`\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-f5705b15d21c3038", "name": "Dangling fetch: POST /api/meta-ads/sync (src/app/dashboard/meta-ads/_components/MetaAdsSettingsClient.tsx:185)", "shortDescription": {"text": "Dangling fetch: POST /api/meta-ads/sync (src/app/dashboard/meta-ads/_components/MetaAdsSettingsClient.tsx:185)"}, "fullDescription": {"text": "`src/app/dashboard/meta-ads/_components/MetaAdsSettingsClient.tsx:185` calls `POST /api/meta-ads/sync` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/meta-ads/sync`\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-f02d990c4dca283f", "name": "Dangling fetch: POST /api/meta-ads/disconnect (src/app/dashboard/meta-ads/_components/MetaAdsSettingsClient.tsx:205)", "shortDescription": {"text": "Dangling fetch: POST /api/meta-ads/disconnect (src/app/dashboard/meta-ads/_components/MetaAdsSettingsClient.tsx:205)"}, "fullDescription": {"text": "`src/app/dashboard/meta-ads/_components/MetaAdsSettingsClient.tsx:205` calls `POST /api/meta-ads/disconnect` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/meta-ads/disconnect`\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-0bd16ae797ef274d", "name": "Dangling fetch: PATCH /api/meta-ads/accounts (src/app/dashboard/meta-ads/_components/MetaAdsSettingsClient.tsx:221)", "shortDescription": {"text": "Dangling fetch: PATCH /api/meta-ads/accounts (src/app/dashboard/meta-ads/_components/MetaAdsSettingsClient.tsx:221)"}, "fullDescription": {"text": "`src/app/dashboard/meta-ads/_components/MetaAdsSettingsClient.tsx:221` calls `PATCH /api/meta-ads/accounts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/meta-ads/accounts`\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-05a735357d0b4e5e", "name": "Dangling fetch: GET /api/meta-ads/campaigns?${params} (src/app/dashboard/meta-ads/_components/MetaAdsDashboardClient.tsx", "shortDescription": {"text": "Dangling fetch: GET /api/meta-ads/campaigns?${params} (src/app/dashboard/meta-ads/_components/MetaAdsDashboardClient.tsx:86)"}, "fullDescription": {"text": "`src/app/dashboard/meta-ads/_components/MetaAdsDashboardClient.tsx:86` calls `GET /api/meta-ads/campaigns?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/meta-ads/campaigns`\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-49fb8b8c57f47d34", "name": "Dangling fetch: PATCH /api/meta-ads/campaigns/${id} (src/app/dashboard/meta-ads/_components/MetaAdsDashboardClient.tsx:1", "shortDescription": {"text": "Dangling fetch: PATCH /api/meta-ads/campaigns/${id} (src/app/dashboard/meta-ads/_components/MetaAdsDashboardClient.tsx:107)"}, "fullDescription": {"text": "`src/app/dashboard/meta-ads/_components/MetaAdsDashboardClient.tsx:107` calls `PATCH /api/meta-ads/campaigns/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/meta-ads/campaigns/<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-15edc465db71b702", "name": "Dangling fetch: DELETE /api/meta-ads/campaigns/${id} (src/app/dashboard/meta-ads/_components/MetaAdsDashboardClient.tsx:", "shortDescription": {"text": "Dangling fetch: DELETE /api/meta-ads/campaigns/${id} (src/app/dashboard/meta-ads/_components/MetaAdsDashboardClient.tsx:123)"}, "fullDescription": {"text": "`src/app/dashboard/meta-ads/_components/MetaAdsDashboardClient.tsx:123` calls `DELETE /api/meta-ads/campaigns/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/meta-ads/campaigns/<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-fac6efb689e90edb", "name": "Dangling fetch: POST /api/meta-ads/campaigns/${c.id}/publish (src/app/dashboard/meta-ads/_components/MetaAdsDashboardCli", "shortDescription": {"text": "Dangling fetch: POST /api/meta-ads/campaigns/${c.id}/publish (src/app/dashboard/meta-ads/_components/MetaAdsDashboardClient.tsx:324)"}, "fullDescription": {"text": "`src/app/dashboard/meta-ads/_components/MetaAdsDashboardClient.tsx:324` calls `POST /api/meta-ads/campaigns/${c.id}/publish` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/meta-ads/campaigns/<p>/publish`\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-1beba3b28acb9edb", "name": "Dangling fetch: GET /api/meta-ads/analytics?filter=${filter} (src/app/dashboard/meta-ads/_components/MetaAdsAnalyticsCli", "shortDescription": {"text": "Dangling fetch: GET /api/meta-ads/analytics?filter=${filter} (src/app/dashboard/meta-ads/_components/MetaAdsAnalyticsClient.tsx:103)"}, "fullDescription": {"text": "`src/app/dashboard/meta-ads/_components/MetaAdsAnalyticsClient.tsx:103` calls `GET /api/meta-ads/analytics?filter=${filter}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/meta-ads/analytics`\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-955eafd412f5719c", "name": "Dangling fetch: GET /api/meta-ads/campaigns/${id} (src/app/dashboard/meta-ads/_components/CampaignDetailClient.tsx:46)", "shortDescription": {"text": "Dangling fetch: GET /api/meta-ads/campaigns/${id} (src/app/dashboard/meta-ads/_components/CampaignDetailClient.tsx:46)"}, "fullDescription": {"text": "`src/app/dashboard/meta-ads/_components/CampaignDetailClient.tsx:46` calls `GET /api/meta-ads/campaigns/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/meta-ads/campaigns/<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-843d8551a9272f87", "name": "Dangling fetch: PATCH /api/meta-ads/campaigns/${id} (src/app/dashboard/meta-ads/_components/CampaignDetailClient.tsx:59)", "shortDescription": {"text": "Dangling fetch: PATCH /api/meta-ads/campaigns/${id} (src/app/dashboard/meta-ads/_components/CampaignDetailClient.tsx:59)"}, "fullDescription": {"text": "`src/app/dashboard/meta-ads/_components/CampaignDetailClient.tsx:59` calls `PATCH /api/meta-ads/campaigns/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/meta-ads/campaigns/<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-0f56222ddc2a430e", "name": "Dangling fetch: POST /api/meta-ads/campaigns/${id}/publish (src/app/dashboard/meta-ads/_components/CampaignDetailClient.", "shortDescription": {"text": "Dangling fetch: POST /api/meta-ads/campaigns/${id}/publish (src/app/dashboard/meta-ads/_components/CampaignDetailClient.tsx:77)"}, "fullDescription": {"text": "`src/app/dashboard/meta-ads/_components/CampaignDetailClient.tsx:77` calls `POST /api/meta-ads/campaigns/${id}/publish` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/meta-ads/campaigns/<p>/publish`\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-e62190fba5faa552", "name": "Dangling fetch: POST /api/auth/send-otp (src/app/signup/page.tsx:88)", "shortDescription": {"text": "Dangling fetch: POST /api/auth/send-otp (src/app/signup/page.tsx:88)"}, "fullDescription": {"text": "`src/app/signup/page.tsx:88` calls `POST /api/auth/send-otp` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/send-otp`\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-030255bb714f67b6", "name": "Dangling fetch: POST /api/auth/verify-otp (src/app/signup/page.tsx:111)", "shortDescription": {"text": "Dangling fetch: POST /api/auth/verify-otp (src/app/signup/page.tsx:111)"}, "fullDescription": {"text": "`src/app/signup/page.tsx:111` calls `POST /api/auth/verify-otp` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/verify-otp`\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-9db02c1cc74c5999", "name": "Dangling fetch: POST /api/auth/provision (src/app/signup/page.tsx:127)", "shortDescription": {"text": "Dangling fetch: POST /api/auth/provision (src/app/signup/page.tsx:127)"}, "fullDescription": {"text": "`src/app/signup/page.tsx:127` calls `POST /api/auth/provision` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/provision`\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-a98b8fea3db90544", "name": "Dangling fetch: POST /api/onboard (src/app/onboard/page.tsx:168)", "shortDescription": {"text": "Dangling fetch: POST /api/onboard (src/app/onboard/page.tsx:168)"}, "fullDescription": {"text": "`src/app/onboard/page.tsx:168` calls `POST /api/onboard` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/onboard`\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-4fcb26290eb784b8", "name": "Dangling fetch: GET /api/auth/approval-status (src/app/pending/page.tsx:12)", "shortDescription": {"text": "Dangling fetch: GET /api/auth/approval-status (src/app/pending/page.tsx:12)"}, "fullDescription": {"text": "`src/app/pending/page.tsx:12` calls `GET /api/auth/approval-status` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/approval-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-c9f5c1117e0ce809", "name": "Dangling fetch: POST /api/auth/logout (src/app/pending/page.tsx:35)", "shortDescription": {"text": "Dangling fetch: POST /api/auth/logout (src/app/pending/page.tsx:35)"}, "fullDescription": {"text": "`src/app/pending/page.tsx:35` calls `POST /api/auth/logout` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/logout`\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-f6c853877fb00ce0", "name": "Dangling fetch: POST https://oauth2.googleapis.com/token (src/lib/integrations/google-calendar.ts:40)", "shortDescription": {"text": "Dangling fetch: POST https://oauth2.googleapis.com/token (src/lib/integrations/google-calendar.ts:40)"}, "fullDescription": {"text": "`src/lib/integrations/google-calendar.ts:40` calls `POST https://oauth2.googleapis.com/token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/oauth2.googleapis.com/token`\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-efafe1b276b3c2cd", "name": "Dangling fetch: POST https://oauth2.googleapis.com/token (src/lib/integrations/google-calendar.ts:93)", "shortDescription": {"text": "Dangling fetch: POST https://oauth2.googleapis.com/token (src/lib/integrations/google-calendar.ts:93)"}, "fullDescription": {"text": "`src/lib/integrations/google-calendar.ts:93` calls `POST https://oauth2.googleapis.com/token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/oauth2.googleapis.com/token`\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-e48c69d849c8b8cb", "name": "Dangling fetch: POST https://www.googleapis.com/calendar/v3/freeBusy (src/lib/integrations/google-calendar.ts:141)", "shortDescription": {"text": "Dangling fetch: POST https://www.googleapis.com/calendar/v3/freeBusy (src/lib/integrations/google-calendar.ts:141)"}, "fullDescription": {"text": "`src/lib/integrations/google-calendar.ts:141` calls `POST https://www.googleapis.com/calendar/v3/freeBusy` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/www.googleapis.com/calendar/v3/freebusy`\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-25fa9353b2ce0343", "name": "Dangling fetch: POST https://www.googleapis.com/calendar/v3/calendars/primary/events?sendUpdates=all (src/lib/integratio", "shortDescription": {"text": "Dangling fetch: POST https://www.googleapis.com/calendar/v3/calendars/primary/events?sendUpdates=all (src/lib/integrations/google-calendar.ts:214)"}, "fullDescription": {"text": "`src/lib/integrations/google-calendar.ts:214` calls `POST https://www.googleapis.com/calendar/v3/calendars/primary/events?sendUpdates=all` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/www.googleapis.com/calendar/v3/calendars/primary/events`\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-ae32a74ec9d77343", "name": "Dangling fetch: POST https://graph.facebook.com/v20.0/${pixelId}/events (src/lib/integrations/meta-capi.ts:127)", "shortDescription": {"text": "Dangling fetch: POST https://graph.facebook.com/v20.0/${pixelId}/events (src/lib/integrations/meta-capi.ts:127)"}, "fullDescription": {"text": "`src/lib/integrations/meta-capi.ts:127` calls `POST https://graph.facebook.com/v20.0/${pixelId}/events` 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/v20.0/<p>/events`\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-0676e40bb5e4386c", "name": "Dangling fetch: POST https://api.razorpay.com/v1/payment_links (src/lib/integrations/runner.ts:30)", "shortDescription": {"text": "Dangling fetch: POST https://api.razorpay.com/v1/payment_links (src/lib/integrations/runner.ts:30)"}, "fullDescription": {"text": "`src/lib/integrations/runner.ts:30` calls `POST https://api.razorpay.com/v1/payment_links` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.razorpay.com/v1/payment_links`\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-15afba1a607c0b4f", "name": "Dangling fetch: POST https://www.zohoapis.${domain}/crm/v2/Leads (src/lib/integrations/runner.ts:61)", "shortDescription": {"text": "Dangling fetch: POST https://www.zohoapis.${domain}/crm/v2/Leads (src/lib/integrations/runner.ts:61)"}, "fullDescription": {"text": "`src/lib/integrations/runner.ts:61` calls `POST https://www.zohoapis.${domain}/crm/v2/Leads` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/www.zohoapis./<p>/crm/v2/leads`\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-db289b5e409d7623", "name": "Dangling fetch: POST https://apiv2.shiprocket.in/v1/external/auth/login (src/lib/integrations/runner.ts:93)", "shortDescription": {"text": "Dangling fetch: POST https://apiv2.shiprocket.in/v1/external/auth/login (src/lib/integrations/runner.ts:93)"}, "fullDescription": {"text": "`src/lib/integrations/runner.ts:93` calls `POST https://apiv2.shiprocket.in/v1/external/auth/login` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/apiv2.shiprocket.in/v1/external/auth/login`\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-cb6380e0d060d20f", "name": "Dangling fetch: POST https://api.razorpay.com/v1/payment_links (src/lib/integrations/runner.ts:258)", "shortDescription": {"text": "Dangling fetch: POST https://api.razorpay.com/v1/payment_links (src/lib/integrations/runner.ts:258)"}, "fullDescription": {"text": "`src/lib/integrations/runner.ts:258` calls `POST https://api.razorpay.com/v1/payment_links` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.razorpay.com/v1/payment_links`\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-9d88b7fc43ec958c", "name": "Dangling fetch: POST https://oauth2.googleapis.com/token (src/lib/integrations/google-sheets.ts:46)", "shortDescription": {"text": "Dangling fetch: POST https://oauth2.googleapis.com/token (src/lib/integrations/google-sheets.ts:46)"}, "fullDescription": {"text": "`src/lib/integrations/google-sheets.ts:46` calls `POST https://oauth2.googleapis.com/token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/oauth2.googleapis.com/token`\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-b4963359f733f3cf", "name": "Dangling fetch: POST https://oauth2.googleapis.com/token (src/lib/integrations/google-sheets.ts:133)", "shortDescription": {"text": "Dangling fetch: POST https://oauth2.googleapis.com/token (src/lib/integrations/google-sheets.ts:133)"}, "fullDescription": {"text": "`src/lib/integrations/google-sheets.ts:133` calls `POST https://oauth2.googleapis.com/token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/oauth2.googleapis.com/token`\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-7063cb45419b34d2", "name": "Dangling fetch: GET https://sheets.googleapis.com/v4/spreadsheets/${spreadsheetId}?fields=sheets.properties.title (src/l", "shortDescription": {"text": "Dangling fetch: GET https://sheets.googleapis.com/v4/spreadsheets/${spreadsheetId}?fields=sheets.properties.title (src/lib/integrations/google-sheets.ts:164)"}, "fullDescription": {"text": "`src/lib/integrations/google-sheets.ts:164` calls `GET https://sheets.googleapis.com/v4/spreadsheets/${spreadsheetId}?fields=sheets.properties.title` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/sheets.googleapis.com/v4/spreadsheets/<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-b2a0713c9f29e3ed", "name": "Dangling fetch: POST https://sheets.googleapis.com/v4/spreadsheets/${spreadsheetId}:batchUpdate (src/lib/integrations/go", "shortDescription": {"text": "Dangling fetch: POST https://sheets.googleapis.com/v4/spreadsheets/${spreadsheetId}:batchUpdate (src/lib/integrations/google-sheets.ts:181)"}, "fullDescription": {"text": "`src/lib/integrations/google-sheets.ts:181` calls `POST https://sheets.googleapis.com/v4/spreadsheets/${spreadsheetId}:batchUpdate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/sheets.googleapis.com/v4/spreadsheets/<p>/<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-d3537e1af32ba4cf", "name": "Dangling fetch: GET https://sheets.googleapis.com/v4/spreadsheets/${spreadsheetId}/values/${encodeURIComponent(range)} (", "shortDescription": {"text": "Dangling fetch: GET https://sheets.googleapis.com/v4/spreadsheets/${spreadsheetId}/values/${encodeURIComponent(range)} (src/lib/integrations/google-sheets.ts:222)"}, "fullDescription": {"text": "`src/lib/integrations/google-sheets.ts:222` calls `GET https://sheets.googleapis.com/v4/spreadsheets/${spreadsheetId}/values/${encodeURIComponent(range)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/sheets.googleapis.com/v4/spreadsheets/<p>/values/<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-c642241d59bbdae8", "name": "Dangling fetch: PUT https://sheets.googleapis.com/v4/spreadsheets/${spreadsheetId}/values/${encodeURIComponent(range)}?v", "shortDescription": {"text": "Dangling fetch: PUT https://sheets.googleapis.com/v4/spreadsheets/${spreadsheetId}/values/${encodeURIComponent(range)}?valueInputOption=RAW (src/lib/integrations/google-sheets.ts:232)"}, "fullDescription": {"text": "`src/lib/integrations/google-sheets.ts:232` calls `PUT https://sheets.googleapis.com/v4/spreadsheets/${spreadsheetId}/values/${encodeURIComponent(range)}?valueInputOption=RAW` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/sheets.googleapis.com/v4/spreadsheets/<p>/values/<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-56a55bfcaa7ca0af", "name": "Dangling fetch: POST https://sheets.googleapis.com/v4/spreadsheets/${config.spreadsheet_id}/values/${encodeURIComponent(", "shortDescription": {"text": "Dangling fetch: POST https://sheets.googleapis.com/v4/spreadsheets/${config.spreadsheet_id}/values/${encodeURIComponent(range)}:append?valueInputOption=USER_ENTERED&insertDataOption=INSERT_ROWS (src/lib/integrations/google-sheets.ts:272)"}, "fullDescription": {"text": "`src/lib/integrations/google-sheets.ts:272` calls `POST https://sheets.googleapis.com/v4/spreadsheets/${config.spreadsheet_id}/values/${encodeURIComponent(range)}:append?valueInputOption=USER_ENTERED&insertDataOption=INSERT_ROWS` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/sheets.googleapis.com/v4/spreadsheets/<p>/values/<p>/<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-b18ffe1b47f26ecd", "name": "Dangling fetch: POST https://sheets.googleapis.com/v4/spreadsheets/${config.spreadsheet_id}/values/${encodeURIComponent(", "shortDescription": {"text": "Dangling fetch: POST https://sheets.googleapis.com/v4/spreadsheets/${config.spreadsheet_id}/values/${encodeURIComponent(clearRange)}:clear (src/lib/integrations/google-sheets.ts:299)"}, "fullDescription": {"text": "`src/lib/integrations/google-sheets.ts:299` calls `POST https://sheets.googleapis.com/v4/spreadsheets/${config.spreadsheet_id}/values/${encodeURIComponent(clearRange)}:clear` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/sheets.googleapis.com/v4/spreadsheets/<p>/values/<p>/<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-6b2ccd423abb5b01", "name": "Dangling fetch: PUT https://sheets.googleapis.com/v4/spreadsheets/${config.spreadsheet_id}/values/${encodeURIComponent(r", "shortDescription": {"text": "Dangling fetch: PUT https://sheets.googleapis.com/v4/spreadsheets/${config.spreadsheet_id}/values/${encodeURIComponent(range)}?valueInputOption=USER_ENTERED (src/lib/integrations/google-sheets.ts:323)"}, "fullDescription": {"text": "`src/lib/integrations/google-sheets.ts:323` calls `PUT https://sheets.googleapis.com/v4/spreadsheets/${config.spreadsheet_id}/values/${encodeURIComponent(range)}?valueInputOption=USER_ENTERED` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/sheets.googleapis.com/v4/spreadsheets/<p>/values/<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-2c308652913122f6", "name": "Dangling fetch: GET https://sheets.googleapis.com/v4/spreadsheets/${spreadsheetId}/values/${encodeURIComponent(range)} (", "shortDescription": {"text": "Dangling fetch: GET https://sheets.googleapis.com/v4/spreadsheets/${spreadsheetId}/values/${encodeURIComponent(range)} (src/lib/integrations/google-sheets.ts:368)"}, "fullDescription": {"text": "`src/lib/integrations/google-sheets.ts:368` calls `GET https://sheets.googleapis.com/v4/spreadsheets/${spreadsheetId}/values/${encodeURIComponent(range)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/sheets.googleapis.com/v4/spreadsheets/<p>/values/<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-728841d45f95ebec", "name": "Dangling fetch: PUT https://sheets.googleapis.com/v4/spreadsheets/${spreadsheetId}/values/${encodeURIComponent(range)}?v", "shortDescription": {"text": "Dangling fetch: PUT https://sheets.googleapis.com/v4/spreadsheets/${spreadsheetId}/values/${encodeURIComponent(range)}?valueInputOption=RAW (src/lib/integrations/google-sheets.ts:376)"}, "fullDescription": {"text": "`src/lib/integrations/google-sheets.ts:376` calls `PUT https://sheets.googleapis.com/v4/spreadsheets/${spreadsheetId}/values/${encodeURIComponent(range)}?valueInputOption=RAW` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/sheets.googleapis.com/v4/spreadsheets/<p>/values/<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-93657a7fedb51108", "name": "Dangling fetch: POST https://sheets.googleapis.com/v4/spreadsheets/${config.spreadsheet_id}/values/${encodeURIComponent(", "shortDescription": {"text": "Dangling fetch: POST https://sheets.googleapis.com/v4/spreadsheets/${config.spreadsheet_id}/values/${encodeURIComponent(range)}:append?valueInputOption=USER_ENTERED&insertDataOption=INSERT_ROWS (src/lib/integrations/google-sheets.ts:449)"}, "fullDescription": {"text": "`src/lib/integrations/google-sheets.ts:449` calls `POST https://sheets.googleapis.com/v4/spreadsheets/${config.spreadsheet_id}/values/${encodeURIComponent(range)}:append?valueInputOption=USER_ENTERED&insertDataOption=INSERT_ROWS` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/sheets.googleapis.com/v4/spreadsheets/<p>/values/<p>/<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-511e1d474de8be50", "name": "Dangling fetch: GET https://graph.facebook.com/v21.0/${wabaId}/message_templates?limit=250 (src/lib/broadcast/services/m", "shortDescription": {"text": "Dangling fetch: GET https://graph.facebook.com/v21.0/${wabaId}/message_templates?limit=250 (src/lib/broadcast/services/meta-template-sync.service.ts:54)"}, "fullDescription": {"text": "`src/lib/broadcast/services/meta-template-sync.service.ts:54` calls `GET https://graph.facebook.com/v21.0/${wabaId}/message_templates?limit=250` 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/v21.0/<p>/message_templates`\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-20a65ea4fa5d1dd3", "name": "Dangling fetch: POST https://api.razorpay.com/v1/payment_links (src/lib/payments/razorpay-links.ts:45)", "shortDescription": {"text": "Dangling fetch: POST https://api.razorpay.com/v1/payment_links (src/lib/payments/razorpay-links.ts:45)"}, "fullDescription": {"text": "`src/lib/payments/razorpay-links.ts:45` calls `POST https://api.razorpay.com/v1/payment_links` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.razorpay.com/v1/payment_links`\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-ddc15ad2e7879aee", "name": "Dangling fetch: GET /api/dashboard/contacts?limit=2000&cc=${get().workspaceDefaultCountryCode} (src/lib/store/contactsSt", "shortDescription": {"text": "Dangling fetch: GET /api/dashboard/contacts?limit=2000&cc=${get().workspaceDefaultCountryCode} (src/lib/store/contactsStore.ts:136)"}, "fullDescription": {"text": "`src/lib/store/contactsStore.ts:136` calls `GET /api/dashboard/contacts?limit=2000&cc=${get().workspaceDefaultCountryCode}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/contacts`\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-1515f718f7a0fa77", "name": "Unused endpoint: POST /call/outbound", "shortDescription": {"text": "Unused endpoint: POST /call/outbound"}, "fullDescription": {"text": "`voice-agent/ui_server.py` declares `POST /call/outbound` 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-f3bad2808c1340ab", "name": "Unused endpoint: GET /calls/active", "shortDescription": {"text": "Unused endpoint: GET /calls/active"}, "fullDescription": {"text": "`voice-agent/ui_server.py` declares `GET /calls/active` 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-1ab604842e1e9409", "name": "Unused endpoint: GET /calls/logs", "shortDescription": {"text": "Unused endpoint: GET /calls/logs"}, "fullDescription": {"text": "`voice-agent/ui_server.py` declares `GET /calls/logs` 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-c5503b5b9ebd09c2", "name": "Unused endpoint: GET /calls/stats", "shortDescription": {"text": "Unused endpoint: GET /calls/stats"}, "fullDescription": {"text": "`voice-agent/ui_server.py` declares `GET /calls/stats` 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-25c424dd0869d5e5", "name": "Unused endpoint: USE /admin/queue", "shortDescription": {"text": "Unused endpoint: USE /admin/queue"}, "fullDescription": {"text": "`worker.ts` declares `USE /admin/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}}]}}, "automationDetails": {"id": "repobility/18790"}, "properties": {"repository": "Sakshay28/aries-ai-landing", "repoUrl": "https://github.com/Sakshay28/aries-ai-landing", "branch": "main"}, "results": [{"ruleId": "scanner-95540862a63a9bb6", "level": "note", "message": {"text": "Possibly dead Python function: async_cancel_booking"}, "properties": {"repobilityId": "cf491f0791b25a61", "scanner": "scanner-primary", "fingerprint": "95540862a63a9bb6", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "voice-agent/calendar_tools.py:167"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6f5ae7aef882eed5", "level": "note", "message": {"text": "Possibly dead Python function: entrypoint"}, "properties": {"repobilityId": "92324b1c9652c314", "scanner": "scanner-primary", "fingerprint": "6f5ae7aef882eed5", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "voice-agent/agent.py:270"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c99a0a8e28f4958f", "level": "note", "message": {"text": "Possibly dead Python function: notify_booking_cancelled"}, "properties": {"repobilityId": "31faf64c93a868ab", "scanner": "scanner-primary", "fingerprint": "c99a0a8e28f4958f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "voice-agent/notify.py:68"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a4e32d925a8f864e", "level": "note", "message": {"text": "Possibly dead Python function: notify_agent_error"}, "properties": {"repobilityId": "5d221c340cfe94b2", "scanner": "scanner-primary", "fingerprint": "a4e32d925a8f864e", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "voice-agent/notify.py:107"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-2f342d830ed76b7f", "level": "note", "message": {"text": "Possibly dead Python function: send_webhook"}, "properties": {"repobilityId": "efe3d73daa7937fb", "scanner": "scanner-primary", "fingerprint": "2f342d830ed76b7f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "voice-agent/notify.py:119"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ed575fe882264a2d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test-page.js:5"}, "properties": {"repobilityId": "d2da15b7f052101c", "scanner": "scanner-primary", "fingerprint": "ed575fe882264a2d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d937fbb367450dea", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scan_tables_clean.js:25"}, "properties": {"repobilityId": "bd5f920d385d85f1", "scanner": "scanner-primary", "fingerprint": "d937fbb367450dea", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-71b97d8fa2b57d58", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scan_db.js:29"}, "properties": {"repobilityId": "17ad9038e5498d0a", "scanner": "scanner-primary", "fingerprint": "71b97d8fa2b57d58", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9f217d7fbb7ef9ac", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 verify_clock_tower.js:34"}, "properties": {"repobilityId": "431b89de5f62ca47", "scanner": "scanner-primary", "fingerprint": "9f217d7fbb7ef9ac", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c260686643d5019a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scan_db_extended.js:25"}, "properties": {"repobilityId": "13650e4e56df1616", "scanner": "scanner-primary", "fingerprint": "c260686643d5019a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4832651b58dd148e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 worker.ts:22"}, "properties": {"repobilityId": "ae74f20b83d38bad", "scanner": "scanner-primary", "fingerprint": "4832651b58dd148e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8bbbca3d49e72610", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 next.config.ts:32"}, "properties": {"repobilityId": "5c4e7569d27da413", "scanner": "scanner-primary", "fingerprint": "8bbbca3d49e72610", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-db2185864c0354db", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 _disabled/app/api/calls/outbound/route.ts:85"}, "properties": {"repobilityId": "c444575a30e3afad", "scanner": "scanner-primary", "fingerprint": "db2185864c0354db", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ccfcf84ac7a161a7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 _disabled/app/api/whatsapp/connect/route.ts:124"}, "properties": {"repobilityId": "8fbd6a7635b3941a", "scanner": "scanner-primary", "fingerprint": "ccfcf84ac7a161a7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3a7430ea3bf667aa", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 _disabled/app/api/cron/timeout/route.ts:70"}, "properties": {"repobilityId": "102a43ac4f04dc8b", "scanner": "scanner-primary", "fingerprint": "3a7430ea3bf667aa", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e6169e6e9eb92082", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 _disabled/app/api/cron/reset-counters/route.ts:48"}, "properties": {"repobilityId": "7c1aea61679320da", "scanner": "scanner-primary", "fingerprint": "e6169e6e9eb92082", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7328ebd2e7a8a158", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 _disabled/app/api/webhooks/razorpay/route.ts:36"}, "properties": {"repobilityId": "1a871e50b068979e", "scanner": "scanner-primary", "fingerprint": "7328ebd2e7a8a158", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bd91414eb371323c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 _disabled/app/api/webhooks/whatsapp/route.ts:28"}, "properties": {"repobilityId": "95a71d60c21c5e65", "scanner": "scanner-primary", "fingerprint": "bd91414eb371323c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-263d7095682e9f35", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 _disabled/app/api/webhooks/instagram/route.ts:70"}, "properties": {"repobilityId": "c2b3766416ffa6aa", "scanner": "scanner-primary", "fingerprint": "263d7095682e9f35", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-38cbc44cf67a97a2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scratch/test_meta_webhook.js:10"}, "properties": {"repobilityId": "770053962f89217d", "scanner": "scanner-primary", "fingerprint": "38cbc44cf67a97a2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-abcc1926f59a86d7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scratch/list_tenants.js:16"}, "properties": {"repobilityId": "c67ac719b79462b3", "scanner": "scanner-primary", "fingerprint": "abcc1926f59a86d7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e1b49af9584c7adc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scratch/check_schema.js:9"}, "properties": {"repobilityId": "ef191795cb25d7fe", "scanner": "scanner-primary", "fingerprint": "e1b49af9584c7adc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f57a912dc9464339", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scratch/check_messages.js:9"}, "properties": {"repobilityId": "e2b9e78b51531ea0", "scanner": "scanner-primary", "fingerprint": "f57a912dc9464339", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c91f8c9004082b89", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scratch/check_rls.js:9"}, "properties": {"repobilityId": "b3fafa8b4ad775a0", "scanner": "scanner-primary", "fingerprint": "c91f8c9004082b89", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f05350b13306aff2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scratch/check_pub.js:9"}, "properties": {"repobilityId": "414a74d86133e4a7", "scanner": "scanner-primary", "fingerprint": "f05350b13306aff2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1b7d9ea9f0b6bcec", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scratch/check_single_message.js:10"}, "properties": {"repobilityId": "117a593f67704485", "scanner": "scanner-primary", "fingerprint": "1b7d9ea9f0b6bcec", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d2e68bfa053c2a69", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/diagnose_booking.ts:29"}, "properties": {"repobilityId": "34b9afa38ab777f4", "scanner": "scanner-primary", "fingerprint": "d2e68bfa053c2a69", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-04339d69fbc7061c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/diagnose_sheets.ts:19"}, "properties": {"repobilityId": "7cc4e5b93b0325d5", "scanner": "scanner-primary", "fingerprint": "04339d69fbc7061c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-55c77649e88c7f50", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/reset_booking_ctx.ts:43"}, "properties": {"repobilityId": "e5cb726ce947fbda", "scanner": "scanner-primary", "fingerprint": "55c77649e88c7f50", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c2a526df909f78af", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/diagnose_conv.ts:23"}, "properties": {"repobilityId": "12a160d8a04f2904", "scanner": "scanner-primary", "fingerprint": "c2a526df909f78af", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a49565009a7ec2f7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/scripts/post-fix-audit.ts:40"}, "properties": {"repobilityId": "3d4a605eede236e3", "scanner": "scanner-primary", "fingerprint": "a49565009a7ec2f7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-754920e0092af31f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/scripts/concurrency-simulation.ts:83"}, "properties": {"repobilityId": "3e4bc4660b2e1df7", "scanner": "scanner-primary", "fingerprint": "754920e0092af31f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1f970196b68baeb1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/scripts/rotateEncryption.ts:76"}, "properties": {"repobilityId": "78a9765104282618", "scanner": "scanner-primary", "fingerprint": "1f970196b68baeb1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f31bd88d0481c9ae", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/page.tsx:74"}, "properties": {"repobilityId": "4d4ab3e03315f684", "scanner": "scanner-primary", "fingerprint": "f31bd88d0481c9ae", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-af4b3cb4514878b4", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/layout.tsx:80"}, "properties": {"repobilityId": "0d72350965068f5b", "scanner": "scanner-primary", "fingerprint": "af4b3cb4514878b4", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-b54a0827d3ca0bb5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/integrations/google-sheets/callback/route.ts:11"}, "properties": {"repobilityId": "834ee93a025c6b19", "scanner": "scanner-primary", "fingerprint": "b54a0827d3ca0bb5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5615488983dc3169", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/auth/verify-otp/route.ts:76"}, "properties": {"repobilityId": "8d112078d49cae33", "scanner": "scanner-primary", "fingerprint": "5615488983dc3169", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a1f0ca763ea1ec61", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/auth/callback/route.ts:137"}, "properties": {"repobilityId": "8a97d4812d1fc8f8", "scanner": "scanner-primary", "fingerprint": "a1f0ca763ea1ec61", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-db8bf08d7c2184ee", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/auth/signup/route.ts:52"}, "properties": {"repobilityId": "661ec107085e0999", "scanner": "scanner-primary", "fingerprint": "db8bf08d7c2184ee", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a51918ee57f3f718", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/auth/provision/route.ts:79"}, "properties": {"repobilityId": "9a33de65f3165e82", "scanner": "scanner-primary", "fingerprint": "a51918ee57f3f718", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cbcd2415191e14de", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/auth/send-otp/route.ts:157"}, "properties": {"repobilityId": "8597ff2db7e3aa4b", "scanner": "scanner-primary", "fingerprint": "cbcd2415191e14de", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2b2c35d66501a720", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/data-deletion/route.ts:87"}, "properties": {"repobilityId": "c83164a534000923", "scanner": "scanner-primary", "fingerprint": "2b2c35d66501a720", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-88ed666cc550cd40", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/broadcast/launch/route.ts:36"}, "properties": {"repobilityId": "0f2ac3752934601c", "scanner": "scanner-primary", "fingerprint": "88ed666cc550cd40", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c069b3c7df85d0e1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/broadcast/webhook/route.ts:17"}, "properties": {"repobilityId": "21a98f68cdb45117", "scanner": "scanner-primary", "fingerprint": "c069b3c7df85d0e1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e0be60e0c22f0068", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/broadcast/test/route.ts:72"}, "properties": {"repobilityId": "dd828ac593f12a18", "scanner": "scanner-primary", "fingerprint": "e0be60e0c22f0068", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d8967cd4b68f1155", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/broadcast/campaign/route.ts:141"}, "properties": {"repobilityId": "5a6981ac475848fa", "scanner": "scanner-primary", "fingerprint": "d8967cd4b68f1155", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b5b654b2a40b7776", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/broadcast/campaign/[id]/retry-now/route.ts:68"}, "properties": {"repobilityId": "6dd07e594a188176", "scanner": "scanner-primary", "fingerprint": "b5b654b2a40b7776", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a154251a6f8bb702", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/broadcast/campaign/[id]/cancel/route.ts:89"}, "properties": {"repobilityId": "2279694d289c60c6", "scanner": "scanner-primary", "fingerprint": "a154251a6f8bb702", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2813f7436be278d4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/broadcast/process-queue/route.ts:54"}, "properties": {"repobilityId": "69c688f591f05853", "scanner": "scanner-primary", "fingerprint": "2813f7436be278d4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-37540bb18b182036", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/settings/route.ts:155"}, "properties": {"repobilityId": "03e71e90554b5118", "scanner": "scanner-primary", "fingerprint": "37540bb18b182036", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0cfd4b99af861188", "level": "note", "message": {"text": "React Flow edge with `label=` but no project-wide edge-label CSS override \u2014 src/app/api/dashboard/flows/generate/route.ts:201"}, "properties": {"repobilityId": "e4e68f8967f7097c", "scanner": "scanner-primary", "fingerprint": "0cfd4b99af861188", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.edge-label.no-bg"]}}, {"ruleId": "scanner-f719c501433c96fd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/playground/route.ts:130"}, "properties": {"repobilityId": "7b8f60f2ca749ac9", "scanner": "scanner-primary", "fingerprint": "f719c501433c96fd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c0b739b3e87633f6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/playground/reset/route.ts:24"}, "properties": {"repobilityId": "35445feff783c99e", "scanner": "scanner-primary", "fingerprint": "c0b739b3e87633f6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4b228ccc3dc4c32b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/chat/delete-message/route.ts:76"}, "properties": {"repobilityId": "a40a152a160b85e3", "scanner": "scanner-primary", "fingerprint": "4b228ccc3dc4c32b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8e75349a4632909c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/chat/summary/route.ts:50"}, "properties": {"repobilityId": "77baacd3a075f2de", "scanner": "scanner-primary", "fingerprint": "8e75349a4632909c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-052ea22681c8d061", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/dashboard/templates/upload/route.ts:27"}, "properties": {"repobilityId": "2e4b3cf1b133d16d", "scanner": "scanner-primary", "fingerprint": "052ea22681c8d061", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-346eb3152337833f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/chat/upload/route.ts:271"}, "properties": {"repobilityId": "ab168321d1619078", "scanner": "scanner-primary", "fingerprint": "346eb3152337833f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2d49325088685f41", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/chat/save-booking/route.ts:144"}, "properties": {"repobilityId": "eedcc12f4f2e4445", "scanner": "scanner-primary", "fingerprint": "2d49325088685f41", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6065fdde4f3288a7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/chat/send-template/route.ts:76"}, "properties": {"repobilityId": "b19ca29ed0ada27f", "scanner": "scanner-primary", "fingerprint": "6065fdde4f3288a7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7ca209f05d86b1b4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/chat/copy-proxy/route.ts:12"}, "properties": {"repobilityId": "172b4bca9b535ca5", "scanner": "scanner-primary", "fingerprint": "7ca209f05d86b1b4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ba3afa8e1f64547e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/provision/route.ts:162"}, "properties": {"repobilityId": "b5d9cb0bf1fc870c", "scanner": "scanner-primary", "fingerprint": "ba3afa8e1f64547e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3f035ad620c428dc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/scheduled-flows/route.ts:27"}, "properties": {"repobilityId": "2bfb66cbcfa680df", "scanner": "scanner-primary", "fingerprint": "3f035ad620c428dc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c5fc86a0433f6699", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/timeout/route.ts:38"}, "properties": {"repobilityId": "c1732774eb1b47e8", "scanner": "scanner-primary", "fingerprint": "c5fc86a0433f6699", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cb0b664793d0e4e2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/review-requests/route.ts:108"}, "properties": {"repobilityId": "e39c90828ffaf203", "scanner": "scanner-primary", "fingerprint": "cb0b664793d0e4e2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-881dd57191867227", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/birthday-greetings/route.ts:92"}, "properties": {"repobilityId": "12b80b5639b5ed42", "scanner": "scanner-primary", "fingerprint": "881dd57191867227", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-814ba146af58f8f9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/expire-bookings/route.ts:23"}, "properties": {"repobilityId": "f2795b490d969305", "scanner": "scanner-primary", "fingerprint": "814ba146af58f8f9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7b02bfffe71b82f4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/instagram-refresh/route.ts:34"}, "properties": {"repobilityId": "5d78bd13907bb2dc", "scanner": "scanner-primary", "fingerprint": "7b02bfffe71b82f4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-009d75ec9f69e7d5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/restaurant/route.ts:105"}, "properties": {"repobilityId": "0bedb171ec9fe097", "scanner": "scanner-primary", "fingerprint": "009d75ec9f69e7d5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-dafdfcdc8d1efb4c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/process-deletions/route.ts:91"}, "properties": {"repobilityId": "ec9416aed1d100c2", "scanner": "scanner-primary", "fingerprint": "dafdfcdc8d1efb4c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-49115517c07b2e4e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/reset-counters/route.ts:44"}, "properties": {"repobilityId": "0d5d88975445907e", "scanner": "scanner-primary", "fingerprint": "49115517c07b2e4e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-229c892936e70ef7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/broadcasts/test-send/route.ts:59"}, "properties": {"repobilityId": "bb04557e99bdfaba", "scanner": "scanner-primary", "fingerprint": "229c892936e70ef7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b0d2bb4c248b0b54", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/restaurant/cron/cleanup/route.ts:42"}, "properties": {"repobilityId": "12211318328620b1", "scanner": "scanner-primary", "fingerprint": "b0d2bb4c248b0b54", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d72da4356599641c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/webhooks/razorpay/route.ts:66"}, "properties": {"repobilityId": "7ba4b0f0aa8614ae", "scanner": "scanner-primary", "fingerprint": "d72da4356599641c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-776f9f3c4c3f8d94", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/webhooks/meta-leads/route.ts:83"}, "properties": {"repobilityId": "896ea61663102664", "scanner": "scanner-primary", "fingerprint": "776f9f3c4c3f8d94", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4bedc12c17652aa4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/webhooks/whatsapp/route.ts:43"}, "properties": {"repobilityId": "15dbfbdc26b2ddad", "scanner": "scanner-primary", "fingerprint": "4bedc12c17652aa4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ea04df9576483934", "level": "note", "message": {"text": "React Flow <MiniMap> without dark background \u2014 src/app/dashboard/flows/_components/FlowCanvas.tsx:416"}, "properties": {"repobilityId": "f5f08a6fe14dbb72", "scanner": "scanner-primary", "fingerprint": "ea04df9576483934", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.minimap.no-bg"]}}, {"ruleId": "scanner-5b98558aadc42341", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/flows/_components/FlowInspector.tsx:1584"}, "properties": {"repobilityId": "fe31f73bd6607220", "scanner": "scanner-primary", "fingerprint": "5b98558aadc42341", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7b5c0ac78a00516f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/flows/_components/FlowSimulator.tsx:195"}, "properties": {"repobilityId": "ac37a4c7d27ee9b6", "scanner": "scanner-primary", "fingerprint": "7b5c0ac78a00516f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3062bb7f547b06ee", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/flows/_components/VariableTextarea.tsx:232"}, "properties": {"repobilityId": "cb66d6579f85ac8f", "scanner": "scanner-primary", "fingerprint": "3062bb7f547b06ee", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5c1da06f8a65f2d6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/flows/_components/FlowSidebar.tsx:390"}, "properties": {"repobilityId": "641ac4b2e39260cf", "scanner": "scanner-primary", "fingerprint": "5c1da06f8a65f2d6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0cf768d87c320934", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/dashboard/flows/_components/FlowSidebar.tsx:256"}, "properties": {"repobilityId": "607d4651780d90e9", "scanner": "scanner-primary", "fingerprint": "0cf768d87c320934", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-03ccec23405d50ff", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/operations/_components/AgentPerformanceStatus.tsx:194"}, "properties": {"repobilityId": "51a9ecd8e588829d", "scanner": "scanner-primary", "fingerprint": "03ccec23405d50ff", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ea7ad24e4323c7da", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/operations/_components/LiveActivityFeed.tsx:154"}, "properties": {"repobilityId": "d43a9128d6fa7b72", "scanner": "scanner-primary", "fingerprint": "ea7ad24e4323c7da", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-053a9ed4a4f2153b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/leads/_components/LeadsClient.tsx:237"}, "properties": {"repobilityId": "a0593f7c18f31132", "scanner": "scanner-primary", "fingerprint": "053a9ed4a4f2153b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d788e50ca99b5938", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/broadcast/_components/AudienceBuilder.tsx:367"}, "properties": {"repobilityId": "261e24ef93a0da8a", "scanner": "scanner-primary", "fingerprint": "d788e50ca99b5938", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3d57f34555f4bf95", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/broadcast/_components/ContactPickerDrawer.tsx:161"}, "properties": {"repobilityId": "cd74392602b0a256", "scanner": "scanner-primary", "fingerprint": "3d57f34555f4bf95", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-595ab40f4f0f59f3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/broadcast/_components/BroadcastBuilder.tsx:730"}, "properties": {"repobilityId": "bff393185d0a3da1", "scanner": "scanner-primary", "fingerprint": "595ab40f4f0f59f3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-516bad3a4ded77ec", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/dashboard/broadcast/_components/BroadcastBuilder.tsx:284"}, "properties": {"repobilityId": "a7a5a706d4c0d443", "scanner": "scanner-primary", "fingerprint": "516bad3a4ded77ec", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e92d198db5008fd7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/broadcast/_components/BroadcastPerformanceCard.tsx:106"}, "properties": {"repobilityId": "a5b1b30c513e0aeb", "scanner": "scanner-primary", "fingerprint": "e92d198db5008fd7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6cd2e13faaaf285c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/broadcast/_components/TemplateSelector.tsx:245"}, "properties": {"repobilityId": "d8d2c80aa4aabbd4", "scanner": "scanner-primary", "fingerprint": "6cd2e13faaaf285c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f1a56d1fee4e5f23", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/broadcast/_components/LaunchSafetyModal.tsx:112"}, "properties": {"repobilityId": "b5e3eefdf6fd8fee", "scanner": "scanner-primary", "fingerprint": "f1a56d1fee4e5f23", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-80648db0d3636446", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/broadcast/_components/RecipientDrawer.tsx:369"}, "properties": {"repobilityId": "e81fb3700d1371f1", "scanner": "scanner-primary", "fingerprint": "80648db0d3636446", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0a3944ce37cb2cef", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/broadcast/_components/CampaignReview.tsx:283"}, "properties": {"repobilityId": "54bdae2f14f5fbad", "scanner": "scanner-primary", "fingerprint": "0a3944ce37cb2cef", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a87585132c7b515f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/broadcast/_components/WhatsAppPreview.tsx:251"}, "properties": {"repobilityId": "d814aecfbad79340", "scanner": "scanner-primary", "fingerprint": "a87585132c7b515f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6dfe3781a0a9b407", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/broadcast/_components/VariableMapper.tsx:167"}, "properties": {"repobilityId": "89110874af0f971a", "scanner": "scanner-primary", "fingerprint": "6dfe3781a0a9b407", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-28ea9b9c287c1164", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/broadcast/_components/BroadcastClient.tsx:162"}, "properties": {"repobilityId": "caa1f1b558ee3d85", "scanner": "scanner-primary", "fingerprint": "28ea9b9c287c1164", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0cada7f89a0e682f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/broadcast/_components/BroadcastPanel.tsx:214"}, "properties": {"repobilityId": "4c9da70a6fe5bfd8", "scanner": "scanner-primary", "fingerprint": "0cada7f89a0e682f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7403cda27b00fa62", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/team/_components/TeamClient.tsx:196"}, "properties": {"repobilityId": "70334154443755ce", "scanner": "scanner-primary", "fingerprint": "7403cda27b00fa62", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-553b1cc0ebd282ce", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/_layout/AppSidebar.tsx:341"}, "properties": {"repobilityId": "0638e063cfedf5a4", "scanner": "scanner-primary", "fingerprint": "553b1cc0ebd282ce", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c480d94c69b18e6f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/dashboard/chat/ChatArea.tsx:344"}, "properties": {"repobilityId": "36f9aeb26f49b602", "scanner": "scanner-primary", "fingerprint": "c480d94c69b18e6f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-767aedeef06e7775", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/chat/AttachmentBubble.tsx:248"}, "properties": {"repobilityId": "4e7e8216720fb54e", "scanner": "scanner-primary", "fingerprint": "767aedeef06e7775", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-695dce00d5e1e473", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/chat/CRMPanel.tsx:389"}, "properties": {"repobilityId": "7c45347d05f1c115", "scanner": "scanner-primary", "fingerprint": "695dce00d5e1e473", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7d365b0bb6a0a3e4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/dashboard/chat/ChatSidebar.tsx:176"}, "properties": {"repobilityId": "8bb4146dc7da6a22", "scanner": "scanner-primary", "fingerprint": "7d365b0bb6a0a3e4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-026474b766c59fd8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/templates/_components/ValidationPanel.tsx:509"}, "properties": {"repobilityId": "890b43a581c168f8", "scanner": "scanner-primary", "fingerprint": "026474b766c59fd8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-71a8ac99ed7a57ba", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/templates/_components/TemplateLibrary.tsx:93"}, "properties": {"repobilityId": "e2b763bb83bcdfe2", "scanner": "scanner-primary", "fingerprint": "71a8ac99ed7a57ba", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b93ebd966a82b855", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/templates/_components/TemplateStudio.tsx:198"}, "properties": {"repobilityId": "6dbe7aeb88e31b2b", "scanner": "scanner-primary", "fingerprint": "b93ebd966a82b855", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-faad61d36b0bc3ad", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/templates/_components/MediaUpload.tsx:193"}, "properties": {"repobilityId": "0a91351b6bbbdcc1", "scanner": "scanner-primary", "fingerprint": "faad61d36b0bc3ad", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-091f9b050102816c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/templates/_components/TemplateList.tsx:208"}, "properties": {"repobilityId": "026f29ddd12dfe75", "scanner": "scanner-primary", "fingerprint": "091f9b050102816c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9c3d12f93b09404a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/templates/_components/WhatsAppPreview.tsx:82"}, "properties": {"repobilityId": "83fcc6f2aff9b2d8", "scanner": "scanner-primary", "fingerprint": "9c3d12f93b09404a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-39049b3ed0665a30", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/templates/_components/sections/ButtonBuilder.tsx:143"}, "properties": {"repobilityId": "bb5121f9e615ee73", "scanner": "scanner-primary", "fingerprint": "39049b3ed0665a30", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1896b4d292fbb3f0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/logs/page.tsx:128"}, "properties": {"repobilityId": "782c04d309822bf6", "scanner": "scanner-primary", "fingerprint": "1896b4d292fbb3f0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c899832293a5587c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/logs/_components/LogsClient.tsx:115"}, "properties": {"repobilityId": "5b32801364fa98ee", "scanner": "scanner-primary", "fingerprint": "c899832293a5587c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-895e85a245dc2eeb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/admin/onboard/_components/OnboardClient.tsx:200"}, "properties": {"repobilityId": "b13ec64764693187", "scanner": "scanner-primary", "fingerprint": "895e85a245dc2eeb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-468acadb3add677a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/admin/approvals/_components/ApprovalsClient.tsx:108"}, "properties": {"repobilityId": "35e221ecdd898707", "scanner": "scanner-primary", "fingerprint": "468acadb3add677a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8a1549f19404e782", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/agents/page.tsx:1488"}, "properties": {"repobilityId": "63f2aab727fd46c8", "scanner": "scanner-primary", "fingerprint": "8a1549f19404e782", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ab3b293cc7227e5b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/agents/_components/AgentsClient.tsx:199"}, "properties": {"repobilityId": "4a6009a3bf1d7344", "scanner": "scanner-primary", "fingerprint": "ab3b293cc7227e5b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-587444ad919f0103", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/system/status/page.tsx:106"}, "properties": {"repobilityId": "91a8b8790b7f212c", "scanner": "scanner-primary", "fingerprint": "587444ad919f0103", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-913e20d76b91fc4f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/system/dead-letter/page.tsx:113"}, "properties": {"repobilityId": "559fd255af7be930", "scanner": "scanner-primary", "fingerprint": "913e20d76b91fc4f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9e783d1fea1cdb17", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/campaigns/_components/CampaignsClient.tsx:167"}, "properties": {"repobilityId": "2a2c5f286a06acf4", "scanner": "scanner-primary", "fingerprint": "9e783d1fea1cdb17", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-52718213d3836475", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/contacts/_components/ContactsClient.tsx:945"}, "properties": {"repobilityId": "c49a9ec58e6fcca7", "scanner": "scanner-primary", "fingerprint": "52718213d3836475", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-aac5bb5e560f3ba6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/automations/_components/AutomationsClient.tsx:264"}, "properties": {"repobilityId": "ba7e906b08e671ac", "scanner": "scanner-primary", "fingerprint": "aac5bb5e560f3ba6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a63e444f431b9a16", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/restaurant/guests/_components/GuestsClient.tsx:366"}, "properties": {"repobilityId": "88f3bd6285a36f9f", "scanner": "scanner-primary", "fingerprint": "a63e444f431b9a16", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1d172b4f8c1c39cf", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/restaurant/bookings/_components/BookingsClient.tsx:641"}, "properties": {"repobilityId": "0c322da77ed1d525", "scanner": "scanner-primary", "fingerprint": "1d172b4f8c1c39cf", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c76909e5602eebc0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/restaurant/bookings/_components/GuestProfilePanel.tsx:111"}, "properties": {"repobilityId": "609c53b89b2bdb1f", "scanner": "scanner-primary", "fingerprint": "c76909e5602eebc0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6c75b0fed6b70ff6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/restaurant/bookings/_components/ArrivingNextWidget.tsx:119"}, "properties": {"repobilityId": "961d862fa1320580", "scanner": "scanner-primary", "fingerprint": "6c75b0fed6b70ff6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-becd950dbf13490d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/restaurant/tables/_components/TablesClient.tsx:105"}, "properties": {"repobilityId": "a3488a0c6efcbe7b", "scanner": "scanner-primary", "fingerprint": "becd950dbf13490d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d6b39cd65635a8c9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/restaurant/waitlist/_components/WaitlistClient.tsx:248"}, "properties": {"repobilityId": "dc3e236657042908", "scanner": "scanner-primary", "fingerprint": "d6b39cd65635a8c9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e837986c3af59aa2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/restaurant/_components/RestaurantOverviewClient.tsx:155"}, "properties": {"repobilityId": "29be339046f2edc4", "scanner": "scanner-primary", "fingerprint": "e837986c3af59aa2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cca83a47b1d7916f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/_sections/RecentChats.tsx:116"}, "properties": {"repobilityId": "ffa746dbac378f39", "scanner": "scanner-primary", "fingerprint": "cca83a47b1d7916f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3b735ed846217bda", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/_sections/DashboardMetrics.tsx:113"}, "properties": {"repobilityId": "2b84a008b9cabdc1", "scanner": "scanner-primary", "fingerprint": "3b735ed846217bda", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fa98bac09f65ac59", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/_sections/TeamActivity.tsx:65"}, "properties": {"repobilityId": "cd8cc7229726980e", "scanner": "scanner-primary", "fingerprint": "fa98bac09f65ac59", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3c53c733ff12bcfc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/meta-ads/_components/MetaAdsLeadsClient.tsx:174"}, "properties": {"repobilityId": "c5aa2adb494e7d0b", "scanner": "scanner-primary", "fingerprint": "3c53c733ff12bcfc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-69e1da0a1214f33e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/meta-ads/_components/MetaAdsSettingsClient.tsx:78"}, "properties": {"repobilityId": "d5d4efcd8432efdf", "scanner": "scanner-primary", "fingerprint": "69e1da0a1214f33e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-99662949a2a3f0b8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/meta-ads/_components/MetaAdsDashboardClient.tsx:267"}, "properties": {"repobilityId": "703eeaad5c33a6b0", "scanner": "scanner-primary", "fingerprint": "99662949a2a3f0b8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f0a82bdfa7102c03", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/preview/tables/TablesDemo.tsx:126"}, "properties": {"repobilityId": "1f964e2b7347fab9", "scanner": "scanner-primary", "fingerprint": "f0a82bdfa7102c03", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0f5a72b1cf35e750", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/integrations/meta-capi.ts:148"}, "properties": {"repobilityId": "e97911b2c547db63", "scanner": "scanner-primary", "fingerprint": "0f5a72b1cf35e750", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9a5d7c3ce6fe33b5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/integrations/runner.ts:46"}, "properties": {"repobilityId": "7b0e2a5b37674f3c", "scanner": "scanner-primary", "fingerprint": "9a5d7c3ce6fe33b5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9675a40241b54eaf", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/integrations/google-sheets.ts:43"}, "properties": {"repobilityId": "7287546a2f3f40d9", "scanner": "scanner-primary", "fingerprint": "9675a40241b54eaf", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e11d14ef3dd702d6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/flows/engine.ts:291"}, "properties": {"repobilityId": "6d9a1bb320cd3688", "scanner": "scanner-primary", "fingerprint": "e11d14ef3dd702d6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c71708e2f7d65e83", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/ai/client.ts:28"}, "properties": {"repobilityId": "2542dab792dde111", "scanner": "scanner-primary", "fingerprint": "c71708e2f7d65e83", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a2b3cb5feb09bb6c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/ai/engine.ts:488"}, "properties": {"repobilityId": "0e3129e577e49bf4", "scanner": "scanner-primary", "fingerprint": "a2b3cb5feb09bb6c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-aedb71836a70ba38", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/followup/engine.ts:55"}, "properties": {"repobilityId": "3571fd9be2cd2b43", "scanner": "scanner-primary", "fingerprint": "aedb71836a70ba38", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9153272c5b06930b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/auth/getTenantId.ts:36"}, "properties": {"repobilityId": "a80b833ea6ac37f2", "scanner": "scanner-primary", "fingerprint": "9153272c5b06930b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ee0a5ae536977b0a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/broadcast/queue.ts:109"}, "properties": {"repobilityId": "3577e4639f2bf081", "scanner": "scanner-primary", "fingerprint": "ee0a5ae536977b0a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-736b5f570abdd651", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/broadcast/services/automation-engine.service.ts:27"}, "properties": {"repobilityId": "ef5d6887f6f95fdb", "scanner": "scanner-primary", "fingerprint": "736b5f570abdd651", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c6e75b5ad6b86d44", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/broadcast/services/scheduler.service.ts:25"}, "properties": {"repobilityId": "1f75aaef33ac0b7c", "scanner": "scanner-primary", "fingerprint": "c6e75b5ad6b86d44", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-aabc5b037466991d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/broadcast/services/audit-log.service.ts:71"}, "properties": {"repobilityId": "a6bb6d31de710590", "scanner": "scanner-primary", "fingerprint": "aabc5b037466991d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3cbb80480222cc29", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/broadcast/services/telemetry.service.ts:15"}, "properties": {"repobilityId": "9283d390a8175e4f", "scanner": "scanner-primary", "fingerprint": "3cbb80480222cc29", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7b0d38217c6ca7c0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/broadcast/services/execution-event.service.ts:47"}, "properties": {"repobilityId": "a24549763c4f9107", "scanner": "scanner-primary", "fingerprint": "7b0d38217c6ca7c0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-522fb05dd17170d5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/broadcast/services/broadcast-engine.service.ts:193"}, "properties": {"repobilityId": "a31471ebe71e65c3", "scanner": "scanner-primary", "fingerprint": "522fb05dd17170d5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-12247cc677087599", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/meta/service.ts:630"}, "properties": {"repobilityId": "e58b32741d035bf6", "scanner": "scanner-primary", "fingerprint": "12247cc677087599", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-11abd98ef04335c7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/billing/razorpay.ts:150"}, "properties": {"repobilityId": "0c8d4db7320e4ba4", "scanner": "scanner-primary", "fingerprint": "11abd98ef04335c7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-16ee0c6826746720", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/failsafe/index.ts:31"}, "properties": {"repobilityId": "ac9414848a4cbf31", "scanner": "scanner-primary", "fingerprint": "16ee0c6826746720", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-44111b3b005f8f5c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/idempotency/index.ts:56"}, "properties": {"repobilityId": "f208c9da9c002eb7", "scanner": "scanner-primary", "fingerprint": "44111b3b005f8f5c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c003cf80ce8affd5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/whatsapp/sendMessage.ts:125"}, "properties": {"repobilityId": "c9441e2502f8c2ef", "scanner": "scanner-primary", "fingerprint": "c003cf80ce8affd5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-50080aea7239df57", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/instagram/processor.ts:48"}, "properties": {"repobilityId": "b23f940e01b5ef95", "scanner": "scanner-primary", "fingerprint": "50080aea7239df57", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7a0b17bf434f87e8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/tenant/manager.ts:165"}, "properties": {"repobilityId": "25c451ce4b0e331f", "scanner": "scanner-primary", "fingerprint": "7a0b17bf434f87e8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-529ea00cb5df1008", "level": "warning", "message": {"text": "Dockerfile runs as root: voice-agent/Dockerfile"}, "properties": {"repobilityId": "bd3ab776de18485c", "scanner": "scanner-primary", "fingerprint": "529ea00cb5df1008", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-28479fd44db19d22", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.11-slim"}, "properties": {"repobilityId": "7fe8ae1eafe443c6", "scanner": "scanner-primary", "fingerprint": "28479fd44db19d22", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "voice-agent/Dockerfile"}, "region": {"startLine": 1}}}]}, {"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-efbf642f2586768c", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/page.tsx:74"}, "properties": {"repobilityId": "88fd235b712bda65", "scanner": "scanner-primary", "fingerprint": "efbf642f2586768c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/page.tsx"}, "region": {"startLine": 74}}}]}, {"ruleId": "scanner-7203569ec239f820", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/layout.tsx:80"}, "properties": {"repobilityId": "0bca654fa2052eb0", "scanner": "scanner-primary", "fingerprint": "7203569ec239f820", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/layout.tsx"}, "region": {"startLine": 80}}}]}, {"ruleId": "scanner-6477ecc43a2be52e", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in src/app/api/chat/copy-proxy/route.ts:22"}, "properties": {"repobilityId": "9a13f2783dad7d70", "scanner": "scanner-primary", "fingerprint": "6477ecc43a2be52e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/api/chat/copy-proxy/route.ts"}, "region": {"startLine": 22}}}]}, {"ruleId": "scanner-17c9686e8a6b58de", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/dashboard/flows/_components/FlowSidebar.tsx:256"}, "properties": {"repobilityId": "2837df45a2826afd", "scanner": "scanner-primary", "fingerprint": "17c9686e8a6b58de", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/dashboard/flows/_components/FlowSidebar.tsx"}, "region": {"startLine": 256}}}]}, {"ruleId": "scanner-93e4dea9b87378e2", "level": "note", "message": {"text": "Very large file: src/app/api/webhooks/whatsapp/route.ts (2155 lines)"}, "properties": {"repobilityId": "5d277f3da0cbca13", "scanner": "scanner-primary", "fingerprint": "93e4dea9b87378e2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-86be1b04c35d3fd8", "level": "note", "message": {"text": "Very large file: src/app/dashboard/settings/page.tsx (1236 lines)"}, "properties": {"repobilityId": "6c178d30dbea70e8", "scanner": "scanner-primary", "fingerprint": "86be1b04c35d3fd8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3ac339c6845f2428", "level": "note", "message": {"text": "Very large file: src/app/dashboard/flows/_components/FlowInspector.tsx (1604 lines)"}, "properties": {"repobilityId": "620e69c20d18bf8f", "scanner": "scanner-primary", "fingerprint": "3ac339c6845f2428", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-aa3704eb8c327409", "level": "note", "message": {"text": "Very large file: src/app/dashboard/chat/ChatArea.tsx (1850 lines)"}, "properties": {"repobilityId": "2e32e46e2fd25e6d", "scanner": "scanner-primary", "fingerprint": "aa3704eb8c327409", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b159d5472878300d", "level": "note", "message": {"text": "Very large file: src/app/dashboard/agents/page.tsx (1818 lines)"}, "properties": {"repobilityId": "d55e47b870b2cca2", "scanner": "scanner-primary", "fingerprint": "b159d5472878300d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f14f2b4b36b490f3", "level": "note", "message": {"text": "Very large file: src/app/dashboard/contacts/_components/ContactsClient.tsx (1450 lines)"}, "properties": {"repobilityId": "67a9deed2db6c050", "scanner": "scanner-primary", "fingerprint": "f14f2b4b36b490f3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-974538fa2daac3fe", "level": "note", "message": {"text": "Very large file: src/app/dashboard/restaurant/bookings/_components/BookingsClient.tsx (1050 lines)"}, "properties": {"repobilityId": "20dec18e730a96fb", "scanner": "scanner-primary", "fingerprint": "974538fa2daac3fe", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ca2fb90217d1bfa4", "level": "note", "message": {"text": "Very large file: src/app/_components/LandingPageClient.tsx (3411 lines)"}, "properties": {"repobilityId": "42b7f19f4f3e50d5", "scanner": "scanner-primary", "fingerprint": "ca2fb90217d1bfa4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-bac915e1bd141fd4", "level": "note", "message": {"text": "Very large file: src/lib/flows/engine.ts (1579 lines)"}, "properties": {"repobilityId": "28917a4a1f228496", "scanner": "scanner-primary", "fingerprint": "bac915e1bd141fd4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6893a6c8b0861585", "level": "warning", "message": {"text": "Very low test-to-source ratio"}, "properties": {"repobilityId": "54a7de3f06314bf0", "scanner": "scanner-primary", "fingerprint": "6893a6c8b0861585", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "coverage"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "7b2fa7597e19be0a", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "907fe80fa23ab6f2", "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": "1a715afe50e5b8bb", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-9d79c4077342a7d0", "level": "warning", "message": {"text": "Runtime service client appears to use placeholder configuration"}, "properties": {"repobilityId": "685595bf2d3f2600", "scanner": "scanner-primary", "fingerprint": "9d79c4077342a7d0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "runtime-config", "service-client", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "4aba09bafecb6df0", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "01012575da69ce6b", "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": "bc4f568f7516e8da", "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": "27bb3f4d88892417", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-e725d2ab884fbd49", "level": "note", "message": {"text": "Multiple root agent instruction files without precedence"}, "properties": {"repobilityId": "1953db6c89508d22", "scanner": "scanner-primary", "fingerprint": "e725d2ab884fbd49", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["agent-instructions", "governance"]}}, {"ruleId": "scanner-61cb58c9c190e0bc", "level": "none", "message": {"text": "Commented-code block (6 lines) in middleware.ts:1"}, "properties": {"repobilityId": "9adeca83856669cb", "scanner": "scanner-primary", "fingerprint": "61cb58c9c190e0bc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8c7c1a370aaf73a4", "level": "none", "message": {"text": "Commented-code block (7 lines) in worker.ts:1"}, "properties": {"repobilityId": "136eb585fbee6d39", "scanner": "scanner-primary", "fingerprint": "8c7c1a370aaf73a4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-749bd4c08c90cb74", "level": "none", "message": {"text": "Commented-code block (9 lines) in tests/engine-hardening.test.ts:1"}, "properties": {"repobilityId": "d828204672a3d448", "scanner": "scanner-primary", "fingerprint": "749bd4c08c90cb74", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2966b0b69a2428cd", "level": "note", "message": {"text": "Legacy-named symbol `promo_v1` in tests/broadcast-trust-v4-1.test.ts:115"}, "properties": {"repobilityId": "c8282e86e09e5266", "scanner": "scanner-primary", "fingerprint": "2966b0b69a2428cd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-26ea431f1c6f3573", "level": "note", "message": {"text": "Legacy-named symbol `20260604_hospitality_os_v1` in scripts/check-migrations.mjs:67"}, "properties": {"repobilityId": "84315180cabc0c8e", "scanner": "scanner-primary", "fingerprint": "26ea431f1c6f3573", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-7e32c34e777dfad0", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/check-migrations.mjs:9"}, "properties": {"repobilityId": "ef5567becac2674c", "scanner": "scanner-primary", "fingerprint": "7e32c34e777dfad0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-34ab42c1605a9625", "level": "none", "message": {"text": "Commented-code block (7 lines) in _disabled/DashboardShell.original.tsx:3"}, "properties": {"repobilityId": "7050a4f5906b6a22", "scanner": "scanner-primary", "fingerprint": "34ab42c1605a9625", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-74c9c6f21de7aa00", "level": "none", "message": {"text": "Commented-code block (6 lines) in _disabled/app/api/admin/overview/route.ts:1"}, "properties": {"repobilityId": "932173cd191f0957", "scanner": "scanner-primary", "fingerprint": "74c9c6f21de7aa00", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9bd5c433f9c4b7bc", "level": "none", "message": {"text": "Commented-code block (5 lines) in _disabled/app/api/calls/outbound/route.ts:15"}, "properties": {"repobilityId": "0a4f043288412458", "scanner": "scanner-primary", "fingerprint": "9bd5c433f9c4b7bc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-075a7315a6194d01", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 _disabled/app/api/calls/outbound/route.ts:88"}, "properties": {"repobilityId": "98fc8d4f93777acb", "scanner": "scanner-primary", "fingerprint": "075a7315a6194d01", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f3b93b6513a71b09", "level": "none", "message": {"text": "Commented-code block (7 lines) in _disabled/app/api/cron/timeout/route.ts:1"}, "properties": {"repobilityId": "aa11f8c16725b107", "scanner": "scanner-primary", "fingerprint": "f3b93b6513a71b09", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-77d16778ddece1f2", "level": "none", "message": {"text": "Commented-code block (5 lines) in voice-agent/calendar_tools.py:90"}, "properties": {"repobilityId": "2211f68e1cd68d2e", "scanner": "scanner-primary", "fingerprint": "77d16778ddece1f2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-65d16c7273199692", "level": "none", "message": {"text": "Commented-code block (5 lines) in voice-agent/agent.py:320"}, "properties": {"repobilityId": "162c5f78f25bab98", "scanner": "scanner-primary", "fingerprint": "65d16c7273199692", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-457dff5e35867a93", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/diagnose_sheets.ts:52"}, "properties": {"repobilityId": "201b574b16bb5d5c", "scanner": "scanner-primary", "fingerprint": "457dff5e35867a93", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-813b2eca51110fe5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/run-concurrency-test.mjs:27"}, "properties": {"repobilityId": "95140912b9bc7b2d", "scanner": "scanner-primary", "fingerprint": "813b2eca51110fe5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1d2623c21f467ae6", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/scripts/concurrency-simulation.ts:1"}, "properties": {"repobilityId": "173eba93554f6c81", "scanner": "scanner-primary", "fingerprint": "1d2623c21f467ae6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1af1b806eecb85cd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/scripts/concurrency-simulation.ts:72"}, "properties": {"repobilityId": "03081a6658f28593", "scanner": "scanner-primary", "fingerprint": "1af1b806eecb85cd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c4475bc3283038e1", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/scripts/rotateEncryption.ts:11"}, "properties": {"repobilityId": "b601d059503d01c5", "scanner": "scanner-primary", "fingerprint": "c4475bc3283038e1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1f9f7d2f6005e26c", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/app/api/flows/trigger/[token]/route.ts:1"}, "properties": {"repobilityId": "7d6368ad83df2476", "scanner": "scanner-primary", "fingerprint": "1f9f7d2f6005e26c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-39c5c7ca2e4eb3ac", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/auth/google/callback/route.ts:37"}, "properties": {"repobilityId": "946e140893a1ed8b", "scanner": "scanner-primary", "fingerprint": "39c5c7ca2e4eb3ac", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f59dc90d5c3d619a", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/auth/callback/route.ts:25"}, "properties": {"repobilityId": "a9771379bae06ac0", "scanner": "scanner-primary", "fingerprint": "f59dc90d5c3d619a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e34b3bdf6fe65e61", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/app/api/auth/signup/route.ts:1"}, "properties": {"repobilityId": "2346c32f512b80cd", "scanner": "scanner-primary", "fingerprint": "e34b3bdf6fe65e61", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c56836c218c236c1", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/api/auth/send-otp/route.ts:1"}, "properties": {"repobilityId": "61d4d47c1adda85d", "scanner": "scanner-primary", "fingerprint": "c56836c218c236c1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c8d49cce0cf10de0", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/api/broadcast/health/route.ts:5"}, "properties": {"repobilityId": "cee7f3ea75a2a488", "scanner": "scanner-primary", "fingerprint": "c8d49cce0cf10de0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ea46a11d76369977", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/app/api/dashboard/flows/[id]/simulate/route.ts:1"}, "properties": {"repobilityId": "b504f5563bb28d51", "scanner": "scanner-primary", "fingerprint": "ea46a11d76369977", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ec692244871b1633", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/api/dashboard/playground/route.ts:99"}, "properties": {"repobilityId": "44f54a5b5b6be4ef", "scanner": "scanner-primary", "fingerprint": "ec692244871b1633", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-add34c61c47bc735", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/app/api/dashboard/leads/export/route.ts:1"}, "properties": {"repobilityId": "b2e122ff1d84d969", "scanner": "scanner-primary", "fingerprint": "add34c61c47bc735", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4fb9e0cea9b2cf8a", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/api/dashboard/data-deletion/route.ts:1"}, "properties": {"repobilityId": "095a45b312615519", "scanner": "scanner-primary", "fingerprint": "4fb9e0cea9b2cf8a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8fb6930a0a9b217f", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/dashboard/chat/conversations/route.ts:13"}, "properties": {"repobilityId": "b074422e4931f472", "scanner": "scanner-primary", "fingerprint": "8fb6930a0a9b217f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e1d706389fb40f58", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/dashboard/billing/route.ts:23"}, "properties": {"repobilityId": "39e9d940a72628fa", "scanner": "scanner-primary", "fingerprint": "e1d706389fb40f58", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4d0161e364fc77ff", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/app/api/dashboard/scripted-replies/route.ts:1"}, "properties": {"repobilityId": "0ccbb17ed7996136", "scanner": "scanner-primary", "fingerprint": "4d0161e364fc77ff", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f646f7602aa90554", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/api/dashboard/scripted-replies/upload/route.ts:1"}, "properties": {"repobilityId": "4332aabdf6c881d5", "scanner": "scanner-primary", "fingerprint": "f646f7602aa90554", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-382c698130ae3827", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/dashboard/knowledge/route.ts:99"}, "properties": {"repobilityId": "9f2117be388fbf48", "scanner": "scanner-primary", "fingerprint": "382c698130ae3827", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cd38af63a16e68fe", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/chat/copy-proxy/route.ts:13"}, "properties": {"repobilityId": "aad86f3e17a34401", "scanner": "scanner-primary", "fingerprint": "cd38af63a16e68fe", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6024cdf7df9ae251", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/app/api/admin/provision/route.ts:1"}, "properties": {"repobilityId": "60149b505ea3c011", "scanner": "scanner-primary", "fingerprint": "6024cdf7df9ae251", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cd646fc91f493964", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/cron/birthday-greetings/route.ts:1"}, "properties": {"repobilityId": "91bb1dd990323740", "scanner": "scanner-primary", "fingerprint": "cd646fc91f493964", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ac8e3c51836380ce", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/restaurant/blocked-dates/route.ts:1"}, "properties": {"repobilityId": "2e4a68cffb5a45a9", "scanner": "scanner-primary", "fingerprint": "ac8e3c51836380ce", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-81c6d7d021ee7a66", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/restaurant/bookings/route.ts:1"}, "properties": {"repobilityId": "ff6c13e6c872d61d", "scanner": "scanner-primary", "fingerprint": "81c6d7d021ee7a66", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-83170797f04be293", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/restaurant/bookings/import/route.ts:5"}, "properties": {"repobilityId": "ec74bc5aae27e34e", "scanner": "scanner-primary", "fingerprint": "83170797f04be293", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0097a554982b148d", "level": "none", "message": {"text": "Commented-code block (13 lines) in src/app/api/restaurant/bookings/confirm/route.ts:1"}, "properties": {"repobilityId": "f11980b87d7125bf", "scanner": "scanner-primary", "fingerprint": "0097a554982b148d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-54c320fe751c0744", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/restaurant/slots/route.ts:1"}, "properties": {"repobilityId": "39bd4142b8375b65", "scanner": "scanner-primary", "fingerprint": "54c320fe751c0744", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6fbeff83e11bcc56", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/api/restaurant/slots/check-availability/route.ts:1"}, "properties": {"repobilityId": "224f05c79a64c612", "scanner": "scanner-primary", "fingerprint": "6fbeff83e11bcc56", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c3bc98b174d57c61", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/app/api/restaurant/slots/lock/route.ts:1"}, "properties": {"repobilityId": "e0d793b278e010ae", "scanner": "scanner-primary", "fingerprint": "c3bc98b174d57c61", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e2d4f8409e8b1357", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/restaurant/tables/route.ts:13"}, "properties": {"repobilityId": "5a448cbf02f627e2", "scanner": "scanner-primary", "fingerprint": "e2d4f8409e8b1357", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2d0365c11a43cb91", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/api/webhooks/meta-leads/route.ts:1"}, "properties": {"repobilityId": "7dfd624560d191d2", "scanner": "scanner-primary", "fingerprint": "2d0365c11a43cb91", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3805a1d7ec4ed967", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/webhooks/meta-leads/route.ts:125"}, "properties": {"repobilityId": "8d807163800a8d4f", "scanner": "scanner-primary", "fingerprint": "3805a1d7ec4ed967", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8a334845a8cb82b7", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/api/webhooks/whatsapp/route.ts:1"}, "properties": {"repobilityId": "bd923588d0a8d0c6", "scanner": "scanner-primary", "fingerprint": "8a334845a8cb82b7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-754915c4a5792a10", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/meta-ads/notifications/route.ts:1"}, "properties": {"repobilityId": "e92b0de212bd5acd", "scanner": "scanner-primary", "fingerprint": "754915c4a5792a10", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8159941522c444a5", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/api/meta-ads/connect/route.ts:1"}, "properties": {"repobilityId": "8540bd7d0ae44a9f", "scanner": "scanner-primary", "fingerprint": "8159941522c444a5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d736119be75bd5fa", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/app/api/meta-ads/analytics/route.ts:1"}, "properties": {"repobilityId": "adc46cb9f501eb7a", "scanner": "scanner-primary", "fingerprint": "d736119be75bd5fa", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e1120746a47ef69c", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/app/api/meta-ads/callback/route.ts:1"}, "properties": {"repobilityId": "6cc12cda629671d1", "scanner": "scanner-primary", "fingerprint": "e1120746a47ef69c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5d79750a554f11fa", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/meta-ads/accounts/route.ts:1"}, "properties": {"repobilityId": "c8f12f4f0a2abf9b", "scanner": "scanner-primary", "fingerprint": "5d79750a554f11fa", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1c40cb3aa1a99d99", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/api/meta-ads/status/route.ts:1"}, "properties": {"repobilityId": "6988e7568fda30f6", "scanner": "scanner-primary", "fingerprint": "1c40cb3aa1a99d99", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d4809238f2b8b34d", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/app/api/meta-ads/cron/route.ts:1"}, "properties": {"repobilityId": "7ebea1f14fbf7ba0", "scanner": "scanner-primary", "fingerprint": "d4809238f2b8b34d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c95f208dc930f3a6", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/api/meta-ads/campaigns/route.ts:1"}, "properties": {"repobilityId": "e4f3f8ab8ecb56e7", "scanner": "scanner-primary", "fingerprint": "c95f208dc930f3a6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b6bcadb4dd1b7e76", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/meta-ads/targeting/route.ts:1"}, "properties": {"repobilityId": "107abb4ed4398fb3", "scanner": "scanner-primary", "fingerprint": "b6bcadb4dd1b7e76", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d82f28b7047aaab9", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/dashboard/settings/page.tsx:222"}, "properties": {"repobilityId": "9cd94cf296cf3ba1", "scanner": "scanner-primary", "fingerprint": "d82f28b7047aaab9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3c91a6bd9c3c1e9f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/settings/page.tsx:459"}, "properties": {"repobilityId": "f7d29d40b9f02c7c", "scanner": "scanner-primary", "fingerprint": "3c91a6bd9c3c1e9f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7a2865973a344a80", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/flows/store.ts:236"}, "properties": {"repobilityId": "ce9d8d4d412a315b", "scanner": "scanner-primary", "fingerprint": "7a2865973a344a80", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-44934d53a4ede622", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/flows/page.tsx:57"}, "properties": {"repobilityId": "4f842bf6abb54c70", "scanner": "scanner-primary", "fingerprint": "44934d53a4ede622", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2bab33b8dbae898d", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/dashboard/flows/_components/FlowInspector.tsx:72"}, "properties": {"repobilityId": "7488a8b4c715ad61", "scanner": "scanner-primary", "fingerprint": "2bab33b8dbae898d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-46b95b91b550e8e8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/flows/_components/FlowInspector.tsx:994"}, "properties": {"repobilityId": "4562aa9ca38ff59b", "scanner": "scanner-primary", "fingerprint": "46b95b91b550e8e8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6f70b3051ca2c85a", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/dashboard/flows/_components/VariableTextarea.tsx:3"}, "properties": {"repobilityId": "4edb6d3b6a5e2f78", "scanner": "scanner-primary", "fingerprint": "6f70b3051ca2c85a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c9460ed89a776a14", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/dashboard/broadcast/store/broadcast.store.ts:1"}, "properties": {"repobilityId": "ec0793075e3cc01c", "scanner": "scanner-primary", "fingerprint": "c9460ed89a776a14", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b5fc8475aa7342ff", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/broadcast/_components/ContactPickerDrawer.tsx:74"}, "properties": {"repobilityId": "9378de40aee34d9a", "scanner": "scanner-primary", "fingerprint": "b5fc8475aa7342ff", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fb9cc0d76447a2a3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/broadcast/_components/BroadcastBuilder.tsx:474"}, "properties": {"repobilityId": "59cfeeb328dea832", "scanner": "scanner-primary", "fingerprint": "fb9cc0d76447a2a3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0e90aaa481ffced6", "level": "note", "message": {"text": "Legacy-named symbol `welcome_offer_v2` in src/app/dashboard/broadcast/_components/BroadcastPanel.tsx:306"}, "properties": {"repobilityId": "0691708f80bd949d", "scanner": "scanner-primary", "fingerprint": "0e90aaa481ffced6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-91d60da41bc6b567", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/_layout/MetaAdsNotificationBell.tsx:99"}, "properties": {"repobilityId": "c475033e8c90f986", "scanner": "scanner-primary", "fingerprint": "91d60da41bc6b567", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0ef2f91e68b9421a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/chat/ChatArea.tsx:395"}, "properties": {"repobilityId": "7a926d06ceff5fca", "scanner": "scanner-primary", "fingerprint": "0ef2f91e68b9421a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ab447cb088c2c9f2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/admin/onboard/_components/OnboardClient.tsx:134"}, "properties": {"repobilityId": "f2162a66a892a016", "scanner": "scanner-primary", "fingerprint": "ab447cb088c2c9f2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-66c6a798c3672935", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/agents/page.tsx:351"}, "properties": {"repobilityId": "5e1b28dca863e32e", "scanner": "scanner-primary", "fingerprint": "66c6a798c3672935", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-99f322ea6073d9f9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/agents/_components/AgentsClient.tsx:82"}, "properties": {"repobilityId": "0f08be047a1a74a9", "scanner": "scanner-primary", "fingerprint": "99f322ea6073d9f9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a691ad81b2da1fdd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/system/dead-letter/page.tsx:51"}, "properties": {"repobilityId": "487588d831469bb6", "scanner": "scanner-primary", "fingerprint": "a691ad81b2da1fdd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3c6af71f9b093f80", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/contacts/_components/ContactsClient.tsx:169"}, "properties": {"repobilityId": "4669ef3b012bbebb", "scanner": "scanner-primary", "fingerprint": "3c6af71f9b093f80", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b5df614ebc2c7bf8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/automations/_components/AutomationsClient.tsx:123"}, "properties": {"repobilityId": "1dcca14644fb912d", "scanner": "scanner-primary", "fingerprint": "b5df614ebc2c7bf8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5819ebbd30ce9cc4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/restaurant/waitlist/_components/WaitlistClient.tsx:63"}, "properties": {"repobilityId": "e8676ad66e4a1aa2", "scanner": "scanner-primary", "fingerprint": "5819ebbd30ce9cc4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-edc4f02c0afe10f6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/meta-ads/_components/MetaAdsLeadsClient.tsx:32"}, "properties": {"repobilityId": "c20e5375f5175c99", "scanner": "scanner-primary", "fingerprint": "edc4f02c0afe10f6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-488ee9a8647a78f8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/meta-ads/_components/CampaignWizardModal.tsx:144"}, "properties": {"repobilityId": "e18a109254be0dd5", "scanner": "scanner-primary", "fingerprint": "488ee9a8647a78f8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-05d993d08b13b4db", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/meta-ads/_components/MetaAdsSettingsClient.tsx:221"}, "properties": {"repobilityId": "28d68f031b0688df", "scanner": "scanner-primary", "fingerprint": "05d993d08b13b4db", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9c3a01c71165c3ed", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/meta-ads/_components/MetaAdsDashboardClient.tsx:86"}, "properties": {"repobilityId": "3dfded336dbdb8ee", "scanner": "scanner-primary", "fingerprint": "9c3a01c71165c3ed", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c7f1ef2a3b8a1ed5", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/signup/page.tsx:8"}, "properties": {"repobilityId": "4bdc9a0a71bcba0a", "scanner": "scanner-primary", "fingerprint": "c7f1ef2a3b8a1ed5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-159afded0298a808", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/signup/page.tsx:127"}, "properties": {"repobilityId": "f571d408a4b548fb", "scanner": "scanner-primary", "fingerprint": "159afded0298a808", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7d182d0cb08376ae", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/libra/page.tsx:5"}, "properties": {"repobilityId": "65367c27affe9d88", "scanner": "scanner-primary", "fingerprint": "7d182d0cb08376ae", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-349d5d6108395bec", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/onboard/page.tsx:8"}, "properties": {"repobilityId": "93f2ed880f6e0d4d", "scanner": "scanner-primary", "fingerprint": "349d5d6108395bec", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-05f3d8dc6f3938af", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/env.ts:48"}, "properties": {"repobilityId": "d7e7de715e14e38f", "scanner": "scanner-primary", "fingerprint": "05f3d8dc6f3938af", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-548f42ddaf625b24", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/lib/brand.ts:1"}, "properties": {"repobilityId": "12c4c7e822267636", "scanner": "scanner-primary", "fingerprint": "548f42ddaf625b24", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b404907f13fba617", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/lib/integrations/google-calendar.ts:1"}, "properties": {"repobilityId": "f541c204d146f60d", "scanner": "scanner-primary", "fingerprint": "b404907f13fba617", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bf4336e048c69ed2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/integrations/google-calendar.ts:40"}, "properties": {"repobilityId": "69cff8ca2a656458", "scanner": "scanner-primary", "fingerprint": "bf4336e048c69ed2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-62f7686ac3c2341c", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/integrations/capi-trigger.ts:1"}, "properties": {"repobilityId": "30e17425615c7dd7", "scanner": "scanner-primary", "fingerprint": "62f7686ac3c2341c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d56752121b19fb9e", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/integrations/meta-capi.ts:1"}, "properties": {"repobilityId": "b23f25f8af1b1697", "scanner": "scanner-primary", "fingerprint": "d56752121b19fb9e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-88dd465234be7964", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/integrations/meta-capi.ts:127"}, "properties": {"repobilityId": "e4d167f0ae9a5184", "scanner": "scanner-primary", "fingerprint": "88dd465234be7964", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c28231a70249ad89", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/integrations/google-sheets.ts:1"}, "properties": {"repobilityId": "23c091c2090107e7", "scanner": "scanner-primary", "fingerprint": "c28231a70249ad89", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b08dc2d1ff88f9ce", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/integrations/google-sheets.ts:46"}, "properties": {"repobilityId": "fbb6a33060443815", "scanner": "scanner-primary", "fingerprint": "b08dc2d1ff88f9ce", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b8baadb4fc8ef1d3", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/flows/engine.ts:1"}, "properties": {"repobilityId": "3342348c1b585aa5", "scanner": "scanner-primary", "fingerprint": "b8baadb4fc8ef1d3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a03750868613e3cf", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/flows/variables.ts:1"}, "properties": {"repobilityId": "5b8685ac275f0686", "scanner": "scanner-primary", "fingerprint": "a03750868613e3cf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-55f2b58084e58959", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/lib/ai/embedding-queue.ts:1"}, "properties": {"repobilityId": "4b77cdda5163c10e", "scanner": "scanner-primary", "fingerprint": "55f2b58084e58959", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b9c8814dd558a694", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/ai/rag.ts:1"}, "properties": {"repobilityId": "e3a9f4a91020fcaf", "scanner": "scanner-primary", "fingerprint": "b9c8814dd558a694", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ba943f50ac497407", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/lib/ai/engine.ts:1"}, "properties": {"repobilityId": "044f9874e6b5b36c", "scanner": "scanner-primary", "fingerprint": "ba943f50ac497407", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a8b68ad2a54e88e4", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/followup/engine.ts:1"}, "properties": {"repobilityId": "2c7d20d195e01487", "scanner": "scanner-primary", "fingerprint": "a8b68ad2a54e88e4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-438885a0b3d1ce46", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/lib/webhook/decisions.ts:4"}, "properties": {"repobilityId": "a99f3b5c86074409", "scanner": "scanner-primary", "fingerprint": "438885a0b3d1ce46", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e633476e95495375", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/lib/broadcast/fetch-leads.ts:1"}, "properties": {"repobilityId": "c1f2a3df3dfe03a2", "scanner": "scanner-primary", "fingerprint": "e633476e95495375", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-01b0ca93c19ddcc6", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/broadcast/services/audience-engine.service.ts:126"}, "properties": {"repobilityId": "79b9cbc6f74e4ceb", "scanner": "scanner-primary", "fingerprint": "01b0ca93c19ddcc6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-34bd82cea50eb47e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/broadcast/services/meta-template-sync.service.ts:54"}, "properties": {"repobilityId": "da9110bb9c4d6f7e", "scanner": "scanner-primary", "fingerprint": "34bd82cea50eb47e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5a50894f835d21ac", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/utils/ssrf.ts:1"}, "properties": {"repobilityId": "be25d4a05f58be25", "scanner": "scanner-primary", "fingerprint": "5a50894f835d21ac", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-76afce126b9fa8d6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/utils/ssrf.ts:4"}, "properties": {"repobilityId": "018759a487b6aa4e", "scanner": "scanner-primary", "fingerprint": "76afce126b9fa8d6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d9d4799b199d900f", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/utils/crypto.ts:1"}, "properties": {"repobilityId": "e868eb50cab17183", "scanner": "scanner-primary", "fingerprint": "d9d4799b199d900f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-57466f22c86b7989", "level": "none", "message": {"text": "Commented-code block (15 lines) in src/lib/observability/trace.ts:83"}, "properties": {"repobilityId": "dd0f9aa872fcdbbd", "scanner": "scanner-primary", "fingerprint": "57466f22c86b7989", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f9d47fc2c951453a", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/lib/redis/client.ts:1"}, "properties": {"repobilityId": "d32c85131890f4bc", "scanner": "scanner-primary", "fingerprint": "f9d47fc2c951453a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d22d4b70c14c6022", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/redis/client.ts:37"}, "properties": {"repobilityId": "54584a8688626ec0", "scanner": "scanner-primary", "fingerprint": "d22d4b70c14c6022", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4f9c364eb8e14177", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/meta/service.ts:1"}, "properties": {"repobilityId": "732c90b08489ca8c", "scanner": "scanner-primary", "fingerprint": "4f9c364eb8e14177", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1cd8bac3dee17666", "level": "none", "message": {"text": "Commented-code block (19 lines) in src/lib/audit/logger.ts:66"}, "properties": {"repobilityId": "98536f432ff0564a", "scanner": "scanner-primary", "fingerprint": "1cd8bac3dee17666", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ec06c277b1bc3ac4", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/billing/razorpay.ts:1"}, "properties": {"repobilityId": "2c678badbfe0a282", "scanner": "scanner-primary", "fingerprint": "ec06c277b1bc3ac4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3bb1fa77c18d5d22", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/billing/costProtection.ts:1"}, "properties": {"repobilityId": "e83b7b0cedc4a72d", "scanner": "scanner-primary", "fingerprint": "3bb1fa77c18d5d22", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f950ba07e25b88b2", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/queue/deadLetter.ts:1"}, "properties": {"repobilityId": "41b793818dc18fbc", "scanner": "scanner-primary", "fingerprint": "f950ba07e25b88b2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1017e1bdc927d25e", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/supabase/client.ts:1"}, "properties": {"repobilityId": "887b82251817d080", "scanner": "scanner-primary", "fingerprint": "1017e1bdc927d25e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-aacc2497c79f1636", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/supabase/admin.ts:1"}, "properties": {"repobilityId": "398d8dad184f7341", "scanner": "scanner-primary", "fingerprint": "aacc2497c79f1636", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ccdf57b18db0cc8e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/instagram/service.ts:25"}, "properties": {"repobilityId": "12d5e04721f614bf", "scanner": "scanner-primary", "fingerprint": "ccdf57b18db0cc8e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6b5e81177fc5aecb", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/lib/abuse/prevention.ts:1"}, "properties": {"repobilityId": "16bdd2528e93e778", "scanner": "scanner-primary", "fingerprint": "6b5e81177fc5aecb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-41666118a880e323", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/lib/handoff/manager.ts:1"}, "properties": {"repobilityId": "2e307fdeb9a83dd1", "scanner": "scanner-primary", "fingerprint": "41666118a880e323", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2701f2898576639b", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/tenant/manager.ts:1"}, "properties": {"repobilityId": "1366ae4c5f195550", "scanner": "scanner-primary", "fingerprint": "2701f2898576639b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1f5b6d522b6c455d", "level": "error", "message": {"text": "FastAPI POST `trigger_outbound_call` without auth dependency \u2014 voice-agent/ui_server.py:47"}, "properties": {"repobilityId": "e7da4964e5b47a36", "scanner": "scanner-primary", "fingerprint": "1f5b6d522b6c455d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "voice-agent/ui_server.py"}, "region": {"startLine": 47}}}]}, {"ruleId": "scanner-28aad06ba983e18d", "level": "error", "message": {"text": "Dangling fetch: GET /api/dashboard/stats (_disabled/dashboard_page_with_recharts.tsx:108)"}, "properties": {"repobilityId": "b455305bdd09d954", "scanner": "scanner-primary", "fingerprint": "28aad06ba983e18d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-eae2381ce8baff75", "level": "error", "message": {"text": "Dangling fetch: POST /api/auth/logout (_disabled/DashboardShell.original.tsx:93)"}, "properties": {"repobilityId": "f96ea0ddbddcb655", "scanner": "scanner-primary", "fingerprint": "eae2381ce8baff75", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b4f0f03398e25a0f", "level": "error", "message": {"text": "Dangling fetch: GET https://graph.instagram.com/refresh_access_token (_disabled/app/api/cron/instagram-refresh/route.ts:32)"}, "properties": {"repobilityId": "5bada43ef0c4a5ab", "scanner": "scanner-primary", "fingerprint": "b4f0f03398e25a0f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-98257533542804cf", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/overview (_disabled/app/admin/page.tsx:82)"}, "properties": {"repobilityId": "d2b4a6f35667d863", "scanner": "scanner-primary", "fingerprint": "98257533542804cf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-04f0b9ed887d1576", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/overview (_disabled/app/admin/analytics/page.tsx:32)"}, "properties": {"repobilityId": "20f147d0c0e25e19", "scanner": "scanner-primary", "fingerprint": "04f0b9ed887d1576", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1cb4383cbed34d61", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/overview (_disabled/app/admin/clients/page.tsx:47)"}, "properties": {"repobilityId": "4ba9456a092f2f57", "scanner": "scanner-primary", "fingerprint": "1cb4383cbed34d61", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8d5036ca2c115ffd", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/overview (_disabled/app/admin/clients/page.tsx:64)"}, "properties": {"repobilityId": "0cf64a41ad45fda2", "scanner": "scanner-primary", "fingerprint": "8d5036ca2c115ffd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-95aca41ae57acafe", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/overview (_disabled/app/admin/revenue/page.tsx:29)"}, "properties": {"repobilityId": "6635cfd774c723d8", "scanner": "scanner-primary", "fingerprint": "95aca41ae57acafe", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-654b42f0fd0a7fcd", "level": "error", "message": {"text": "Dangling fetch: POST https://oauth2.googleapis.com/token (src/diagnose_sheets.ts:52)"}, "properties": {"repobilityId": "32d2b82adf9d6e28", "scanner": "scanner-primary", "fingerprint": "654b42f0fd0a7fcd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-77819a2a61348c13", "level": "error", "message": {"text": "Dangling fetch: GET https://sheets.googleapis.com/v4/spreadsheets/${cfg.spreadsheet_id}?fields=sheets.properties.title (src/diagnose_sheets.ts:88)"}, "properties": {"repobilityId": "17838cff58375928", "scanner": "scanner-primary", "fingerprint": "77819a2a61348c13", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-05dc8079f415ed3f", "level": "error", "message": {"text": "Dangling fetch: POST https://sheets.googleapis.com/v4/spreadsheets/${cfg.spreadsheet_id}/values/${encodeURIComponent(appendRange)}:append?valueInputOption=USER_ENTERED&insertDataOption=INSERT_ROWS (src/diagnose_sheets.ts:106)"}, "properties": {"repobilityId": "7d318f55568f4ced", "scanner": "scanner-primary", "fingerprint": "05dc8079f415ed3f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-299744e5416c66e7", "level": "error", "message": {"text": "Dangling fetch: POST /api/auth/verify-otp (src/app/login/page.tsx:101)"}, "properties": {"repobilityId": "f63f3e6762dcd25f", "scanner": "scanner-primary", "fingerprint": "299744e5416c66e7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3b9c11d918e02cc8", "level": "error", "message": {"text": "Dangling fetch: POST https://oauth2.googleapis.com/token (src/app/api/auth/google/callback/route.ts:37)"}, "properties": {"repobilityId": "0e0093aff11f147a", "scanner": "scanner-primary", "fingerprint": "3b9c11d918e02cc8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3701d83daf658695", "level": "error", "message": {"text": "Dangling fetch: GET https://graph.facebook.com/v20.0/${leadgenId}?access_token=${systemToken} (src/app/api/webhooks/meta-leads/route.ts:125)"}, "properties": {"repobilityId": "db1adb9d9b68d45f", "scanner": "scanner-primary", "fingerprint": "3701d83daf658695", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-da57a3399d28940a", "level": "error", "message": {"text": "Dangling fetch: PUT /api/dashboard/integrations (src/app/dashboard/integrations/_components/IntegrationsClient.tsx:197)"}, "properties": {"repobilityId": "e4063ab6928f80a6", "scanner": "scanner-primary", "fingerprint": "da57a3399d28940a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2b8692a1808d2630", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/dashboard/integrations?id=${integration.id} (src/app/dashboard/integrations/_components/IntegrationsClient.tsx:215)"}, "properties": {"repobilityId": "a45834583163e220", "scanner": "scanner-primary", "fingerprint": "2b8692a1808d2630", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9d0ea3911c3e91e4", "level": "error", "message": {"text": "Dangling fetch: GET /api/dashboard/integrations (src/app/dashboard/integrations/_components/IntegrationsClient.tsx:354)"}, "properties": {"repobilityId": "89c40ff608b3a625", "scanner": "scanner-primary", "fingerprint": "9d0ea3911c3e91e4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-42723c7781be4666", "level": "error", "message": {"text": "Dangling fetch: GET /api/dashboard/settings (src/app/dashboard/settings/page.tsx:374)"}, "properties": {"repobilityId": "a6cda178aa70b04d", "scanner": "scanner-primary", "fingerprint": "42723c7781be4666", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e9aaa4e3f58ca84c", "level": "error", "message": {"text": "Dangling fetch: GET /api/dashboard/follow-up-templates (src/app/dashboard/settings/page.tsx:375)"}, "properties": {"repobilityId": "815e87cd4990b5c7", "scanner": "scanner-primary", "fingerprint": "e9aaa4e3f58ca84c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-39c4862a856ceb3d", "level": "error", "message": {"text": "Dangling fetch: POST /api/dashboard/settings/test-whatsapp (src/app/dashboard/settings/page.tsx:393)"}, "properties": {"repobilityId": "a460265defdb89a0", "scanner": "scanner-primary", "fingerprint": "39c4862a856ceb3d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7c725c9dec2edfeb", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/dashboard/settings (src/app/dashboard/settings/page.tsx:445)"}, "properties": {"repobilityId": "c1fb212c80b0c022", "scanner": "scanner-primary", "fingerprint": "7c725c9dec2edfeb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-70c2fe34c6b9e4b7", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/dashboard/follow-up-templates (src/app/dashboard/settings/page.tsx:459)"}, "properties": {"repobilityId": "84f35f7b70209f59", "scanner": "scanner-primary", "fingerprint": "70c2fe34c6b9e4b7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1acb49300148c2ab", "level": "error", "message": {"text": "Dangling fetch: GET /api/dashboard/settings/audit-log (src/app/dashboard/settings/audit-log/page.tsx:41)"}, "properties": {"repobilityId": "92e3d4be8ae74227", "scanner": "scanner-primary", "fingerprint": "1acb49300148c2ab", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-867830953158981a", "level": "error", "message": {"text": "Dangling fetch: GET /api/dashboard/flows/${id} (src/app/dashboard/flows/store.ts:202)"}, "properties": {"repobilityId": "64d0f7de99fb5fbf", "scanner": "scanner-primary", "fingerprint": "867830953158981a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bf418df4b92235f8", "level": "error", "message": {"text": "Dangling fetch: PUT /api/dashboard/flows/${flowId} (src/app/dashboard/flows/store.ts:229)"}, "properties": {"repobilityId": "17ba9e3371b0807d", "scanner": "scanner-primary", "fingerprint": "bf418df4b92235f8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-92b2cf6aed974d99", "level": "error", "message": {"text": "Dangling fetch: POST /api/dashboard/flows (src/app/dashboard/flows/store.ts:236)"}, "properties": {"repobilityId": "8e6861a78af75e66", "scanner": "scanner-primary", "fingerprint": "92b2cf6aed974d99", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4deadc1fbe9ceb35", "level": "error", "message": {"text": "Dangling fetch: PUT /api/dashboard/flows/${id} (src/app/dashboard/flows/store.ts:271)"}, "properties": {"repobilityId": "78f1d38831d38c07", "scanner": "scanner-primary", "fingerprint": "4deadc1fbe9ceb35", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f7e9338710c054b6", "level": "error", "message": {"text": "Dangling fetch: GET /api/dashboard/flows (src/app/dashboard/flows/page.tsx:38)"}, "properties": {"repobilityId": "cb251b32b5625dea", "scanner": "scanner-primary", "fingerprint": "f7e9338710c054b6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3daf0aa1d50e7685", "level": "error", "message": {"text": "Dangling fetch: PUT /api/dashboard/flows/${flow.id} (src/app/dashboard/flows/page.tsx:46)"}, "properties": {"repobilityId": "17bb33736b362e1b", "scanner": "scanner-primary", "fingerprint": "3daf0aa1d50e7685", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4ba78daba1907c5f", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/dashboard/flows/${id} (src/app/dashboard/flows/page.tsx:57)"}, "properties": {"repobilityId": "34d109442bb3d66f", "scanner": "scanner-primary", "fingerprint": "4ba78daba1907c5f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bfa11891ef3fd3ea", "level": "error", "message": {"text": "Dangling fetch: POST /api/dashboard/flows/${id}/versions (src/app/dashboard/flows/editor/[id]/_FlowEditorMain.tsx:75)"}, "properties": {"repobilityId": "ceb0dd3427ffedd6", "scanner": "scanner-primary", "fingerprint": "bfa11891ef3fd3ea", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-61e0a25338597a0c", "level": "error", "message": {"text": "Dangling fetch: GET /api/dashboard/flows/${flowId}/executions (src/app/dashboard/flows/_components/FlowFlightRecorder.tsx:66)"}, "properties": {"repobilityId": "583f45e9e3504eb5", "scanner": "scanner-primary", "fingerprint": "61e0a25338597a0c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-725965cbd310cd75", "level": "error", "message": {"text": "Dangling fetch: GET /api/dashboard/flows/${flowId}/executions?conversation_id=${exec.conversation_id} (src/app/dashboard/flows/_components/FlowFlightRecorder.tsx:76)"}, "properties": {"repobilityId": "b5970029f92d6e87", "scanner": "scanner-primary", "fingerprint": "725965cbd310cd75", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cb5e0b116044f5b7", "level": "error", "message": {"text": "Dangling fetch: GET /api/dashboard/flows/${flowId}/versions (src/app/dashboard/flows/_components/FlowVersionPanel.tsx:37)"}, "properties": {"repobilityId": "9981d0259b4b8c0a", "scanner": "scanner-primary", "fingerprint": "cb5e0b116044f5b7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-68bac6c750452257", "level": "error", "message": {"text": "Dangling fetch: PUT /api/dashboard/flows/${flowId}/versions (src/app/dashboard/flows/_components/FlowVersionPanel.tsx:51)"}, "properties": {"repobilityId": "f60ff0be7237d4ea", "scanner": "scanner-primary", "fingerprint": "68bac6c750452257", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cc5c6f58a61afdd5", "level": "error", "message": {"text": "Dangling fetch: GET /api/dashboard/flows/${flowId}/analytics?days=${days} (src/app/dashboard/flows/_components/FlowAnalytics.tsx:79)"}, "properties": {"repobilityId": "78b960080ab981f8", "scanner": "scanner-primary", "fingerprint": "cc5c6f58a61afdd5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3b9a1cff5d3e0bca", "level": "error", "message": {"text": "Dangling fetch: POST /api/dashboard/flows/${flowId}/simulate (src/app/dashboard/flows/_components/FlowSimulator.tsx:87)"}, "properties": {"repobilityId": "f466cbbca261dd39", "scanner": "scanner-primary", "fingerprint": "3b9a1cff5d3e0bca", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f1a0e2e66864791e", "level": "error", "message": {"text": "Dangling fetch: POST /api/dashboard/flows/generate (src/app/dashboard/flows/_components/AIFlowAssistant.tsx:33)"}, "properties": {"repobilityId": "49e8ebf7f580f868", "scanner": "scanner-primary", "fingerprint": "f1a0e2e66864791e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-965227477cbbdfa2", "level": "error", "message": {"text": "Dangling fetch: GET /api/dashboard/agents (src/app/dashboard/operations/_components/AgentPerformanceStatus.tsx:37)"}, "properties": {"repobilityId": "84754781a2712817", "scanner": "scanner-primary", "fingerprint": "965227477cbbdfa2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-de8e6059e53db73c", "level": "error", "message": {"text": "Dangling fetch: GET /api/dashboard/analytics (src/app/dashboard/operations/_components/ResponseMetricsChart.tsx:25)"}, "properties": {"repobilityId": "3e468ee4fe1842e4", "scanner": "scanner-primary", "fingerprint": "de8e6059e53db73c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-21424c3152ba7dfa", "level": "error", "message": {"text": "Dangling fetch: GET /api/dashboard/stats (src/app/dashboard/operations/_components/QuickActionsGrid.tsx:17)"}, "properties": {"repobilityId": "671678232fcb1a6e", "scanner": "scanner-primary", "fingerprint": "21424c3152ba7dfa", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fac624c3cd26b956", "level": "error", "message": {"text": "Dangling fetch: GET /api/dashboard/analytics (src/app/dashboard/operations/_components/AIEfficiencyPanel.tsx:35)"}, "properties": {"repobilityId": "920b5939f6fd7dfc", "scanner": "scanner-primary", "fingerprint": "fac624c3cd26b956", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0d2f5f4527e8082b", "level": "error", "message": {"text": "Dangling fetch: GET /api/dashboard/stats (src/app/dashboard/operations/_components/OperationsKPIs.tsx:35)"}, "properties": {"repobilityId": "5b88220211f077ee", "scanner": "scanner-primary", "fingerprint": "0d2f5f4527e8082b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1a515bd2f5c8e829", "level": "error", "message": {"text": "Dangling fetch: GET /api/dashboard/automations (src/app/dashboard/operations/_components/OperationsKPIs.tsx:36)"}, "properties": {"repobilityId": "42be1b574b33c2b7", "scanner": "scanner-primary", "fingerprint": "1a515bd2f5c8e829", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5234aa1958ba4138", "level": "error", "message": {"text": "Dangling fetch: GET /api/dashboard/logs (src/app/dashboard/operations/_components/LiveActivityFeed.tsx:48)"}, "properties": {"repobilityId": "85047743228d963b", "scanner": "scanner-primary", "fingerprint": "5234aa1958ba4138", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-277dfbbf976041d2", "level": "error", "message": {"text": "Dangling fetch: GET /api/dashboard/analytics (src/app/dashboard/analytics/_components/AnalyticsClient.tsx:34)"}, "properties": {"repobilityId": "3443806652911004", "scanner": "scanner-primary", "fingerprint": "277dfbbf976041d2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-aa0690dba231f4de", "level": "error", "message": {"text": "Dangling fetch: GET /api/dashboard/readiness (src/app/dashboard/readiness/page.tsx:38)"}, "properties": {"repobilityId": "be54805d88143a6b", "scanner": "scanner-primary", "fingerprint": "aa0690dba231f4de", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b6dc563cdc2fc9cc", "level": "error", "message": {"text": "Dangling fetch: GET /api/dashboard/leads (src/app/dashboard/leads/_components/LeadsClient.tsx:45)"}, "properties": {"repobilityId": "9eb8b965a307058b", "scanner": "scanner-primary", "fingerprint": "b6dc563cdc2fc9cc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dd2c2332e955b70e", "level": "error", "message": {"text": "Dangling fetch: GET /api/dashboard/team (src/app/dashboard/leads/_components/LeadsClient.tsx:57)"}, "properties": {"repobilityId": "35b3bc50fcb1bd85", "scanner": "scanner-primary", "fingerprint": "dd2c2332e955b70e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e6086861c34f7cff", "level": "error", "message": {"text": "Dangling fetch: GET /api/dashboard/campaigns (src/app/dashboard/leads/_components/LeadsClient.tsx:70)"}, "properties": {"repobilityId": "60684ed2fea26f12", "scanner": "scanner-primary", "fingerprint": "e6086861c34f7cff", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-47a630ea72efca34", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/dashboard/leads/${leadId}/assign (src/app/dashboard/leads/_components/LeadsClient.tsx:101)"}, "properties": {"repobilityId": "9906b6e9dbe9b994", "scanner": "scanner-primary", "fingerprint": "47a630ea72efca34", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2883bd3e2a28f4aa", "level": "error", "message": {"text": "Dangling fetch: POST /api/broadcast/campaign/${campaignId}/retry-now (src/app/dashboard/broadcast/[id]/stats/page.tsx:39)"}, "properties": {"repobilityId": "3b1d6609f216e4f8", "scanner": "scanner-primary", "fingerprint": "2883bd3e2a28f4aa", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ec0d5c98556c44ac", "level": "error", "message": {"text": "Dangling fetch: GET /api/broadcast/campaign/${campaignId}/stats (src/app/dashboard/broadcast/[id]/stats/page.tsx:54)"}, "properties": {"repobilityId": "5ecdc453227f3bc9", "scanner": "scanner-primary", "fingerprint": "ec0d5c98556c44ac", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d8e886964bea927b", "level": "error", "message": {"text": "Dangling fetch: POST /api/broadcast/csv/upload (src/app/dashboard/broadcast/_components/AudienceBuilder.tsx:304)"}, "properties": {"repobilityId": "ffc6358bf23757d1", "scanner": "scanner-primary", "fingerprint": "d8e886964bea927b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c9842315c316049b", "level": "error", "message": {"text": "Dangling fetch: GET /api/broadcasts/timeline?campaignId=${campaignId} (src/app/dashboard/broadcast/_components/BroadcastExecutionTimeline.tsx:32)"}, "properties": {"repobilityId": "1f7027448f041346", "scanner": "scanner-primary", "fingerprint": "c9842315c316049b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9a7cf23c97f22bb2", "level": "error", "message": {"text": "Dangling fetch: GET /api/broadcasts/audit-logs?campaignId=${campaignId} (src/app/dashboard/broadcast/_components/BroadcastAuditLog.tsx:25)"}, "properties": {"repobilityId": "c9dcf28b98e647a5", "scanner": "scanner-primary", "fingerprint": "9a7cf23c97f22bb2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-82c928bc800864ad", "level": "error", "message": {"text": "Dangling fetch: GET /api/broadcast/contacts/search?${queryParams.toString()} (src/app/dashboard/broadcast/_components/ContactPickerDrawer.tsx:74)"}, "properties": {"repobilityId": "e16930ab30b533c9", "scanner": "scanner-primary", "fingerprint": "82c928bc800864ad", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-46bef6e71ff6b46a", "level": "error", "message": {"text": "Dangling fetch: GET /api/broadcasts/observability?campaignId=${campaignId} (src/app/dashboard/broadcast/_components/QueueStatusCard.tsx:43)"}, "properties": {"repobilityId": "5c24392e0362c188", "scanner": "scanner-primary", "fingerprint": "46bef6e71ff6b46a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a2e5bd1a3e6b2b75", "level": "error", "message": {"text": "Dangling fetch: GET /api/dashboard/templates (src/app/dashboard/broadcast/_components/BroadcastBuilder.tsx:254)"}, "properties": {"repobilityId": "88673bd68f23bb9d", "scanner": "scanner-primary", "fingerprint": "a2e5bd1a3e6b2b75", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5ecbb4be2ea4da33", "level": "error", "message": {"text": "Dangling fetch: GET /api/dashboard/leads (src/app/dashboard/broadcast/_components/BroadcastBuilder.tsx:269)"}, "properties": {"repobilityId": "e7e2a0213a1d7cac", "scanner": "scanner-primary", "fingerprint": "5ecbb4be2ea4da33", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bf55f6f0cfd88bdb", "level": "error", "message": {"text": "Dangling fetch: POST /api/broadcast/campaign (src/app/dashboard/broadcast/_components/BroadcastBuilder.tsx:286)"}, "properties": {"repobilityId": "9dafc707f6e93ac9", "scanner": "scanner-primary", "fingerprint": "bf55f6f0cfd88bdb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-142e1aabc88b2c1b", "level": "error", "message": {"text": "Dangling fetch: POST /api/broadcast/campaign (src/app/dashboard/broadcast/_components/BroadcastBuilder.tsx:399)"}, "properties": {"repobilityId": "908289707dc7d651", "scanner": "scanner-primary", "fingerprint": "142e1aabc88b2c1b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-856b77c21db25db7", "level": "error", "message": {"text": "Dangling fetch: POST /api/broadcast/test (src/app/dashboard/broadcast/_components/BroadcastBuilder.tsx:474)"}, "properties": {"repobilityId": "8c817d598dc5a202", "scanner": "scanner-primary", "fingerprint": "856b77c21db25db7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a5509022702c0cb8", "level": "error", "message": {"text": "Dangling fetch: POST /api/broadcasts/test-send (src/app/dashboard/broadcast/_components/BroadcastBuilder.tsx:487)"}, "properties": {"repobilityId": "fdae8f6e287f0295", "scanner": "scanner-primary", "fingerprint": "a5509022702c0cb8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c620c35a68351a21", "level": "error", "message": {"text": "Dangling fetch: POST /api/broadcast/launch (src/app/dashboard/broadcast/_components/BroadcastBuilder.tsx:534)"}, "properties": {"repobilityId": "cd639043bef6c1e9", "scanner": "scanner-primary", "fingerprint": "c620c35a68351a21", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-137f4a8cd897f856", "level": "error", "message": {"text": "Dangling fetch: POST /api/broadcast/recipients (src/app/dashboard/broadcast/_components/BroadcastBuilder.tsx:644)"}, "properties": {"repobilityId": "adee0e458fd0e1a1", "scanner": "scanner-primary", "fingerprint": "137f4a8cd897f856", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b4387e4f2f7f3fc9", "level": "error", "message": {"text": "Dangling fetch: GET /api/broadcasts/performance (src/app/dashboard/broadcast/_components/BroadcastPerformanceCard.tsx:31)"}, "properties": {"repobilityId": "13c47fd34ff94547", "scanner": "scanner-primary", "fingerprint": "b4387e4f2f7f3fc9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-325a8068e1362c6d", "level": "error", "message": {"text": "Dangling fetch: GET /api/broadcast/contacts/search?q=${encodeURIComponent(searchQuery)}&limit=15 (src/app/dashboard/broadcast/_components/RecipientDrawer.tsx:68)"}, "properties": {"repobilityId": "dc3d0ff5edf0866a", "scanner": "scanner-primary", "fingerprint": "325a8068e1362c6d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dc6798a45b69bedc", "level": "error", "message": {"text": "Dangling fetch: GET /api/broadcast/campaigns (src/app/dashboard/broadcast/_components/BroadcastClient.tsx:439)"}, "properties": {"repobilityId": "7c6ae3b9b8b6decb", "scanner": "scanner-primary", "fingerprint": "dc6798a45b69bedc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5e1c667315a581eb", "level": "error", "message": {"text": "Dangling fetch: POST /api/broadcasts/send (src/app/dashboard/broadcast/_components/BroadcastClient.tsx:484)"}, "properties": {"repobilityId": "640e015dde7fc168", "scanner": "scanner-primary", "fingerprint": "5e1c667315a581eb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-edf8e705761071b2", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/broadcast/campaign?id=${id} (src/app/dashboard/broadcast/_components/BroadcastClient.tsx:503)"}, "properties": {"repobilityId": "3cd316e72d902f18", "scanner": "scanner-primary", "fingerprint": "edf8e705761071b2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-12252e3ab0c3fd86", "level": "error", "message": {"text": "Dangling fetch: GET /api/dashboard/team (src/app/dashboard/team/_components/TeamClient.tsx:43)"}, "properties": {"repobilityId": "cffb79d36f25a904", "scanner": "scanner-primary", "fingerprint": "12252e3ab0c3fd86", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f7bfa2b9f2e35008", "level": "error", "message": {"text": "Dangling fetch: POST /api/dashboard/team (src/app/dashboard/team/_components/TeamClient.tsx:67)"}, "properties": {"repobilityId": "c91257ae094d701b", "scanner": "scanner-primary", "fingerprint": "f7bfa2b9f2e35008", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ae1b53e25c9bb935", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/dashboard/team (src/app/dashboard/team/_components/TeamClient.tsx:94)"}, "properties": {"repobilityId": "55feebf334d93c6e", "scanner": "scanner-primary", "fingerprint": "ae1b53e25c9bb935", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9b3f72cdd94c0498", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/dashboard/team?id=${user.id} (src/app/dashboard/team/_components/TeamClient.tsx:115)"}, "properties": {"repobilityId": "2c154e01dcd1c175", "scanner": "scanner-primary", "fingerprint": "9b3f72cdd94c0498", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2d9148c331ad06df", "level": "error", "message": {"text": "Dangling fetch: POST /api/auth/logout (src/app/dashboard/_layout/AppSidebar.tsx:198)"}, "properties": {"repobilityId": "c5d3a450233b2a51", "scanner": "scanner-primary", "fingerprint": "2d9148c331ad06df", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ab53fbdfe763d287", "level": "error", "message": {"text": "Dangling fetch: GET /api/meta-ads/notifications?unread=1&limit=1 (src/app/dashboard/_layout/MetaAdsNotificationBell.tsx:48)"}, "properties": {"repobilityId": "54addffe1e707568", "scanner": "scanner-primary", "fingerprint": "ab53fbdfe763d287", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-009855cfaf301772", "level": "error", "message": {"text": "Dangling fetch: GET /api/meta-ads/notifications?limit=20 (src/app/dashboard/_layout/MetaAdsNotificationBell.tsx:68)"}, "properties": {"repobilityId": "2a0fafa928c0caf8", "scanner": "scanner-primary", "fingerprint": "009855cfaf301772", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-158a06493ac5fcb0", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/meta-ads/notifications (src/app/dashboard/_layout/MetaAdsNotificationBell.tsx:99)"}, "properties": {"repobilityId": "d8f88333d13e4a64", "scanner": "scanner-primary", "fingerprint": "158a06493ac5fcb0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-65c0928ec3312668", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/meta-ads/notifications (src/app/dashboard/_layout/MetaAdsNotificationBell.tsx:107)"}, "properties": {"repobilityId": "b89d59f4fe0859e4", "scanner": "scanner-primary", "fingerprint": "65c0928ec3312668", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-01ae1ac6a210e083", "level": "error", "message": {"text": "Dangling fetch: POST /api/ai/assist (src/app/dashboard/chat/AIAssistPanel.tsx:232)"}, "properties": {"repobilityId": "afc9806338871b6a", "scanner": "scanner-primary", "fingerprint": "01ae1ac6a210e083", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d8d41f4f902c694b", "level": "error", "message": {"text": "Dangling fetch: POST /api/dashboard/contacts (src/app/dashboard/chat/ChatArea.tsx:235)"}, "properties": {"repobilityId": "eae58c0734c84167", "scanner": "scanner-primary", "fingerprint": "d8d41f4f902c694b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-94d1e777564eb515", "level": "error", "message": {"text": "Dangling fetch: POST /api/chat/upload (src/app/dashboard/chat/ChatArea.tsx:395)"}, "properties": {"repobilityId": "26cf4656b3311f45", "scanner": "scanner-primary", "fingerprint": "94d1e777564eb515", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-820ae435b806289c", "level": "error", "message": {"text": "Dangling fetch: GET /api/dashboard/chat/conversation?id=${conversationId}&_t=${Date.now()} (src/app/dashboard/chat/ChatArea.tsx:452)"}, "properties": {"repobilityId": "0ad1c0857e1fd1ff", "scanner": "scanner-primary", "fingerprint": "820ae435b806289c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6bd03cc4e3eb1e2d", "level": "error", "message": {"text": "Dangling fetch: GET /api/dashboard/chat/statuses?conversationId=${conversationId} (src/app/dashboard/chat/ChatArea.tsx:528)"}, "properties": {"repobilityId": "2efb80770c99e249", "scanner": "scanner-primary", "fingerprint": "6bd03cc4e3eb1e2d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0037562d2c161abe", "level": "error", "message": {"text": "Dangling fetch: GET /api/dashboard/chat/new-messages?${params} (src/app/dashboard/chat/ChatArea.tsx:572)"}, "properties": {"repobilityId": "a8b42c28e87ef4ab", "scanner": "scanner-primary", "fingerprint": "0037562d2c161abe", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5494c5a80098e57e", "level": "error", "message": {"text": "Dangling fetch: POST /api/chat/send (src/app/dashboard/chat/ChatArea.tsx:653)"}, "properties": {"repobilityId": "5702f24c54bd266c", "scanner": "scanner-primary", "fingerprint": "5494c5a80098e57e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-62c9852ee02ec07b", "level": "error", "message": {"text": "Dangling fetch: POST /api/chat/send (src/app/dashboard/chat/ChatArea.tsx:687)"}, "properties": {"repobilityId": "9ee5fbb3242f7dca", "scanner": "scanner-primary", "fingerprint": "62c9852ee02ec07b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4fddb02cdea4815e", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/dashboard/chat/conversation?id=${conversationId} (src/app/dashboard/chat/ChatArea.tsx:706)"}, "properties": {"repobilityId": "606951f245edd7ad", "scanner": "scanner-primary", "fingerprint": "4fddb02cdea4815e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9e281147ab0b1ae7", "level": "error", "message": {"text": "Dangling fetch: POST /api/dashboard/chat/delete-message (src/app/dashboard/chat/ChatArea.tsx:856)"}, "properties": {"repobilityId": "a302c78b096a5414", "scanner": "scanner-primary", "fingerprint": "9e281147ab0b1ae7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b6072570f1e86ea4", "level": "error", "message": {"text": "Dangling fetch: GET /api/dashboard/team (src/app/dashboard/chat/CRMPanel.tsx:171)"}, "properties": {"repobilityId": "7570f363bba38f74", "scanner": "scanner-primary", "fingerprint": "b6072570f1e86ea4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ea72a30d1d52ade0", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/dashboard/leads/${localLead.id}/assign (src/app/dashboard/chat/CRMPanel.tsx:219)"}, "properties": {"repobilityId": "459431d66608453c", "scanner": "scanner-primary", "fingerprint": "ea72a30d1d52ade0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b0983609ca15b501", "level": "error", "message": {"text": "Dangling fetch: GET /api/dashboard/chat/conversations?_t=${Date.now()} (src/app/dashboard/chat/ChatSidebar.tsx:101)"}, "properties": {"repobilityId": "37d0064bd47af2a5", "scanner": "scanner-primary", "fingerprint": "b0983609ca15b501", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-949dc00afd1d2e61", "level": "error", "message": {"text": "Dangling fetch: GET /api/dashboard/templates (src/app/dashboard/templates/page.tsx:87)"}, "properties": {"repobilityId": "297561999a3fcb0a", "scanner": "scanner-primary", "fingerprint": "949dc00afd1d2e61", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1fea218d200153ab", "level": "error", "message": {"text": "Dangling fetch: POST /api/dashboard/templates/sync (src/app/dashboard/templates/page.tsx:108)"}, "properties": {"repobilityId": "13035a1a2c9f9005", "scanner": "scanner-primary", "fingerprint": "1fea218d200153ab", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9f2974710089ba43", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/dashboard/templates/${id}?name=${encodeURIComponent(name)} (src/app/dashboard/templates/page.tsx:219)"}, "properties": {"repobilityId": "7f962752f86334f3", "scanner": "scanner-primary", "fingerprint": "9f2974710089ba43", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8a31dfe591cdb3f3", "level": "error", "message": {"text": "Dangling fetch: POST /api/dashboard/templates (src/app/dashboard/templates/_components/TemplateStudio.tsx:62)"}, "properties": {"repobilityId": "e4edd4a8ccfd9407", "scanner": "scanner-primary", "fingerprint": "8a31dfe591cdb3f3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-88d060c3b2adf23f", "level": "error", "message": {"text": "Dangling fetch: POST /api/dashboard/templates (src/app/dashboard/templates/_components/TemplateStudio.tsx:94)"}, "properties": {"repobilityId": "66cbf704c20407ff", "scanner": "scanner-primary", "fingerprint": "88d060c3b2adf23f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c7d495abf97c4c1a", "level": "error", "message": {"text": "Dangling fetch: POST /api/dashboard/templates (src/app/dashboard/templates/_components/TemplateStudio.tsx:135)"}, "properties": {"repobilityId": "4129035c66bbd3ae", "scanner": "scanner-primary", "fingerprint": "c7d495abf97c4c1a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-22492060a3f8748c", "level": "error", "message": {"text": "Dangling fetch: POST /api/dashboard/templates/upload (src/app/dashboard/templates/_components/MediaUpload.tsx:70)"}, "properties": {"repobilityId": "e7733aaf9dc86c9c", "scanner": "scanner-primary", "fingerprint": "22492060a3f8748c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b82842ae47867eac", "level": "error", "message": {"text": "Dangling fetch: GET /api/dashboard/logs (src/app/dashboard/logs/page.tsx:30)"}, "properties": {"repobilityId": "b5623f51ee08942c", "scanner": "scanner-primary", "fingerprint": "b82842ae47867eac", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7052fa28f8e832a3", "level": "error", "message": {"text": "Dangling fetch: GET /api/dashboard/logs (src/app/dashboard/logs/_components/LogsClient.tsx:26)"}, "properties": {"repobilityId": "6b633ca74dd578fe", "scanner": "scanner-primary", "fingerprint": "7052fa28f8e832a3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-77f824121de465b0", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/provision (src/app/dashboard/admin/onboard/_components/OnboardClient.tsx:79)"}, "properties": {"repobilityId": "60562c6ab1672d16", "scanner": "scanner-primary", "fingerprint": "77f824121de465b0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c2f94ddba2bddf6c", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/provision?tenant_id=${encodeURIComponent(id)} (src/app/dashboard/admin/onboard/_components/OnboardClient.tsx:107)"}, "properties": {"repobilityId": "d9700391cf2debf5", "scanner": "scanner-primary", "fingerprint": "c2f94ddba2bddf6c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4b6129c3802101cf", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/provision (src/app/dashboard/admin/onboard/_components/OnboardClient.tsx:134)"}, "properties": {"repobilityId": "fefb6491ac43c69d", "scanner": "scanner-primary", "fingerprint": "4b6129c3802101cf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-113b067620107739", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/approvals (src/app/dashboard/admin/approvals/_components/ApprovalsClient.tsx:22)"}, "properties": {"repobilityId": "e78337efd6af7f70", "scanner": "scanner-primary", "fingerprint": "113b067620107739", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a784f761f3d0c200", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/approvals (src/app/dashboard/admin/approvals/_components/ApprovalsClient.tsx:37)"}, "properties": {"repobilityId": "ee7c5d1a2225679d", "scanner": "scanner-primary", "fingerprint": "a784f761f3d0c200", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e9441ba65c3badb5", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/approvals (src/app/dashboard/admin/approvals/_components/ApprovalsClient.tsx:60)"}, "properties": {"repobilityId": "2ace73755ad29e63", "scanner": "scanner-primary", "fingerprint": "e9441ba65c3badb5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a2181d48e31cf796", "level": "error", "message": {"text": "Dangling fetch: GET /api/dashboard/scripted-replies (src/app/dashboard/agents/page.tsx:321)"}, "properties": {"repobilityId": "b0e0755ee5945d9d", "scanner": "scanner-primary", "fingerprint": "a2181d48e31cf796", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fe91741b41030fc9", "level": "error", "message": {"text": "Dangling fetch: GET /api/dashboard/settings (src/app/dashboard/agents/page.tsx:347)"}, "properties": {"repobilityId": "2be4afa62e73b94e", "scanner": "scanner-primary", "fingerprint": "fe91741b41030fc9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-aa0004fb72dddc5b", "level": "error", "message": {"text": "Dangling fetch: GET /api/dashboard/knowledge (src/app/dashboard/agents/page.tsx:351)"}, "properties": {"repobilityId": "6c3850b245f5c317", "scanner": "scanner-primary", "fingerprint": "aa0004fb72dddc5b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ea7965861394339c", "level": "error", "message": {"text": "Dangling fetch: GET /api/dashboard/scripted-replies (src/app/dashboard/agents/page.tsx:462)"}, "properties": {"repobilityId": "844a27a3b29c1518", "scanner": "scanner-primary", "fingerprint": "ea7965861394339c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6ce9d46c49de89e3", "level": "error", "message": {"text": "Dangling fetch: POST /api/dashboard/scripted-replies (src/app/dashboard/agents/page.tsx:476)"}, "properties": {"repobilityId": "174b50f767050152", "scanner": "scanner-primary", "fingerprint": "6ce9d46c49de89e3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4ea93110bac4ad65", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/dashboard/scripted-replies/${id} (src/app/dashboard/agents/page.tsx:497)"}, "properties": {"repobilityId": "c05d8eb6f6bbfa0a", "scanner": "scanner-primary", "fingerprint": "4ea93110bac4ad65", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0d425a2bb2e3fbd2", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/dashboard/scripted-replies/${id} (src/app/dashboard/agents/page.tsx:506)"}, "properties": {"repobilityId": "c168c717b9ec68b3", "scanner": "scanner-primary", "fingerprint": "0d425a2bb2e3fbd2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e278318862b6eedf", "level": "error", "message": {"text": "Dangling fetch: POST /api/dashboard/scripted-replies/upload (src/app/dashboard/agents/page.tsx:517)"}, "properties": {"repobilityId": "7c67872b6aaec3d4", "scanner": "scanner-primary", "fingerprint": "e278318862b6eedf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-561494f62a77830e", "level": "error", "message": {"text": "Dangling fetch: GET /api/dashboard/knowledge (src/app/dashboard/agents/page.tsx:542)"}, "properties": {"repobilityId": "01b2e35cb0a39a7e", "scanner": "scanner-primary", "fingerprint": "561494f62a77830e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f7523a9539248d1c", "level": "error", "message": {"text": "Dangling fetch: POST /api/dashboard/knowledge (src/app/dashboard/agents/page.tsx:599)"}, "properties": {"repobilityId": "61a941aeb4691d57", "scanner": "scanner-primary", "fingerprint": "f7523a9539248d1c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1a44a5997dd22175", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/dashboard/knowledge?id=${docId} (src/app/dashboard/agents/page.tsx:627)"}, "properties": {"repobilityId": "882937ff487c2273", "scanner": "scanner-primary", "fingerprint": "1a44a5997dd22175", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e0c6829b0783c07a", "level": "error", "message": {"text": "Dangling fetch: POST /api/dashboard/playground (src/app/dashboard/agents/page.tsx:662)"}, "properties": {"repobilityId": "e50fe34f6e7ca976", "scanner": "scanner-primary", "fingerprint": "e0c6829b0783c07a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a203eadd4077b617", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/dashboard/playground/reset (src/app/dashboard/agents/page.tsx:764)"}, "properties": {"repobilityId": "0e76d38a6fb32480", "scanner": "scanner-primary", "fingerprint": "a203eadd4077b617", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-665ee1c4445410e3", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/dashboard/settings (src/app/dashboard/agents/page.tsx:776)"}, "properties": {"repobilityId": "42cba3eb02d62811", "scanner": "scanner-primary", "fingerprint": "665ee1c4445410e3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0aaed96d5bff18d7", "level": "error", "message": {"text": "Dangling fetch: GET /api/dashboard/agents (src/app/dashboard/agents/_components/AgentsClient.tsx:32)"}, "properties": {"repobilityId": "9bc0b96e614cefe9", "scanner": "scanner-primary", "fingerprint": "0aaed96d5bff18d7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a63f722d800c38fb", "level": "error", "message": {"text": "Dangling fetch: PUT /api/dashboard/agents/${editingAgent.id} (src/app/dashboard/agents/_components/AgentsClient.tsx:82)"}, "properties": {"repobilityId": "8794ae94db3d903a", "scanner": "scanner-primary", "fingerprint": "a63f722d800c38fb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dafd42962a7524b4", "level": "error", "message": {"text": "Dangling fetch: POST /api/dashboard/agents (src/app/dashboard/agents/_components/AgentsClient.tsx:88)"}, "properties": {"repobilityId": "716f430fe58134a1", "scanner": "scanner-primary", "fingerprint": "dafd42962a7524b4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-483bace6f0036e66", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/dashboard/agents/${id} (src/app/dashboard/agents/_components/AgentsClient.tsx:113)"}, "properties": {"repobilityId": "70d26b03d0646777", "scanner": "scanner-primary", "fingerprint": "483bace6f0036e66", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7636da29027cb28a", "level": "error", "message": {"text": "Dangling fetch: GET /api/dashboard/system/dlq (src/app/dashboard/system/dead-letter/page.tsx:51)"}, "properties": {"repobilityId": "ec53589e6344c380", "scanner": "scanner-primary", "fingerprint": "7636da29027cb28a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6938e2484ff353b0", "level": "error", "message": {"text": "Dangling fetch: POST /api/dashboard/system/dlq (src/app/dashboard/system/dead-letter/page.tsx:61)"}, "properties": {"repobilityId": "3bd9312086d57d66", "scanner": "scanner-primary", "fingerprint": "6938e2484ff353b0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dd512854d5638794", "level": "error", "message": {"text": "Dangling fetch: GET /api/dashboard/campaigns (src/app/dashboard/campaigns/_components/CampaignsClient.tsx:30)"}, "properties": {"repobilityId": "e19ff4cf07b8094b", "scanner": "scanner-primary", "fingerprint": "dd512854d5638794", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f7a5a427aec9d570", "level": "error", "message": {"text": "Dangling fetch: POST /api/dashboard/campaigns (src/app/dashboard/campaigns/_components/CampaignsClient.tsx:56)"}, "properties": {"repobilityId": "b59a4c18c141568d", "scanner": "scanner-primary", "fingerprint": "f7a5a427aec9d570", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cf801a8f61939429", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/dashboard/campaigns?id=${c.id} (src/app/dashboard/campaigns/_components/CampaignsClient.tsx:81)"}, "properties": {"repobilityId": "44e1f50b24ea1da2", "scanner": "scanner-primary", "fingerprint": "cf801a8f61939429", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9b022da8448ece2c", "level": "error", "message": {"text": "Dangling fetch: GET /api/dashboard/contacts?${params.toString()} (src/app/dashboard/contacts/_components/ContactsClient.tsx:169)"}, "properties": {"repobilityId": "da694668cf1bc55a", "scanner": "scanner-primary", "fingerprint": "9b022da8448ece2c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b51f57cc092f9ff9", "level": "error", "message": {"text": "Dangling fetch: POST /api/dashboard/contacts/import/check (src/app/dashboard/contacts/_components/ContactsClient.tsx:283)"}, "properties": {"repobilityId": "3898bb006ca6b4f5", "scanner": "scanner-primary", "fingerprint": "b51f57cc092f9ff9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-215cc45be330057c", "level": "error", "message": {"text": "Dangling fetch: POST /api/dashboard/contacts (src/app/dashboard/contacts/_components/ContactsClient.tsx:323)"}, "properties": {"repobilityId": "d99d4bd2e4183b20", "scanner": "scanner-primary", "fingerprint": "215cc45be330057c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3a873be30a4b6342", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/dashboard/contacts/${selectedContactId} (src/app/dashboard/contacts/_components/ContactsClient.tsx:370)"}, "properties": {"repobilityId": "d9974816395ab3d7", "scanner": "scanner-primary", "fingerprint": "3a873be30a4b6342", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4e7cca0066d5f635", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/dashboard/contacts/${selectedContactId} (src/app/dashboard/contacts/_components/ContactsClient.tsx:408)"}, "properties": {"repobilityId": "52c15fa0e63af9f4", "scanner": "scanner-primary", "fingerprint": "4e7cca0066d5f635", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b43103812a25443f", "level": "error", "message": {"text": "Dangling fetch: POST /api/dashboard/contacts/import/check (src/app/dashboard/contacts/_components/ContactsClient.tsx:496)"}, "properties": {"repobilityId": "65e876bfb7bb946c", "scanner": "scanner-primary", "fingerprint": "b43103812a25443f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7f013141447af5b8", "level": "error", "message": {"text": "Dangling fetch: POST /api/dashboard/contacts/import?${params.toString()} (src/app/dashboard/contacts/_components/ContactsClient.tsx:541)"}, "properties": {"repobilityId": "a6a0ba98186623f4", "scanner": "scanner-primary", "fingerprint": "7f013141447af5b8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-45eaa071aa26fe52", "level": "error", "message": {"text": "Dangling fetch: GET /api/dashboard/automations (src/app/dashboard/automations/_components/AutomationsClient.tsx:85)"}, "properties": {"repobilityId": "6dbcb1138c66930d", "scanner": "scanner-primary", "fingerprint": "45eaa071aa26fe52", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6905f1bdd665611a", "level": "error", "message": {"text": "Dangling fetch: POST /api/dashboard/automations (src/app/dashboard/automations/_components/AutomationsClient.tsx:115)"}, "properties": {"repobilityId": "cf12ced6a527f934", "scanner": "scanner-primary", "fingerprint": "6905f1bdd665611a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3f8edd52689cc934", "level": "error", "message": {"text": "Dangling fetch: PUT /api/dashboard/automations/${draft.id} (src/app/dashboard/automations/_components/AutomationsClient.tsx:123)"}, "properties": {"repobilityId": "11b17fe8e6a420e7", "scanner": "scanner-primary", "fingerprint": "3f8edd52689cc934", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a31a83a2c3793785", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/dashboard/automations/${id} (src/app/dashboard/automations/_components/AutomationsClient.tsx:144)"}, "properties": {"repobilityId": "3c4c60c6449de02c", "scanner": "scanner-primary", "fingerprint": "a31a83a2c3793785", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fc10b3781130a847", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/dashboard/automations/${rule.id} (src/app/dashboard/automations/_components/AutomationsClient.tsx:159)"}, "properties": {"repobilityId": "8d17868b77cbe082", "scanner": "scanner-primary", "fingerprint": "fc10b3781130a847", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e23e4ee90db68e5a", "level": "error", "message": {"text": "Dangling fetch: GET /api/restaurant/blocked-dates?month=${toMonthStr(year, month)} (src/app/dashboard/restaurant/blocked-dates/_components/BlockedDatesClient.tsx:70)"}, "properties": {"repobilityId": "02f2422dfa426a03", "scanner": "scanner-primary", "fingerprint": "e23e4ee90db68e5a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-811b1da0056b4479", "level": "error", "message": {"text": "Dangling fetch: POST /api/restaurant/blocked-dates (src/app/dashboard/restaurant/blocked-dates/_components/BlockedDatesClient.tsx:100)"}, "properties": {"repobilityId": "3eb4e7ad9983724f", "scanner": "scanner-primary", "fingerprint": "811b1da0056b4479", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6ac33b7e3febd112", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/restaurant/blocked-dates/${id} (src/app/dashboard/restaurant/blocked-dates/_components/BlockedDatesClient.tsx:122)"}, "properties": {"repobilityId": "54c7aa91fbbff058", "scanner": "scanner-primary", "fingerprint": "6ac33b7e3febd112", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c00f1813cad96d42", "level": "error", "message": {"text": "Dangling fetch: GET /api/restaurant/guests/calendar?year=${y}&month=${m} (src/app/dashboard/restaurant/guests/_components/GuestsClient.tsx:142)"}, "properties": {"repobilityId": "11133a59ea0ee8b1", "scanner": "scanner-primary", "fingerprint": "c00f1813cad96d42", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4b4e8d060fc59a07", "level": "error", "message": {"text": "Dangling fetch: GET /api/restaurant/bookings?date=${date} (src/app/dashboard/restaurant/guests/_components/GuestsClient.tsx:164)"}, "properties": {"repobilityId": "f91393a3636f55f7", "scanner": "scanner-primary", "fingerprint": "4b4e8d060fc59a07", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-79d51002a1d80bc4", "level": "error", "message": {"text": "Dangling fetch: GET /api/restaurant/guests?phone=${g.customer_phone}&name=${encodeURIComponent(g.customer_name)} (src/app/dashboard/restaurant/guests/_components/GuestsClient.tsx:189)"}, "properties": {"repobilityId": "0022e418bbc87ad2", "scanner": "scanner-primary", "fingerprint": "79d51002a1d80bc4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-48ff20d9c9251141", "level": "error", "message": {"text": "Dangling fetch: GET /api/restaurant/bookings?${params} (src/app/dashboard/restaurant/bookings/_components/BookingsClient.tsx:214)"}, "properties": {"repobilityId": "9ca475ae1425f4e7", "scanner": "scanner-primary", "fingerprint": "48ff20d9c9251141", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-243e395a27e3029a", "level": "error", "message": {"text": "Dangling fetch: GET /api/restaurant/slots (src/app/dashboard/restaurant/bookings/_components/BookingsClient.tsx:228)"}, "properties": {"repobilityId": "c08a757946462686", "scanner": "scanner-primary", "fingerprint": "243e395a27e3029a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d4a57cd5bc683c80", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/restaurant/bookings/${bookingId}/status (src/app/dashboard/restaurant/bookings/_components/BookingsClient.tsx:258)"}, "properties": {"repobilityId": "71bbe9f85cf30221", "scanner": "scanner-primary", "fingerprint": "d4a57cd5bc683c80", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-55cc7b664e776508", "level": "error", "message": {"text": "Dangling fetch: POST /api/restaurant/bookings (src/app/dashboard/restaurant/bookings/_components/BookingsClient.tsx:274)"}, "properties": {"repobilityId": "bf171c3a495f1a31", "scanner": "scanner-primary", "fingerprint": "55cc7b664e776508", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7c2801c188623b31", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/restaurant/bookings/${editBooking.id} (src/app/dashboard/restaurant/bookings/_components/BookingsClient.tsx:308)"}, "properties": {"repobilityId": "9a6e506a97cd77cd", "scanner": "scanner-primary", "fingerprint": "7c2801c188623b31", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7183105008c634c1", "level": "error", "message": {"text": "Dangling fetch: GET /api/restaurant/guests?phone=${booking.customer_phone}&name=${encodeURIComponent(booking.customer_name)} (src/app/dashboard/restaurant/bookings/_components/BookingsClient.tsx:331)"}, "properties": {"repobilityId": "ba8d37b3d844bd2f", "scanner": "scanner-primary", "fingerprint": "7183105008c634c1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7e9b991fcb9c69af", "level": "error", "message": {"text": "Dangling fetch: POST /api/restaurant/bookings/import (src/app/dashboard/restaurant/bookings/_components/BookingsClient.tsx:410)"}, "properties": {"repobilityId": "6a7bfe073e9f8856", "scanner": "scanner-primary", "fingerprint": "7e9b991fcb9c69af", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1b96707788159f3f", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/restaurant/guests (src/app/dashboard/restaurant/bookings/_components/GuestProfilePanel.tsx:71)"}, "properties": {"repobilityId": "17b49a918a018d4e", "scanner": "scanner-primary", "fingerprint": "1b96707788159f3f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-928963dbd25684fa", "level": "error", "message": {"text": "Dangling fetch: GET /api/restaurant/slots?date=${today} (src/app/dashboard/restaurant/slots/_components/SlotsClient.tsx:51)"}, "properties": {"repobilityId": "660ed8e5ba168568", "scanner": "scanner-primary", "fingerprint": "928963dbd25684fa", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c58722701757d011", "level": "error", "message": {"text": "Dangling fetch: POST /api/restaurant/slots (src/app/dashboard/restaurant/slots/_components/SlotsClient.tsx:71)"}, "properties": {"repobilityId": "f074203979750472", "scanner": "scanner-primary", "fingerprint": "c58722701757d011", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a67eb0516ee05248", "level": "error", "message": {"text": "Dangling fetch: PUT /api/restaurant/slots/${slotId} (src/app/dashboard/restaurant/slots/_components/SlotsClient.tsx:105)"}, "properties": {"repobilityId": "c7327dde09676e12", "scanner": "scanner-primary", "fingerprint": "a67eb0516ee05248", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0748d76f31b7ae7b", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/restaurant/slots/${slotId} (src/app/dashboard/restaurant/slots/_components/SlotsClient.tsx:128)"}, "properties": {"repobilityId": "2dfeff51df65848d", "scanner": "scanner-primary", "fingerprint": "0748d76f31b7ae7b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f230e902b60bf25e", "level": "error", "message": {"text": "Dangling fetch: GET /api/restaurant/tables (src/app/dashboard/restaurant/tables/_components/use-tables-api.ts:95)"}, "properties": {"repobilityId": "71ec23e3250906f9", "scanner": "scanner-primary", "fingerprint": "f230e902b60bf25e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-08806ae8302896a7", "level": "error", "message": {"text": "Dangling fetch: POST /api/restaurant/tables/cycle (src/app/dashboard/restaurant/tables/_components/use-tables-api.ts:145)"}, "properties": {"repobilityId": "ba1e0fdb1d26e030", "scanner": "scanner-primary", "fingerprint": "08806ae8302896a7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-81aca2a7b9c0dff6", "level": "error", "message": {"text": "Dangling fetch: POST /api/restaurant/tables/walk-in (src/app/dashboard/restaurant/tables/_components/use-tables-api.ts:159)"}, "properties": {"repobilityId": "8eebb4d7002b53ab", "scanner": "scanner-primary", "fingerprint": "81aca2a7b9c0dff6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-05433bddeaf60883", "level": "error", "message": {"text": "Dangling fetch: POST /api/restaurant/tables/reserve (src/app/dashboard/restaurant/tables/_components/use-tables-api.ts:181)"}, "properties": {"repobilityId": "f4fd6078a11ba9a7", "scanner": "scanner-primary", "fingerprint": "05433bddeaf60883", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-398ebc6b0aede33d", "level": "error", "message": {"text": "Dangling fetch: POST /api/restaurant/tables (src/app/dashboard/restaurant/tables/_components/TablesClient.tsx:565)"}, "properties": {"repobilityId": "420f4eb23d381ee8", "scanner": "scanner-primary", "fingerprint": "398ebc6b0aede33d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-793073b94d8db586", "level": "error", "message": {"text": "Dangling fetch: GET /api/restaurant/waitlist?date=${selectedDate} (src/app/dashboard/restaurant/waitlist/_components/WaitlistClient.tsx:55)"}, "properties": {"repobilityId": "0d9e57c399de39d6", "scanner": "scanner-primary", "fingerprint": "793073b94d8db586", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b456d2869f20737b", "level": "error", "message": {"text": "Dangling fetch: GET /api/restaurant/guests/list (src/app/dashboard/restaurant/waitlist/_components/WaitlistClient.tsx:63)"}, "properties": {"repobilityId": "0ada8b745769fb6e", "scanner": "scanner-primary", "fingerprint": "b456d2869f20737b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fdca991a0cd01a27", "level": "error", "message": {"text": "Dangling fetch: GET /api/restaurant/slots (src/app/dashboard/restaurant/waitlist/_components/WaitlistClient.tsx:84)"}, "properties": {"repobilityId": "8735bc223f5ce961", "scanner": "scanner-primary", "fingerprint": "fdca991a0cd01a27", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-47fa3358e2f05bb4", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/restaurant/waitlist/${id} (src/app/dashboard/restaurant/waitlist/_components/WaitlistClient.tsx:97)"}, "properties": {"repobilityId": "d7f9356e3dfba5a0", "scanner": "scanner-primary", "fingerprint": "47fa3358e2f05bb4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-484b095f770ee8a1", "level": "error", "message": {"text": "Dangling fetch: POST /api/restaurant/waitlist (src/app/dashboard/restaurant/waitlist/_components/WaitlistClient.tsx:134)"}, "properties": {"repobilityId": "0b6b9db4a2c1bccc", "scanner": "scanner-primary", "fingerprint": "484b095f770ee8a1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d5e326658b5372a5", "level": "error", "message": {"text": "Dangling fetch: GET /api/restaurant/overview (src/app/dashboard/restaurant/_components/RestaurantOverviewClient.tsx:352)"}, "properties": {"repobilityId": "bb4db2542f0c228c", "scanner": "scanner-primary", "fingerprint": "d5e326658b5372a5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-90bd6647ca19a9e6", "level": "error", "message": {"text": "Dangling fetch: GET /api/restaurant/slots?date=${today} (src/app/dashboard/restaurant/_components/RestaurantOverviewClient.tsx:353)"}, "properties": {"repobilityId": "1f05d5db96a0b7a3", "scanner": "scanner-primary", "fingerprint": "90bd6647ca19a9e6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5498b58a07fa6414", "level": "error", "message": {"text": "Dangling fetch: GET /api/restaurant/settings (src/app/dashboard/restaurant/_components/WhatsAppFlowDemo.tsx:52)"}, "properties": {"repobilityId": "5b563d68a58f5fec", "scanner": "scanner-primary", "fingerprint": "5498b58a07fa6414", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-12a657768b480bd9", "level": "error", "message": {"text": "Dangling fetch: GET /api/dashboard/conversations?limit=5&active=false (src/app/dashboard/_sections/RecentChats.tsx:66)"}, "properties": {"repobilityId": "56a861750e8611ab", "scanner": "scanner-primary", "fingerprint": "12a657768b480bd9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bf63122226f834ab", "level": "error", "message": {"text": "Dangling fetch: GET /api/dashboard/stats (src/app/dashboard/_sections/QuickActions.tsx:17)"}, "properties": {"repobilityId": "c5370b9cc428dce0", "scanner": "scanner-primary", "fingerprint": "bf63122226f834ab", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b03702defaff6daa", "level": "error", "message": {"text": "Dangling fetch: GET /api/dashboard/stats (src/app/dashboard/_sections/DashboardMetrics.tsx:33)"}, "properties": {"repobilityId": "bce1158b1406f435", "scanner": "scanner-primary", "fingerprint": "b03702defaff6daa", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dba61f4f28cebda1", "level": "error", "message": {"text": "Dangling fetch: GET /api/meta-ads/leads/${leadId} (src/app/dashboard/meta-ads/_components/MetaAdsLeadsClient.tsx:32)"}, "properties": {"repobilityId": "23d25588d52a5425", "scanner": "scanner-primary", "fingerprint": "dba61f4f28cebda1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2911a90062d26271", "level": "error", "message": {"text": "Dangling fetch: GET /api/meta-ads/leads?${params} (src/app/dashboard/meta-ads/_components/MetaAdsLeadsClient.tsx:102)"}, "properties": {"repobilityId": "e0723a9d61820a6d", "scanner": "scanner-primary", "fingerprint": "2911a90062d26271", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1939bc18154fc579", "level": "error", "message": {"text": "Dangling fetch: GET /api/meta-ads/accounts (src/app/dashboard/meta-ads/_components/CampaignWizardModal.tsx:144)"}, "properties": {"repobilityId": "fac29df39c0b7710", "scanner": "scanner-primary", "fingerprint": "1939bc18154fc579", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a15382292ebf7d01", "level": "error", "message": {"text": "Dangling fetch: POST /api/meta-ads/campaigns (src/app/dashboard/meta-ads/_components/CampaignWizardModal.tsx:197)"}, "properties": {"repobilityId": "aa7dea8947d60f1d", "scanner": "scanner-primary", "fingerprint": "a15382292ebf7d01", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-996e180cf89cc4d5", "level": "error", "message": {"text": "Dangling fetch: POST /api/meta-ads/campaigns/${campaign.id}/publish (src/app/dashboard/meta-ads/_components/CampaignWizardModal.tsx:212)"}, "properties": {"repobilityId": "3cb17ea4b69463cd", "scanner": "scanner-primary", "fingerprint": "996e180cf89cc4d5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-71d2bb4c1d408cba", "level": "error", "message": {"text": "Dangling fetch: GET /api/meta-ads/status (src/app/dashboard/meta-ads/_components/MetaAdsSettingsClient.tsx:154)"}, "properties": {"repobilityId": "4ca6328d44541654", "scanner": "scanner-primary", "fingerprint": "71d2bb4c1d408cba", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d645e688aeba1a57", "level": "error", "message": {"text": "Dangling fetch: GET /api/meta-ads/accounts (src/app/dashboard/meta-ads/_components/MetaAdsSettingsClient.tsx:155)"}, "properties": {"repobilityId": "7b2823440d4377fd", "scanner": "scanner-primary", "fingerprint": "d645e688aeba1a57", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bf99a01ead8a5d71", "level": "error", "message": {"text": "Dangling fetch: GET /api/meta-ads/connect (src/app/dashboard/meta-ads/_components/MetaAdsSettingsClient.tsx:171)"}, "properties": {"repobilityId": "802a281048e9588e", "scanner": "scanner-primary", "fingerprint": "bf99a01ead8a5d71", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f5705b15d21c3038", "level": "error", "message": {"text": "Dangling fetch: POST /api/meta-ads/sync (src/app/dashboard/meta-ads/_components/MetaAdsSettingsClient.tsx:185)"}, "properties": {"repobilityId": "3121ac73ebf1d75b", "scanner": "scanner-primary", "fingerprint": "f5705b15d21c3038", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f02d990c4dca283f", "level": "error", "message": {"text": "Dangling fetch: POST /api/meta-ads/disconnect (src/app/dashboard/meta-ads/_components/MetaAdsSettingsClient.tsx:205)"}, "properties": {"repobilityId": "dc4ab9c166dcabdd", "scanner": "scanner-primary", "fingerprint": "f02d990c4dca283f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0bd16ae797ef274d", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/meta-ads/accounts (src/app/dashboard/meta-ads/_components/MetaAdsSettingsClient.tsx:221)"}, "properties": {"repobilityId": "52548d44ec25df4c", "scanner": "scanner-primary", "fingerprint": "0bd16ae797ef274d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-05a735357d0b4e5e", "level": "error", "message": {"text": "Dangling fetch: GET /api/meta-ads/campaigns?${params} (src/app/dashboard/meta-ads/_components/MetaAdsDashboardClient.tsx:86)"}, "properties": {"repobilityId": "344d21f904bccd8d", "scanner": "scanner-primary", "fingerprint": "05a735357d0b4e5e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-49fb8b8c57f47d34", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/meta-ads/campaigns/${id} (src/app/dashboard/meta-ads/_components/MetaAdsDashboardClient.tsx:107)"}, "properties": {"repobilityId": "36e59fee9e121378", "scanner": "scanner-primary", "fingerprint": "49fb8b8c57f47d34", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-15edc465db71b702", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/meta-ads/campaigns/${id} (src/app/dashboard/meta-ads/_components/MetaAdsDashboardClient.tsx:123)"}, "properties": {"repobilityId": "dd852edc7e126481", "scanner": "scanner-primary", "fingerprint": "15edc465db71b702", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fac6efb689e90edb", "level": "error", "message": {"text": "Dangling fetch: POST /api/meta-ads/campaigns/${c.id}/publish (src/app/dashboard/meta-ads/_components/MetaAdsDashboardClient.tsx:324)"}, "properties": {"repobilityId": "948aef871d004582", "scanner": "scanner-primary", "fingerprint": "fac6efb689e90edb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1beba3b28acb9edb", "level": "error", "message": {"text": "Dangling fetch: GET /api/meta-ads/analytics?filter=${filter} (src/app/dashboard/meta-ads/_components/MetaAdsAnalyticsClient.tsx:103)"}, "properties": {"repobilityId": "6adea5f00f0f00eb", "scanner": "scanner-primary", "fingerprint": "1beba3b28acb9edb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-955eafd412f5719c", "level": "error", "message": {"text": "Dangling fetch: GET /api/meta-ads/campaigns/${id} (src/app/dashboard/meta-ads/_components/CampaignDetailClient.tsx:46)"}, "properties": {"repobilityId": "65e2b6d70aa86f2f", "scanner": "scanner-primary", "fingerprint": "955eafd412f5719c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-843d8551a9272f87", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/meta-ads/campaigns/${id} (src/app/dashboard/meta-ads/_components/CampaignDetailClient.tsx:59)"}, "properties": {"repobilityId": "bba49effa15ffe9a", "scanner": "scanner-primary", "fingerprint": "843d8551a9272f87", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0f56222ddc2a430e", "level": "error", "message": {"text": "Dangling fetch: POST /api/meta-ads/campaigns/${id}/publish (src/app/dashboard/meta-ads/_components/CampaignDetailClient.tsx:77)"}, "properties": {"repobilityId": "3b2107e870de9b68", "scanner": "scanner-primary", "fingerprint": "0f56222ddc2a430e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e62190fba5faa552", "level": "error", "message": {"text": "Dangling fetch: POST /api/auth/send-otp (src/app/signup/page.tsx:88)"}, "properties": {"repobilityId": "24484d92c9f7ef5a", "scanner": "scanner-primary", "fingerprint": "e62190fba5faa552", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-030255bb714f67b6", "level": "error", "message": {"text": "Dangling fetch: POST /api/auth/verify-otp (src/app/signup/page.tsx:111)"}, "properties": {"repobilityId": "75a3fdafdbaf6561", "scanner": "scanner-primary", "fingerprint": "030255bb714f67b6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9db02c1cc74c5999", "level": "error", "message": {"text": "Dangling fetch: POST /api/auth/provision (src/app/signup/page.tsx:127)"}, "properties": {"repobilityId": "16e7ac938324110c", "scanner": "scanner-primary", "fingerprint": "9db02c1cc74c5999", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a98b8fea3db90544", "level": "error", "message": {"text": "Dangling fetch: POST /api/onboard (src/app/onboard/page.tsx:168)"}, "properties": {"repobilityId": "e004a1b3ac8ad9d9", "scanner": "scanner-primary", "fingerprint": "a98b8fea3db90544", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4fcb26290eb784b8", "level": "error", "message": {"text": "Dangling fetch: GET /api/auth/approval-status (src/app/pending/page.tsx:12)"}, "properties": {"repobilityId": "8066d439c46c38a5", "scanner": "scanner-primary", "fingerprint": "4fcb26290eb784b8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c9f5c1117e0ce809", "level": "error", "message": {"text": "Dangling fetch: POST /api/auth/logout (src/app/pending/page.tsx:35)"}, "properties": {"repobilityId": "bb249c6476bfcdd3", "scanner": "scanner-primary", "fingerprint": "c9f5c1117e0ce809", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f6c853877fb00ce0", "level": "error", "message": {"text": "Dangling fetch: POST https://oauth2.googleapis.com/token (src/lib/integrations/google-calendar.ts:40)"}, "properties": {"repobilityId": "72e104102a6f51cb", "scanner": "scanner-primary", "fingerprint": "f6c853877fb00ce0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-efafe1b276b3c2cd", "level": "error", "message": {"text": "Dangling fetch: POST https://oauth2.googleapis.com/token (src/lib/integrations/google-calendar.ts:93)"}, "properties": {"repobilityId": "ada7ec319a6769ff", "scanner": "scanner-primary", "fingerprint": "efafe1b276b3c2cd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e48c69d849c8b8cb", "level": "error", "message": {"text": "Dangling fetch: POST https://www.googleapis.com/calendar/v3/freeBusy (src/lib/integrations/google-calendar.ts:141)"}, "properties": {"repobilityId": "1d11644b5533ec27", "scanner": "scanner-primary", "fingerprint": "e48c69d849c8b8cb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-25fa9353b2ce0343", "level": "error", "message": {"text": "Dangling fetch: POST https://www.googleapis.com/calendar/v3/calendars/primary/events?sendUpdates=all (src/lib/integrations/google-calendar.ts:214)"}, "properties": {"repobilityId": "82935b0598e24e03", "scanner": "scanner-primary", "fingerprint": "25fa9353b2ce0343", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ae32a74ec9d77343", "level": "error", "message": {"text": "Dangling fetch: POST https://graph.facebook.com/v20.0/${pixelId}/events (src/lib/integrations/meta-capi.ts:127)"}, "properties": {"repobilityId": "81ab2e2d21b536b6", "scanner": "scanner-primary", "fingerprint": "ae32a74ec9d77343", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0676e40bb5e4386c", "level": "error", "message": {"text": "Dangling fetch: POST https://api.razorpay.com/v1/payment_links (src/lib/integrations/runner.ts:30)"}, "properties": {"repobilityId": "854c1b56d975c429", "scanner": "scanner-primary", "fingerprint": "0676e40bb5e4386c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-15afba1a607c0b4f", "level": "error", "message": {"text": "Dangling fetch: POST https://www.zohoapis.${domain}/crm/v2/Leads (src/lib/integrations/runner.ts:61)"}, "properties": {"repobilityId": "031528d677dce788", "scanner": "scanner-primary", "fingerprint": "15afba1a607c0b4f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-db289b5e409d7623", "level": "error", "message": {"text": "Dangling fetch: POST https://apiv2.shiprocket.in/v1/external/auth/login (src/lib/integrations/runner.ts:93)"}, "properties": {"repobilityId": "6de8a60aedece6d9", "scanner": "scanner-primary", "fingerprint": "db289b5e409d7623", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cb6380e0d060d20f", "level": "error", "message": {"text": "Dangling fetch: POST https://api.razorpay.com/v1/payment_links (src/lib/integrations/runner.ts:258)"}, "properties": {"repobilityId": "38d38492aa6fd098", "scanner": "scanner-primary", "fingerprint": "cb6380e0d060d20f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9d88b7fc43ec958c", "level": "error", "message": {"text": "Dangling fetch: POST https://oauth2.googleapis.com/token (src/lib/integrations/google-sheets.ts:46)"}, "properties": {"repobilityId": "4e69822f034160b0", "scanner": "scanner-primary", "fingerprint": "9d88b7fc43ec958c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b4963359f733f3cf", "level": "error", "message": {"text": "Dangling fetch: POST https://oauth2.googleapis.com/token (src/lib/integrations/google-sheets.ts:133)"}, "properties": {"repobilityId": "21822adec3f09f94", "scanner": "scanner-primary", "fingerprint": "b4963359f733f3cf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7063cb45419b34d2", "level": "error", "message": {"text": "Dangling fetch: GET https://sheets.googleapis.com/v4/spreadsheets/${spreadsheetId}?fields=sheets.properties.title (src/lib/integrations/google-sheets.ts:164)"}, "properties": {"repobilityId": "e75dced023d4f51a", "scanner": "scanner-primary", "fingerprint": "7063cb45419b34d2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b2a0713c9f29e3ed", "level": "error", "message": {"text": "Dangling fetch: POST https://sheets.googleapis.com/v4/spreadsheets/${spreadsheetId}:batchUpdate (src/lib/integrations/google-sheets.ts:181)"}, "properties": {"repobilityId": "d88b6ef04a4ed3ef", "scanner": "scanner-primary", "fingerprint": "b2a0713c9f29e3ed", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d3537e1af32ba4cf", "level": "error", "message": {"text": "Dangling fetch: GET https://sheets.googleapis.com/v4/spreadsheets/${spreadsheetId}/values/${encodeURIComponent(range)} (src/lib/integrations/google-sheets.ts:222)"}, "properties": {"repobilityId": "64accd4f8783e2b2", "scanner": "scanner-primary", "fingerprint": "d3537e1af32ba4cf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c642241d59bbdae8", "level": "error", "message": {"text": "Dangling fetch: PUT https://sheets.googleapis.com/v4/spreadsheets/${spreadsheetId}/values/${encodeURIComponent(range)}?valueInputOption=RAW (src/lib/integrations/google-sheets.ts:232)"}, "properties": {"repobilityId": "ff8c655df156fd2a", "scanner": "scanner-primary", "fingerprint": "c642241d59bbdae8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-56a55bfcaa7ca0af", "level": "error", "message": {"text": "Dangling fetch: POST https://sheets.googleapis.com/v4/spreadsheets/${config.spreadsheet_id}/values/${encodeURIComponent(range)}:append?valueInputOption=USER_ENTERED&insertDataOption=INSERT_ROWS (src/lib/integrations/google-sheets.ts:272)"}, "properties": {"repobilityId": "acaa08c560d472e1", "scanner": "scanner-primary", "fingerprint": "56a55bfcaa7ca0af", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b18ffe1b47f26ecd", "level": "error", "message": {"text": "Dangling fetch: POST https://sheets.googleapis.com/v4/spreadsheets/${config.spreadsheet_id}/values/${encodeURIComponent(clearRange)}:clear (src/lib/integrations/google-sheets.ts:299)"}, "properties": {"repobilityId": "8504839346d1447f", "scanner": "scanner-primary", "fingerprint": "b18ffe1b47f26ecd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6b2ccd423abb5b01", "level": "error", "message": {"text": "Dangling fetch: PUT https://sheets.googleapis.com/v4/spreadsheets/${config.spreadsheet_id}/values/${encodeURIComponent(range)}?valueInputOption=USER_ENTERED (src/lib/integrations/google-sheets.ts:323)"}, "properties": {"repobilityId": "cbc856a35c8d4f44", "scanner": "scanner-primary", "fingerprint": "6b2ccd423abb5b01", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2c308652913122f6", "level": "error", "message": {"text": "Dangling fetch: GET https://sheets.googleapis.com/v4/spreadsheets/${spreadsheetId}/values/${encodeURIComponent(range)} (src/lib/integrations/google-sheets.ts:368)"}, "properties": {"repobilityId": "cbec4e53f94452f6", "scanner": "scanner-primary", "fingerprint": "2c308652913122f6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-728841d45f95ebec", "level": "error", "message": {"text": "Dangling fetch: PUT https://sheets.googleapis.com/v4/spreadsheets/${spreadsheetId}/values/${encodeURIComponent(range)}?valueInputOption=RAW (src/lib/integrations/google-sheets.ts:376)"}, "properties": {"repobilityId": "3da5817dda719f4c", "scanner": "scanner-primary", "fingerprint": "728841d45f95ebec", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-93657a7fedb51108", "level": "error", "message": {"text": "Dangling fetch: POST https://sheets.googleapis.com/v4/spreadsheets/${config.spreadsheet_id}/values/${encodeURIComponent(range)}:append?valueInputOption=USER_ENTERED&insertDataOption=INSERT_ROWS (src/lib/integrations/google-sheets.ts:449)"}, "properties": {"repobilityId": "f5384233baa00cab", "scanner": "scanner-primary", "fingerprint": "93657a7fedb51108", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-511e1d474de8be50", "level": "error", "message": {"text": "Dangling fetch: GET https://graph.facebook.com/v21.0/${wabaId}/message_templates?limit=250 (src/lib/broadcast/services/meta-template-sync.service.ts:54)"}, "properties": {"repobilityId": "3fb5b0651b72443c", "scanner": "scanner-primary", "fingerprint": "511e1d474de8be50", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-20a65ea4fa5d1dd3", "level": "error", "message": {"text": "Dangling fetch: POST https://api.razorpay.com/v1/payment_links (src/lib/payments/razorpay-links.ts:45)"}, "properties": {"repobilityId": "9a160941913b1da4", "scanner": "scanner-primary", "fingerprint": "20a65ea4fa5d1dd3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ddc15ad2e7879aee", "level": "error", "message": {"text": "Dangling fetch: GET /api/dashboard/contacts?limit=2000&cc=${get().workspaceDefaultCountryCode} (src/lib/store/contactsStore.ts:136)"}, "properties": {"repobilityId": "baec9427c7efb040", "scanner": "scanner-primary", "fingerprint": "ddc15ad2e7879aee", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1515f718f7a0fa77", "level": "note", "message": {"text": "Unused endpoint: POST /call/outbound"}, "properties": {"repobilityId": "7938ce72ff51deee", "scanner": "scanner-primary", "fingerprint": "1515f718f7a0fa77", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f3bad2808c1340ab", "level": "note", "message": {"text": "Unused endpoint: GET /calls/active"}, "properties": {"repobilityId": "c4a0eb00d176415d", "scanner": "scanner-primary", "fingerprint": "f3bad2808c1340ab", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1ab604842e1e9409", "level": "note", "message": {"text": "Unused endpoint: GET /calls/logs"}, "properties": {"repobilityId": "bb88204a6f3ee6d4", "scanner": "scanner-primary", "fingerprint": "1ab604842e1e9409", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c5503b5b9ebd09c2", "level": "note", "message": {"text": "Unused endpoint: GET /calls/stats"}, "properties": {"repobilityId": "e8ea5c32b7d13a01", "scanner": "scanner-primary", "fingerprint": "c5503b5b9ebd09c2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-25c424dd0869d5e5", "level": "note", "message": {"text": "Unused endpoint: USE /admin/queue"}, "properties": {"repobilityId": "532f44549ba8edd4", "scanner": "scanner-primary", "fingerprint": "25c424dd0869d5e5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}