{"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-cc127d69d14f2314", "name": "Stray `console.log` in TS/JS \u2014 scripts/merge-customer-threads.ts:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/merge-customer-threads.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-e8db822338184332", "name": "Stray `console.log` in TS/JS \u2014 scripts/create-admin.js:19", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/create-admin.js: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-9857d65262146678", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-order.ts:16", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-order.ts: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-b0eff9c822af6447", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-meta-permissions.ts:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-meta-permissions.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-f1f5bc6885f01577", "name": "Stray `console.log` in TS/JS \u2014 scripts/diagnose-imap.ts:20", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/diagnose-imap.ts:20"}, "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-84f46a78147e6dec", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-webhook-status.ts:19", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-webhook-status.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-386fa730f2df156e", "name": "Stray `console.log` in TS/JS \u2014 prisma/seed.ts:12", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 prisma/seed.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-b4e842bee02d1883", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard-nav.tsx:359", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard-nav.tsx:359"}, "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-eee2c2b1e42dedcd", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/compose/compose-modal.tsx:223", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/compose/compose-modal.tsx:223"}, "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-62ea6cf666ee2967", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/thread/thread-view.tsx:1114", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/thread/thread-view.tsx:1114"}, "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-2f97138e044ed36e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/ui/address-autocomplete.tsx:238", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/ui/address-autocomplete.tsx:238"}, "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-c82f9ae6a5d0fb28", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/social/conversations-view.tsx:375", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/social/conversations-view.tsx:375"}, "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-9c4adb171afe3d8f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/social/comment-list.tsx:298", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/social/comment-list.tsx:298"}, "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-4fc963855bdd8f3c", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/inbox/inbox-list.tsx:352", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/inbox/inbox-list.tsx:352"}, "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-378c551ab0d8d365", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/sidebar/customer-sidebar.tsx:3061", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/sidebar/customer-sidebar.tsx:3061"}, "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-0bebdb04ff5cb778", "name": "Stray `console.log` in TS/JS \u2014 src/components/sidebar/customer-sidebar.tsx:2373", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/sidebar/customer-sidebar.tsx:2373"}, "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-b539b747767dc505", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/threads/compose/route.ts:108", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/threads/compose/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-9cfdee73ed6ea6cb", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/threads/auto-merge/route.ts:97", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/threads/auto-merge/route.ts:97"}, "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-9ce85708df4fd520", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/integrations/route.ts:247", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/integrations/route.ts:247"}, "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-c3457c4a05c98b66", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/backup/route.ts:36", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/backup/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-da087e3d0d8e1cf8", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/social/auth/route.ts:45", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/social/auth/route.ts:45"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-db64776c4d13aec4", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/social/webhook/route.ts:49", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/social/webhook/route.ts:49"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-431bb4108d53c4ee", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/backup/route.ts:95", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/backup/route.ts:95"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-75afad3f8e1ec37c", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/tag-rules/route.ts:192", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/tag-rules/route.ts:192"}, "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-0126211b528e5b65", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/trash/page.tsx:194", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/trash/page.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-f1286112eca1cbac", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/reviews/page.tsx:432", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/reviews/page.tsx:432"}, "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-9e9b71008ac55e33", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/admin/activity/page.tsx:80", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/admin/activity/page.tsx:80"}, "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-d42d115afd6b7d54", "name": "Stray `console.log` in TS/JS \u2014 src/app/(dashboard)/admin/social/page.tsx:169", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/(dashboard)/admin/social/page.tsx:169"}, "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-6f19976dc29fc3f9", "name": "Stray `console.log` in TS/JS \u2014 src/lib/cache.ts:35", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/cache.ts:35"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d8b0656faab44762", "name": "Stray `console.log` in TS/JS \u2014 src/lib/rules.ts:154", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/rules.ts:154"}, "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-0f845a72f87b0708", "name": "Stray `console.log` in TS/JS \u2014 src/lib/printify/relink.ts:359", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/printify/relink.ts:359"}, "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-c7a9ca68c1db834b", "name": "Stray `console.log` in TS/JS \u2014 src/lib/email/index.ts:61", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/email/index.ts:61"}, "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-1316f2bde61a0a62", "name": "Stray `console.log` in TS/JS \u2014 src/lib/email/zoho-imap-provider.ts:270", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/email/zoho-imap-provider.ts:270"}, "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-91561e9c12364555", "name": "Stray `console.log` in TS/JS \u2014 src/lib/email/sync-service.ts:84", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/email/sync-service.ts:84"}, "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-8a45a16c8e1000f8", "name": "Stray `console.log` in TS/JS \u2014 src/lib/zoho-mail-api/index.ts:93", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/zoho-mail-api/index.ts:93"}, "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-295873d7191912a6", "name": "Stray `console.log` in TS/JS \u2014 src/lib/social/rules-engine.ts:170", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/social/rules-engine.ts:170"}, "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-936170d99854f677", "name": "Stray `console.log` in TS/JS \u2014 src/lib/social/sync.ts:49", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/social/sync.ts:49"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cb1477b5e1cfa023", "name": "Stray `console.log` in TS/JS \u2014 src/lib/social/meta-client.ts:21", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/social/meta-client.ts:21"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-92a1007facf0b067", "name": "Stray `console.log` in TS/JS \u2014 src/lib/shopify/client.ts:2110", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/shopify/client.ts:2110"}, "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-9cae34cb24bf48f9", "name": "Stray `console.log` in TS/JS \u2014 src/lib/claude/index.ts:53", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/claude/index.ts:53"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d3f605d021b41b24", "name": "Stray `console.log` in TS/JS \u2014 src/workers/email-sync.ts:20", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/workers/email-sync.ts:20"}, "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-5174cf51cbcb9091", "name": "Stray `console.log` in TS/JS \u2014 src/workers/main.ts:107", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/workers/main.ts:107"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8987d6d1c30c7202", "name": "Docker base image is tag-pinned but not digest-pinned: node:20-alpine", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-alpine"}, "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-ce8b3454f4b451e5", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/components/thread/thread-view.tsx:1093", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/thread/thread-view.tsx:1093"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-72aac4b1a6b8e0e1", "name": "Possible secret in src/app/api/admin/integrations/route.ts", "shortDescription": {"text": "Possible secret in src/app/api/admin/integrations/route.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-d7ce886a88363287", "name": "Insecure pattern 'node_child_process' in src/app/api/admin/backup/route.ts:8", "shortDescription": {"text": "Insecure pattern 'node_child_process' in src/app/api/admin/backup/route.ts:8"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7b743795a1e336c5", "name": "Insecure pattern 'node_child_process' in src/app/api/admin/backup/restore/route.ts:8", "shortDescription": {"text": "Insecure pattern 'node_child_process' in src/app/api/admin/backup/restore/route.ts:8"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-aa1d5f83fa2ea8ea", "name": "Insecure pattern 'node_child_process' in src/app/api/cron/backup/route.ts:13", "shortDescription": {"text": "Insecure pattern 'node_child_process' in src/app/api/cron/backup/route.ts:13"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4601e3ad3bb28677", "name": "No CI/CD pipelines detected", "shortDescription": {"text": "No CI/CD pipelines detected"}, "fullDescription": {"text": "No GitHub Actions, GitLab CI, or CircleCI configs found. Without CI you can't gate deploys on tests/lints."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-80ac4dfea5005bb6", "name": "Very large file: src/components/thread/thread-view.tsx (1933 lines)", "shortDescription": {"text": "Very large file: src/components/thread/thread-view.tsx (1933 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-f93942093c48bee8", "name": "Very large file: src/components/sidebar/customer-sidebar.tsx (7834 lines)", "shortDescription": {"text": "Very large file: src/components/sidebar/customer-sidebar.tsx (7834 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-55371b66829f8162", "name": "Very large file: src/lib/shopify/client.ts (3646 lines)", "shortDescription": {"text": "Very large file: src/lib/shopify/client.ts (3646 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "1 test file(s) for 188 source file(s) (ratio 0.01). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 324 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 175 placeholder/mock markers across 25 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, ci. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-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-99dcc098e221c684", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/check-meta-permissions.ts:148", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/check-meta-permissions.ts:148"}, "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-b2da1bab8377179b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/check-webhook-status.ts:47", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/check-webhook-status.ts:47"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ef592c122b5d6e31", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard-nav.tsx:82", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard-nav.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-4d54c275d060020f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/compose/compose-modal.tsx:64", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/compose/compose-modal.tsx:64"}, "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-467eb369c131b7b6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/thread/thread-view.tsx:236", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/thread/thread-view.tsx: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-9b81870ea98cea2f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/social/comment-detail.tsx:140", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/social/comment-detail.tsx:140"}, "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-c7710006da1311d9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/social/conversations-view.tsx:90", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/social/conversations-view.tsx:90"}, "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-e448764d215a5f7b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/social/comment-list.tsx:58", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/social/comment-list.tsx:58"}, "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-566f17dc7d979cc1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/inbox/inbox-list.tsx:104", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/inbox/inbox-list.tsx:104"}, "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-9d410059e3a4c286", "name": "Commented-code block (5 lines) in src/components/sidebar/customer-sidebar.tsx:2313", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/sidebar/customer-sidebar.tsx:2313"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0d6455a6edeb5dd7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/sidebar/customer-sidebar.tsx:572", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/sidebar/customer-sidebar.tsx:572"}, "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-2835c236bb5ac4cf", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/address/autocomplete/route.ts:108", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/address/autocomplete/route.ts:108"}, "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-1ea85e8c8eb3ea6b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/integrations/route.ts:249", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/integrations/route.ts:249"}, "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-017abe546c053818", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/integrations/test/route.ts:113", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/integrations/test/route.ts:113"}, "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-05150b4781d57017", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/social/auth/route.ts:228", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/social/auth/route.ts:228"}, "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-872ebd11f37a884b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/settings/page.tsx:58", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/settings/page.tsx:58"}, "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-d8473354a2d6af4b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/needs-attention/page.tsx:34", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/needs-attention/page.tsx:34"}, "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-69e458a586ca3b26", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/design-ideas/page.tsx:31", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/design-ideas/page.tsx:31"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d2bca80cd89e941b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/trash/page.tsx:42", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/trash/page.tsx:42"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b48feabacaec450f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/insights/page.tsx:173", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/insights/page.tsx:173"}, "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-fb71ac9bcf1ffc53", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/reviews/page.tsx:98", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/reviews/page.tsx:98"}, "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-c502d9bbec0d7f39", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/admin/integrations/page.tsx:105", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/admin/integrations/page.tsx:105"}, "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-5a43e16ddd1a3e9e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/admin/automation/assignment-rules-content.tsx:77", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/admin/automation/assignment-rules-content.tsx:77"}, "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-a303992ad09cf76e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/admin/automation/tags-content.tsx:53", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/admin/automation/tags-content.tsx:53"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f93273daf3d8a53a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/admin/automation/filters-content.tsx:40", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/admin/automation/filters-content.tsx: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-c2579fe36aee5661", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/admin/users/page.tsx:44", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/admin/users/page.tsx:44"}, "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-64752f960eea4e23", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/admin/mailbox/page.tsx:52", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/admin/mailbox/page.tsx: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-007654299b596cba", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/admin/canned-replies/page.tsx:29", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/admin/canned-replies/page.tsx:29"}, "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-b26b3684f54d948c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/admin/rules/page.tsx:107", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/admin/rules/page.tsx:107"}, "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-818523574f4d847a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/admin/activity/page.tsx:40", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/admin/activity/page.tsx: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-8b77e68e89c50d43", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/admin/social/page.tsx:46", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/admin/social/page.tsx: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-838245d2c0792ca2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/admin/tags/page.tsx:66", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/admin/tags/page.tsx:66"}, "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-2d016bc2c0e5d966", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/social/page.tsx:39", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/social/page.tsx:39"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f9b74aafd99e7300", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/printify/client.ts:42", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/printify/client.ts:42"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-fe57a0b8789a2641", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/email/zoho-imap-provider.ts:299", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/email/zoho-imap-provider.ts:299"}, "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-7c21a48a2c409079", "name": "Commented-code block (6 lines) in src/lib/ai/context.ts:235", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/ai/context.ts:235"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1506c8e116339c33", "name": "Commented-code block (6 lines) in src/lib/trackingmore/client.ts:84", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/trackingmore/client.ts:84"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-40f64966d20a8b87", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/zoho-mail-api/index.ts:215", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/zoho-mail-api/index.ts:215"}, "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-a16998440a94202a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/judgeme/client.ts:77", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/judgeme/client.ts:77"}, "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-01ec6e9117d392aa", "name": "Commented-code block (5 lines) in src/lib/social/meta-client.ts:448", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/social/meta-client.ts:448"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0d5ceab276f6cfc6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/social/meta-client.ts:90", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/social/meta-client.ts:90"}, "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-a496a3f3d018bb86", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/shopify/client.ts:1233", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/shopify/client.ts:1233"}, "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-2b06971d500e9b2e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/use-auto-sync.ts:67", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/use-auto-sync.ts:67"}, "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-474b3a89042d2cdf", "name": "Dangling fetch: GET /api/nav/counts (src/components/dashboard-nav.tsx:82)", "shortDescription": {"text": "Dangling fetch: GET /api/nav/counts (src/components/dashboard-nav.tsx:82)"}, "fullDescription": {"text": "`src/components/dashboard-nav.tsx:82` calls `GET /api/nav/counts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/nav/counts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e0a3f01c2fae6b35", "name": "Dangling fetch: POST /api/admin/printify/sync (src/components/dashboard-nav.tsx:95)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/printify/sync (src/components/dashboard-nav.tsx:95)"}, "fullDescription": {"text": "`src/components/dashboard-nav.tsx:95` calls `POST /api/admin/printify/sync` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/printify/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-eb773d990e52e4d1", "name": "Dangling fetch: POST /api/threads/compose (src/components/compose/compose-modal.tsx:64)", "shortDescription": {"text": "Dangling fetch: POST /api/threads/compose (src/components/compose/compose-modal.tsx:64)"}, "fullDescription": {"text": "`src/components/compose/compose-modal.tsx:64` calls `POST /api/threads/compose` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/threads/compose`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0e0a16b10926aaa0", "name": "Dangling fetch: GET /api/canned-replies (src/components/thread/thread-view.tsx:236)", "shortDescription": {"text": "Dangling fetch: GET /api/canned-replies (src/components/thread/thread-view.tsx:236)"}, "fullDescription": {"text": "`src/components/thread/thread-view.tsx:236` calls `GET /api/canned-replies` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/canned-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-6d04e80bf314f864", "name": "Dangling fetch: GET /api/threads/${threadId} (src/components/thread/thread-view.tsx:369)", "shortDescription": {"text": "Dangling fetch: GET /api/threads/${threadId} (src/components/thread/thread-view.tsx:369)"}, "fullDescription": {"text": "`src/components/thread/thread-view.tsx:369` calls `GET /api/threads/${threadId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/threads/<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-04e7b986912ab79e", "name": "Dangling fetch: POST /api/threads/${thread.id}/read (src/components/thread/thread-view.tsx:481)", "shortDescription": {"text": "Dangling fetch: POST /api/threads/${thread.id}/read (src/components/thread/thread-view.tsx:481)"}, "fullDescription": {"text": "`src/components/thread/thread-view.tsx:481` calls `POST /api/threads/${thread.id}/read` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/threads/<p>/read`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9c2cb8a4e07f59db", "name": "Dangling fetch: GET /api/threads?email=${encodeURIComponent(thread.customerEmail)}&exclude=${threadId} (src/components/t", "shortDescription": {"text": "Dangling fetch: GET /api/threads?email=${encodeURIComponent(thread.customerEmail)}&exclude=${threadId} (src/components/thread/thread-view.tsx:496)"}, "fullDescription": {"text": "`src/components/thread/thread-view.tsx:496` calls `GET /api/threads?email=${encodeURIComponent(thread.customerEmail)}&exclude=${threadId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/threads`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2bd82d873ddf953b", "name": "Dangling fetch: GET /api/tags (src/components/thread/thread-view.tsx:508)", "shortDescription": {"text": "Dangling fetch: GET /api/tags (src/components/thread/thread-view.tsx:508)"}, "fullDescription": {"text": "`src/components/thread/thread-view.tsx:508` calls `GET /api/tags` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tags`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c8533c9833eee390", "name": "Dangling fetch: GET /api/admin/users (src/components/thread/thread-view.tsx:517)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/users (src/components/thread/thread-view.tsx:517)"}, "fullDescription": {"text": "`src/components/thread/thread-view.tsx:517` calls `GET /api/admin/users` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/users`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-34b88eb2f443e183", "name": "Dangling fetch: PATCH /api/threads/${threadId} (src/components/thread/thread-view.tsx:527)", "shortDescription": {"text": "Dangling fetch: PATCH /api/threads/${threadId} (src/components/thread/thread-view.tsx:527)"}, "fullDescription": {"text": "`src/components/thread/thread-view.tsx:527` calls `PATCH /api/threads/${threadId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/threads/<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-972e1069753c71fc", "name": "Dangling fetch: POST /api/threads/${threadId}/tags (src/components/thread/thread-view.tsx:549)", "shortDescription": {"text": "Dangling fetch: POST /api/threads/${threadId}/tags (src/components/thread/thread-view.tsx:549)"}, "fullDescription": {"text": "`src/components/thread/thread-view.tsx:549` calls `POST /api/threads/${threadId}/tags` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/threads/<p>/tags`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-26accd8a0ee4ba80", "name": "Dangling fetch: DELETE /api/threads/${threadId}/tags/${tagId} (src/components/thread/thread-view.tsx:569)", "shortDescription": {"text": "Dangling fetch: DELETE /api/threads/${threadId}/tags/${tagId} (src/components/thread/thread-view.tsx:569)"}, "fullDescription": {"text": "`src/components/thread/thread-view.tsx:569` calls `DELETE /api/threads/${threadId}/tags/${tagId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/threads/<p>/tags/<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-e27a8408e96d0036", "name": "Dangling fetch: GET /api/attachments/${id} (src/components/thread/thread-view.tsx:603)", "shortDescription": {"text": "Dangling fetch: GET /api/attachments/${id} (src/components/thread/thread-view.tsx:603)"}, "fullDescription": {"text": "`src/components/thread/thread-view.tsx:603` calls `GET /api/attachments/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/attachments/<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-6a0637ba7f4260c6", "name": "Dangling fetch: POST /api/threads/${threadId}/messages (src/components/thread/thread-view.tsx:659)", "shortDescription": {"text": "Dangling fetch: POST /api/threads/${threadId}/messages (src/components/thread/thread-view.tsx:659)"}, "fullDescription": {"text": "`src/components/thread/thread-view.tsx:659` calls `POST /api/threads/${threadId}/messages` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/threads/<p>/messages`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9c8334372e923b42", "name": "Dangling fetch: POST /api/threads/${threadId}/suggest (src/components/thread/thread-view.tsx:686)", "shortDescription": {"text": "Dangling fetch: POST /api/threads/${threadId}/suggest (src/components/thread/thread-view.tsx:686)"}, "fullDescription": {"text": "`src/components/thread/thread-view.tsx:686` calls `POST /api/threads/${threadId}/suggest` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/threads/<p>/suggest`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d41e71ae28bc7ceb", "name": "Dangling fetch: PATCH /api/threads/${threadId} (src/components/thread/thread-view.tsx:713)", "shortDescription": {"text": "Dangling fetch: PATCH /api/threads/${threadId} (src/components/thread/thread-view.tsx:713)"}, "fullDescription": {"text": "`src/components/thread/thread-view.tsx:713` calls `PATCH /api/threads/${threadId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/threads/<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-84ee472e91b6bbbb", "name": "Dangling fetch: DELETE /api/threads/${threadId} (src/components/thread/thread-view.tsx:758)", "shortDescription": {"text": "Dangling fetch: DELETE /api/threads/${threadId} (src/components/thread/thread-view.tsx:758)"}, "fullDescription": {"text": "`src/components/thread/thread-view.tsx:758` calls `DELETE /api/threads/${threadId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/threads/<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-1eb6c204f1a467cb", "name": "Dangling fetch: DELETE /api/threads/${threadId}?purge=true (src/components/thread/thread-view.tsx:780)", "shortDescription": {"text": "Dangling fetch: DELETE /api/threads/${threadId}?purge=true (src/components/thread/thread-view.tsx:780)"}, "fullDescription": {"text": "`src/components/thread/thread-view.tsx:780` calls `DELETE /api/threads/${threadId}?purge=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/threads/<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-92d9932b8b4c8279", "name": "Dangling fetch: GET /api/address/autocomplete?${params} (src/components/ui/address-autocomplete.tsx:71)", "shortDescription": {"text": "Dangling fetch: GET /api/address/autocomplete?${params} (src/components/ui/address-autocomplete.tsx:71)"}, "fullDescription": {"text": "`src/components/ui/address-autocomplete.tsx:71` calls `GET /api/address/autocomplete?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/address/autocomplete`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-187bf1d27bafa228", "name": "Dangling fetch: GET /api/social/comments/${commentId} (src/components/social/comment-detail.tsx:140)", "shortDescription": {"text": "Dangling fetch: GET /api/social/comments/${commentId} (src/components/social/comment-detail.tsx:140)"}, "fullDescription": {"text": "`src/components/social/comment-detail.tsx:140` calls `GET /api/social/comments/${commentId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/social/comments/<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-ede7a24979eac048", "name": "Dangling fetch: POST /api/social/comments/${targetId || commentId} (src/components/social/comment-detail.tsx:154)", "shortDescription": {"text": "Dangling fetch: POST /api/social/comments/${targetId || commentId} (src/components/social/comment-detail.tsx:154)"}, "fullDescription": {"text": "`src/components/social/comment-detail.tsx:154` calls `POST /api/social/comments/${targetId || commentId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/social/comments/<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-9781dc493209a346", "name": "Dangling fetch: PATCH /api/social/comments/${commentId} (src/components/social/comment-detail.tsx:296)", "shortDescription": {"text": "Dangling fetch: PATCH /api/social/comments/${commentId} (src/components/social/comment-detail.tsx:296)"}, "fullDescription": {"text": "`src/components/social/comment-detail.tsx:296` calls `PATCH /api/social/comments/${commentId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/social/comments/<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-2ca5f87d7f7ea6dd", "name": "Dangling fetch: GET /api/social/comments/${commentId}/order-match (src/components/social/comment-detail.tsx:332)", "shortDescription": {"text": "Dangling fetch: GET /api/social/comments/${commentId}/order-match (src/components/social/comment-detail.tsx:332)"}, "fullDescription": {"text": "`src/components/social/comment-detail.tsx:332` calls `GET /api/social/comments/${commentId}/order-match` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/social/comments/<p>/order-match`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-11d25035e50365aa", "name": "Dangling fetch: POST /api/social/comments/${replyTargetId || commentId}/suggest (src/components/social/comment-detail.ts", "shortDescription": {"text": "Dangling fetch: POST /api/social/comments/${replyTargetId || commentId}/suggest (src/components/social/comment-detail.tsx:344)"}, "fullDescription": {"text": "`src/components/social/comment-detail.tsx:344` calls `POST /api/social/comments/${replyTargetId || commentId}/suggest` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/social/comments/<p>/suggest`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-77ab7efa08ecdc64", "name": "Dangling fetch: GET /api/social/conversations/${conversationId} (src/components/social/conversations-view.tsx:90)", "shortDescription": {"text": "Dangling fetch: GET /api/social/conversations/${conversationId} (src/components/social/conversations-view.tsx:90)"}, "fullDescription": {"text": "`src/components/social/conversations-view.tsx:90` calls `GET /api/social/conversations/${conversationId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/social/conversations/<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-0b36dd0387a0d2b8", "name": "Dangling fetch: POST /api/social/conversations/${conversationId} (src/components/social/conversations-view.tsx:124)", "shortDescription": {"text": "Dangling fetch: POST /api/social/conversations/${conversationId} (src/components/social/conversations-view.tsx:124)"}, "fullDescription": {"text": "`src/components/social/conversations-view.tsx:124` calls `POST /api/social/conversations/${conversationId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/social/conversations/<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-e0dc96230176b090", "name": "Dangling fetch: PATCH /api/social/conversations/${conversationId} (src/components/social/conversations-view.tsx:142)", "shortDescription": {"text": "Dangling fetch: PATCH /api/social/conversations/${conversationId} (src/components/social/conversations-view.tsx:142)"}, "fullDescription": {"text": "`src/components/social/conversations-view.tsx:142` calls `PATCH /api/social/conversations/${conversationId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/social/conversations/<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-abffba2b16a0c648", "name": "Dangling fetch: GET /api/social/conversations (src/components/social/conversations-view.tsx:321)", "shortDescription": {"text": "Dangling fetch: GET /api/social/conversations (src/components/social/conversations-view.tsx:321)"}, "fullDescription": {"text": "`src/components/social/conversations-view.tsx:321` calls `GET /api/social/conversations` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/social/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-447bd0bf7428b078", "name": "Dangling fetch: POST /api/design-ideas (src/components/social/comment-list.tsx:58)", "shortDescription": {"text": "Dangling fetch: POST /api/design-ideas (src/components/social/comment-list.tsx:58)"}, "fullDescription": {"text": "`src/components/social/comment-list.tsx:58` calls `POST /api/design-ideas` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/design-ideas`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9199896c28abf74b", "name": "Dangling fetch: PATCH /api/social/comments/${id} (src/components/social/comment-list.tsx:80)", "shortDescription": {"text": "Dangling fetch: PATCH /api/social/comments/${id} (src/components/social/comment-list.tsx:80)"}, "fullDescription": {"text": "`src/components/social/comment-list.tsx:80` calls `PATCH /api/social/comments/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/social/comments/<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-6f94bb3e62418269", "name": "Dangling fetch: GET /api/social/comments?${queryParams} (src/components/social/comment-list.tsx:126)", "shortDescription": {"text": "Dangling fetch: GET /api/social/comments?${queryParams} (src/components/social/comment-list.tsx:126)"}, "fullDescription": {"text": "`src/components/social/comment-list.tsx:126` calls `GET /api/social/comments?${queryParams}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/social/comments`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a7b0ed2bf47f3606", "name": "Dangling fetch: GET /api/nav/counts (src/components/inbox/inbox-list.tsx:104)", "shortDescription": {"text": "Dangling fetch: GET /api/nav/counts (src/components/inbox/inbox-list.tsx:104)"}, "fullDescription": {"text": "`src/components/inbox/inbox-list.tsx:104` calls `GET /api/nav/counts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/nav/counts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e0f07f2ebbeb2174", "name": "Dangling fetch: GET /api/threads?${params} (src/components/inbox/inbox-list.tsx:125)", "shortDescription": {"text": "Dangling fetch: GET /api/threads?${params} (src/components/inbox/inbox-list.tsx:125)"}, "fullDescription": {"text": "`src/components/inbox/inbox-list.tsx:125` calls `GET /api/threads?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/threads`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0e463880f8c2c19d", "name": "Dangling fetch: POST /api/sync (src/components/inbox/inbox-list.tsx:160)", "shortDescription": {"text": "Dangling fetch: POST /api/sync (src/components/inbox/inbox-list.tsx:160)"}, "fullDescription": {"text": "`src/components/inbox/inbox-list.tsx:160` calls `POST /api/sync` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/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-21f28536036919b6", "name": "Dangling fetch: POST /api/admin/printify/sync (src/components/inbox/inbox-list.tsx:164)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/printify/sync (src/components/inbox/inbox-list.tsx:164)"}, "fullDescription": {"text": "`src/components/inbox/inbox-list.tsx:164` calls `POST /api/admin/printify/sync` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/printify/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-404dd5d5216deb52", "name": "Dangling fetch: POST /api/threads/${threadId}/suppress-marketing (src/components/sidebar/customer-sidebar.tsx:609)", "shortDescription": {"text": "Dangling fetch: POST /api/threads/${threadId}/suppress-marketing (src/components/sidebar/customer-sidebar.tsx:609)"}, "fullDescription": {"text": "`src/components/sidebar/customer-sidebar.tsx:609` calls `POST /api/threads/${threadId}/suppress-marketing` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/threads/<p>/suppress-marketing`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0fa8edbbb9888537", "name": "Dangling fetch: GET /api/threads/${threadId}/reviews (src/components/sidebar/customer-sidebar.tsx:650)", "shortDescription": {"text": "Dangling fetch: GET /api/threads/${threadId}/reviews (src/components/sidebar/customer-sidebar.tsx:650)"}, "fullDescription": {"text": "`src/components/sidebar/customer-sidebar.tsx:650` calls `GET /api/threads/${threadId}/reviews` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/threads/<p>/reviews`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1b27d145ec09881a", "name": "Dangling fetch: GET /api/threads/${threadId} (src/components/sidebar/customer-sidebar.tsx:696)", "shortDescription": {"text": "Dangling fetch: GET /api/threads/${threadId} (src/components/sidebar/customer-sidebar.tsx:696)"}, "fullDescription": {"text": "`src/components/sidebar/customer-sidebar.tsx:696` calls `GET /api/threads/${threadId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/threads/<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-647d872e7b15d1bc", "name": "Dangling fetch: POST /api/threads/${threadId}/orders/actions (src/components/sidebar/customer-sidebar.tsx:906)", "shortDescription": {"text": "Dangling fetch: POST /api/threads/${threadId}/orders/actions (src/components/sidebar/customer-sidebar.tsx:906)"}, "fullDescription": {"text": "`src/components/sidebar/customer-sidebar.tsx:906` calls `POST /api/threads/${threadId}/orders/actions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/threads/<p>/orders/actions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7cfe1022d332c893", "name": "Dangling fetch: POST /api/threads/${threadId}/messages (src/components/sidebar/customer-sidebar.tsx:936)", "shortDescription": {"text": "Dangling fetch: POST /api/threads/${threadId}/messages (src/components/sidebar/customer-sidebar.tsx:936)"}, "fullDescription": {"text": "`src/components/sidebar/customer-sidebar.tsx:936` calls `POST /api/threads/${threadId}/messages` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/threads/<p>/messages`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b6c1905ba2c079b7", "name": "Dangling fetch: POST /api/threads/${threadId}/orders/actions (src/components/sidebar/customer-sidebar.tsx:1476)", "shortDescription": {"text": "Dangling fetch: POST /api/threads/${threadId}/orders/actions (src/components/sidebar/customer-sidebar.tsx:1476)"}, "fullDescription": {"text": "`src/components/sidebar/customer-sidebar.tsx:1476` calls `POST /api/threads/${threadId}/orders/actions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/threads/<p>/orders/actions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-aeea55547ab99f93", "name": "Dangling fetch: POST /api/threads/${threadId}/orders/actions (src/components/sidebar/customer-sidebar.tsx:1555)", "shortDescription": {"text": "Dangling fetch: POST /api/threads/${threadId}/orders/actions (src/components/sidebar/customer-sidebar.tsx:1555)"}, "fullDescription": {"text": "`src/components/sidebar/customer-sidebar.tsx:1555` calls `POST /api/threads/${threadId}/orders/actions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/threads/<p>/orders/actions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bf40f4cbd76c370d", "name": "Dangling fetch: POST /api/threads/${threadId}/orders/actions (src/components/sidebar/customer-sidebar.tsx:1595)", "shortDescription": {"text": "Dangling fetch: POST /api/threads/${threadId}/orders/actions (src/components/sidebar/customer-sidebar.tsx:1595)"}, "fullDescription": {"text": "`src/components/sidebar/customer-sidebar.tsx:1595` calls `POST /api/threads/${threadId}/orders/actions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/threads/<p>/orders/actions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f99d080a7cff3d3d", "name": "Dangling fetch: POST /api/tracking (src/components/sidebar/customer-sidebar.tsx:1632)", "shortDescription": {"text": "Dangling fetch: POST /api/tracking (src/components/sidebar/customer-sidebar.tsx:1632)"}, "fullDescription": {"text": "`src/components/sidebar/customer-sidebar.tsx:1632` calls `POST /api/tracking` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tracking`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2cc77c002b0b3c52", "name": "Dangling fetch: POST /api/threads/${threadId}/orders/actions (src/components/sidebar/customer-sidebar.tsx:1697)", "shortDescription": {"text": "Dangling fetch: POST /api/threads/${threadId}/orders/actions (src/components/sidebar/customer-sidebar.tsx:1697)"}, "fullDescription": {"text": "`src/components/sidebar/customer-sidebar.tsx:1697` calls `POST /api/threads/${threadId}/orders/actions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/threads/<p>/orders/actions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5d3863168150b764", "name": "Dangling fetch: POST /api/threads/${threadId}/orders/actions (src/components/sidebar/customer-sidebar.tsx:1818)", "shortDescription": {"text": "Dangling fetch: POST /api/threads/${threadId}/orders/actions (src/components/sidebar/customer-sidebar.tsx:1818)"}, "fullDescription": {"text": "`src/components/sidebar/customer-sidebar.tsx:1818` calls `POST /api/threads/${threadId}/orders/actions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/threads/<p>/orders/actions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-62fad8867cdabbbf", "name": "Dangling fetch: POST /api/threads/${threadId}/orders/actions (src/components/sidebar/customer-sidebar.tsx:1933)", "shortDescription": {"text": "Dangling fetch: POST /api/threads/${threadId}/orders/actions (src/components/sidebar/customer-sidebar.tsx:1933)"}, "fullDescription": {"text": "`src/components/sidebar/customer-sidebar.tsx:1933` calls `POST /api/threads/${threadId}/orders/actions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/threads/<p>/orders/actions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b02ace347c1cd0d4", "name": "Dangling fetch: POST /api/threads/${threadId}/orders/actions (src/components/sidebar/customer-sidebar.tsx:1974)", "shortDescription": {"text": "Dangling fetch: POST /api/threads/${threadId}/orders/actions (src/components/sidebar/customer-sidebar.tsx:1974)"}, "fullDescription": {"text": "`src/components/sidebar/customer-sidebar.tsx:1974` calls `POST /api/threads/${threadId}/orders/actions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/threads/<p>/orders/actions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ac72af6de2b5a7c5", "name": "Dangling fetch: POST /api/threads/${threadId}/orders/actions (src/components/sidebar/customer-sidebar.tsx:2013)", "shortDescription": {"text": "Dangling fetch: POST /api/threads/${threadId}/orders/actions (src/components/sidebar/customer-sidebar.tsx:2013)"}, "fullDescription": {"text": "`src/components/sidebar/customer-sidebar.tsx:2013` calls `POST /api/threads/${threadId}/orders/actions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/threads/<p>/orders/actions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b4c6f86876dda534", "name": "Dangling fetch: POST /api/threads/${threadId}/orders/actions (src/components/sidebar/customer-sidebar.tsx:2374)", "shortDescription": {"text": "Dangling fetch: POST /api/threads/${threadId}/orders/actions (src/components/sidebar/customer-sidebar.tsx:2374)"}, "fullDescription": {"text": "`src/components/sidebar/customer-sidebar.tsx:2374` calls `POST /api/threads/${threadId}/orders/actions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/threads/<p>/orders/actions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a3efe01f9409bdbb", "name": "Dangling fetch: GET /api/shopify/products/${encodeURIComponent(product.id)}/variants (src/components/sidebar/customer-si", "shortDescription": {"text": "Dangling fetch: GET /api/shopify/products/${encodeURIComponent(product.id)}/variants (src/components/sidebar/customer-sidebar.tsx:2565)"}, "fullDescription": {"text": "`src/components/sidebar/customer-sidebar.tsx:2565` calls `GET /api/shopify/products/${encodeURIComponent(product.id)}/variants` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/shopify/products/<p>/variants`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4bbd430b8cf6d8ea", "name": "Dangling fetch: POST /api/threads/${threadId}/orders/actions (src/components/sidebar/customer-sidebar.tsx:2718)", "shortDescription": {"text": "Dangling fetch: POST /api/threads/${threadId}/orders/actions (src/components/sidebar/customer-sidebar.tsx:2718)"}, "fullDescription": {"text": "`src/components/sidebar/customer-sidebar.tsx:2718` calls `POST /api/threads/${threadId}/orders/actions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/threads/<p>/orders/actions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2cb07b597b1c007e", "name": "Dangling fetch: GET /api/shopify/products/${encodeURIComponent(product.id)}/variants (src/components/sidebar/customer-si", "shortDescription": {"text": "Dangling fetch: GET /api/shopify/products/${encodeURIComponent(product.id)}/variants (src/components/sidebar/customer-sidebar.tsx:2803)"}, "fullDescription": {"text": "`src/components/sidebar/customer-sidebar.tsx:2803` calls `GET /api/shopify/products/${encodeURIComponent(product.id)}/variants` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/shopify/products/<p>/variants`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9e640b0d2d13cd3d", "name": "Dangling fetch: POST https://accounts.zoho.${dc}/oauth/v2/token (src/app/api/admin/integrations/route.ts:249)", "shortDescription": {"text": "Dangling fetch: POST https://accounts.zoho.${dc}/oauth/v2/token (src/app/api/admin/integrations/route.ts:249)"}, "fullDescription": {"text": "`src/app/api/admin/integrations/route.ts:249` calls `POST https://accounts.zoho.${dc}/oauth/v2/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:/accounts.zoho./<p>/oauth/v2/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-cbc3d9cf1c5f14a6", "name": "Dangling fetch: GET /api/profile (src/app/(dashboard)/settings/page.tsx:58)", "shortDescription": {"text": "Dangling fetch: GET /api/profile (src/app/(dashboard)/settings/page.tsx:58)"}, "fullDescription": {"text": "`src/app/(dashboard)/settings/page.tsx:58` calls `GET /api/profile` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/profile`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cc00d18217d5c6ae", "name": "Dangling fetch: GET /api/settings (src/app/(dashboard)/settings/page.tsx:68)", "shortDescription": {"text": "Dangling fetch: GET /api/settings (src/app/(dashboard)/settings/page.tsx:68)"}, "fullDescription": {"text": "`src/app/(dashboard)/settings/page.tsx:68` calls `GET /api/settings` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/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-efe0f95bbf20e391", "name": "Dangling fetch: PUT /api/profile (src/app/(dashboard)/settings/page.tsx:97)", "shortDescription": {"text": "Dangling fetch: PUT /api/profile (src/app/(dashboard)/settings/page.tsx:97)"}, "fullDescription": {"text": "`src/app/(dashboard)/settings/page.tsx:97` calls `PUT /api/profile` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/profile`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d5cf0c5158eb083a", "name": "Dangling fetch: PUT /api/profile/password (src/app/(dashboard)/settings/page.tsx:115)", "shortDescription": {"text": "Dangling fetch: PUT /api/profile/password (src/app/(dashboard)/settings/page.tsx:115)"}, "fullDescription": {"text": "`src/app/(dashboard)/settings/page.tsx:115` calls `PUT /api/profile/password` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/profile/password`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e7c4d02fbbde7c15", "name": "Dangling fetch: POST /api/profile/avatar (src/app/(dashboard)/settings/page.tsx:137)", "shortDescription": {"text": "Dangling fetch: POST /api/profile/avatar (src/app/(dashboard)/settings/page.tsx:137)"}, "fullDescription": {"text": "`src/app/(dashboard)/settings/page.tsx:137` calls `POST /api/profile/avatar` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/profile/avatar`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fa2ff2b80d393657", "name": "Dangling fetch: DELETE /api/profile/avatar (src/app/(dashboard)/settings/page.tsx:154)", "shortDescription": {"text": "Dangling fetch: DELETE /api/profile/avatar (src/app/(dashboard)/settings/page.tsx:154)"}, "fullDescription": {"text": "`src/app/(dashboard)/settings/page.tsx:154` calls `DELETE /api/profile/avatar` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/profile/avatar`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-29ea3062d85762b4", "name": "Dangling fetch: PUT /api/settings (src/app/(dashboard)/settings/page.tsx:168)", "shortDescription": {"text": "Dangling fetch: PUT /api/settings (src/app/(dashboard)/settings/page.tsx:168)"}, "fullDescription": {"text": "`src/app/(dashboard)/settings/page.tsx:168` calls `PUT /api/settings` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/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-942422bab348ae92", "name": "Dangling fetch: GET /api/admin/backup (src/app/(dashboard)/settings/page.tsx:188)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/backup (src/app/(dashboard)/settings/page.tsx:188)"}, "fullDescription": {"text": "`src/app/(dashboard)/settings/page.tsx:188` calls `GET /api/admin/backup` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/backup`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1ad44dc0cb3cbac9", "name": "Dangling fetch: POST /api/admin/backup (src/app/(dashboard)/settings/page.tsx:202)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/backup (src/app/(dashboard)/settings/page.tsx:202)"}, "fullDescription": {"text": "`src/app/(dashboard)/settings/page.tsx:202` calls `POST /api/admin/backup` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/backup`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6aab2e34da266fb3", "name": "Dangling fetch: POST /api/admin/backup/restore (src/app/(dashboard)/settings/page.tsx:216)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/backup/restore (src/app/(dashboard)/settings/page.tsx:216)"}, "fullDescription": {"text": "`src/app/(dashboard)/settings/page.tsx:216` calls `POST /api/admin/backup/restore` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/backup/restore`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-035a9429cac44bd4", "name": "Dangling fetch: DELETE /api/admin/backup?id=${encodeURIComponent(id)} (src/app/(dashboard)/settings/page.tsx:236)", "shortDescription": {"text": "Dangling fetch: DELETE /api/admin/backup?id=${encodeURIComponent(id)} (src/app/(dashboard)/settings/page.tsx:236)"}, "fullDescription": {"text": "`src/app/(dashboard)/settings/page.tsx:236` calls `DELETE /api/admin/backup?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/backup`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-81e4e98281e289df", "name": "Dangling fetch: GET /api/needs-attention (src/app/(dashboard)/needs-attention/page.tsx:34)", "shortDescription": {"text": "Dangling fetch: GET /api/needs-attention (src/app/(dashboard)/needs-attention/page.tsx:34)"}, "fullDescription": {"text": "`src/app/(dashboard)/needs-attention/page.tsx:34` calls `GET /api/needs-attention` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/needs-attention`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c55e2278f967f057", "name": "Dangling fetch: POST /api/needs-attention (src/app/(dashboard)/needs-attention/page.tsx:43)", "shortDescription": {"text": "Dangling fetch: POST /api/needs-attention (src/app/(dashboard)/needs-attention/page.tsx:43)"}, "fullDescription": {"text": "`src/app/(dashboard)/needs-attention/page.tsx:43` calls `POST /api/needs-attention` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/needs-attention`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-65bff092dd0ecb91", "name": "Dangling fetch: GET /api/design-ideas (src/app/(dashboard)/design-ideas/page.tsx:31)", "shortDescription": {"text": "Dangling fetch: GET /api/design-ideas (src/app/(dashboard)/design-ideas/page.tsx:31)"}, "fullDescription": {"text": "`src/app/(dashboard)/design-ideas/page.tsx:31` calls `GET /api/design-ideas` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/design-ideas`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1fbea970448238d0", "name": "Dangling fetch: POST /api/design-ideas (src/app/(dashboard)/design-ideas/page.tsx:39)", "shortDescription": {"text": "Dangling fetch: POST /api/design-ideas (src/app/(dashboard)/design-ideas/page.tsx:39)"}, "fullDescription": {"text": "`src/app/(dashboard)/design-ideas/page.tsx:39` calls `POST /api/design-ideas` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/design-ideas`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8d66f4fe594c09cf", "name": "Dangling fetch: DELETE /api/design-ideas/${id} (src/app/(dashboard)/design-ideas/page.tsx:55)", "shortDescription": {"text": "Dangling fetch: DELETE /api/design-ideas/${id} (src/app/(dashboard)/design-ideas/page.tsx:55)"}, "fullDescription": {"text": "`src/app/(dashboard)/design-ideas/page.tsx:55` calls `DELETE /api/design-ideas/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/design-ideas/<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-7c73d9c5ea15c216", "name": "Dangling fetch: GET /api/threads?status=TRASHED (src/app/(dashboard)/trash/page.tsx:42)", "shortDescription": {"text": "Dangling fetch: GET /api/threads?status=TRASHED (src/app/(dashboard)/trash/page.tsx:42)"}, "fullDescription": {"text": "`src/app/(dashboard)/trash/page.tsx:42` calls `GET /api/threads?status=TRASHED` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/threads`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fa9b4a4103f0426f", "name": "Dangling fetch: POST /api/threads/bulk (src/app/(dashboard)/trash/page.tsx:55)", "shortDescription": {"text": "Dangling fetch: POST /api/threads/bulk (src/app/(dashboard)/trash/page.tsx:55)"}, "fullDescription": {"text": "`src/app/(dashboard)/trash/page.tsx:55` calls `POST /api/threads/bulk` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/threads/bulk`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8150d57d27257f64", "name": "Dangling fetch: POST /api/threads/bulk (src/app/(dashboard)/trash/page.tsx:75)", "shortDescription": {"text": "Dangling fetch: POST /api/threads/bulk (src/app/(dashboard)/trash/page.tsx:75)"}, "fullDescription": {"text": "`src/app/(dashboard)/trash/page.tsx:75` calls `POST /api/threads/bulk` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/threads/bulk`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a8c3a37ff2817df3", "name": "Dangling fetch: GET /api/insights/support?days=${days} (src/app/(dashboard)/insights/page.tsx:173)", "shortDescription": {"text": "Dangling fetch: GET /api/insights/support?days=${days} (src/app/(dashboard)/insights/page.tsx:173)"}, "fullDescription": {"text": "`src/app/(dashboard)/insights/page.tsx:173` calls `GET /api/insights/support?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: `/insights/support`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d9de476a0c7271e2", "name": "Dangling fetch: GET /api/reviews/${review.id}/reply (src/app/(dashboard)/reviews/page.tsx:98)", "shortDescription": {"text": "Dangling fetch: GET /api/reviews/${review.id}/reply (src/app/(dashboard)/reviews/page.tsx:98)"}, "fullDescription": {"text": "`src/app/(dashboard)/reviews/page.tsx:98` calls `GET /api/reviews/${review.id}/reply` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/reviews/<p>/reply`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e837a88644938f90", "name": "Dangling fetch: POST /api/reviews/${review.id}/visibility (src/app/(dashboard)/reviews/page.tsx:118)", "shortDescription": {"text": "Dangling fetch: POST /api/reviews/${review.id}/visibility (src/app/(dashboard)/reviews/page.tsx:118)"}, "fullDescription": {"text": "`src/app/(dashboard)/reviews/page.tsx:118` calls `POST /api/reviews/${review.id}/visibility` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/reviews/<p>/visibility`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-60b31b93d0e99a9a", "name": "Dangling fetch: POST /api/reviews/${draft.reviewId}/reply (src/app/(dashboard)/reviews/page.tsx:377)", "shortDescription": {"text": "Dangling fetch: POST /api/reviews/${draft.reviewId}/reply (src/app/(dashboard)/reviews/page.tsx:377)"}, "fullDescription": {"text": "`src/app/(dashboard)/reviews/page.tsx:377` calls `POST /api/reviews/${draft.reviewId}/reply` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/reviews/<p>/reply`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5d0df0aa79a6262a", "name": "Dangling fetch: POST /api/reviews/${draft.reviewId}/visibility (src/app/(dashboard)/reviews/page.tsx:393)", "shortDescription": {"text": "Dangling fetch: POST /api/reviews/${draft.reviewId}/visibility (src/app/(dashboard)/reviews/page.tsx:393)"}, "fullDescription": {"text": "`src/app/(dashboard)/reviews/page.tsx:393` calls `POST /api/reviews/${draft.reviewId}/visibility` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/reviews/<p>/visibility`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d124ebbfd133f86c", "name": "Dangling fetch: POST /api/reviews/attention/dismiss (src/app/(dashboard)/reviews/page.tsx:409)", "shortDescription": {"text": "Dangling fetch: POST /api/reviews/attention/dismiss (src/app/(dashboard)/reviews/page.tsx:409)"}, "fullDescription": {"text": "`src/app/(dashboard)/reviews/page.tsx:409` calls `POST /api/reviews/attention/dismiss` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/reviews/attention/dismiss`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7b77a72bde97c15d", "name": "Dangling fetch: GET /api/reviews/attention (src/app/(dashboard)/reviews/page.tsx:526)", "shortDescription": {"text": "Dangling fetch: GET /api/reviews/attention (src/app/(dashboard)/reviews/page.tsx:526)"}, "fullDescription": {"text": "`src/app/(dashboard)/reviews/page.tsx:526` calls `GET /api/reviews/attention` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/reviews/attention`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-aee65e680e276470", "name": "Dangling fetch: GET /api/reviews?${params} (src/app/(dashboard)/reviews/page.tsx:559)", "shortDescription": {"text": "Dangling fetch: GET /api/reviews?${params} (src/app/(dashboard)/reviews/page.tsx:559)"}, "fullDescription": {"text": "`src/app/(dashboard)/reviews/page.tsx:559` calls `GET /api/reviews?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/reviews`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b2e6fe856f304bdd", "name": "Dangling fetch: GET /api/admin/integrations (src/app/(dashboard)/admin/integrations/page.tsx:105)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/integrations (src/app/(dashboard)/admin/integrations/page.tsx:105)"}, "fullDescription": {"text": "`src/app/(dashboard)/admin/integrations/page.tsx:105` calls `GET /api/admin/integrations` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/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-71e23dfd16b16aef", "name": "Dangling fetch: GET /api/admin/printify/sync (src/app/(dashboard)/admin/integrations/page.tsx:117)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/printify/sync (src/app/(dashboard)/admin/integrations/page.tsx:117)"}, "fullDescription": {"text": "`src/app/(dashboard)/admin/integrations/page.tsx:117` calls `GET /api/admin/printify/sync` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/printify/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-0d4797adc262cf79", "name": "Dangling fetch: POST /api/admin/integrations (src/app/(dashboard)/admin/integrations/page.tsx:134)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/integrations (src/app/(dashboard)/admin/integrations/page.tsx:134)"}, "fullDescription": {"text": "`src/app/(dashboard)/admin/integrations/page.tsx:134` calls `POST /api/admin/integrations` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/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-6f924303e8e9d47c", "name": "Dangling fetch: POST /api/admin/integrations/test (src/app/(dashboard)/admin/integrations/page.tsx:160)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/integrations/test (src/app/(dashboard)/admin/integrations/page.tsx:160)"}, "fullDescription": {"text": "`src/app/(dashboard)/admin/integrations/page.tsx:160` calls `POST /api/admin/integrations/test` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/integrations/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-ee6cb813218958f4", "name": "Dangling fetch: POST /api/admin/printify/sync (src/app/(dashboard)/admin/integrations/page.tsx:181)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/printify/sync (src/app/(dashboard)/admin/integrations/page.tsx:181)"}, "fullDescription": {"text": "`src/app/(dashboard)/admin/integrations/page.tsx:181` calls `POST /api/admin/printify/sync` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/printify/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-36c08eae33c6c29b", "name": "Dangling fetch: GET /api/assignment-rules (src/app/(dashboard)/admin/automation/assignment-rules-content.tsx:77)", "shortDescription": {"text": "Dangling fetch: GET /api/assignment-rules (src/app/(dashboard)/admin/automation/assignment-rules-content.tsx:77)"}, "fullDescription": {"text": "`src/app/(dashboard)/admin/automation/assignment-rules-content.tsx:77` calls `GET /api/assignment-rules` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/assignment-rules`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-57cf5161bc7be8e3", "name": "Dangling fetch: GET /api/admin/users (src/app/(dashboard)/admin/automation/assignment-rules-content.tsx:87)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/users (src/app/(dashboard)/admin/automation/assignment-rules-content.tsx:87)"}, "fullDescription": {"text": "`src/app/(dashboard)/admin/automation/assignment-rules-content.tsx:87` calls `GET /api/admin/users` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/users`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dec9e332e279267e", "name": "Dangling fetch: GET /api/tags (src/app/(dashboard)/admin/automation/assignment-rules-content.tsx:98)", "shortDescription": {"text": "Dangling fetch: GET /api/tags (src/app/(dashboard)/admin/automation/assignment-rules-content.tsx:98)"}, "fullDescription": {"text": "`src/app/(dashboard)/admin/automation/assignment-rules-content.tsx:98` calls `GET /api/tags` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tags`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a94bbd83a76b98a0", "name": "Dangling fetch: POST /api/assignment-rules (src/app/(dashboard)/admin/automation/assignment-rules-content.tsx:113)", "shortDescription": {"text": "Dangling fetch: POST /api/assignment-rules (src/app/(dashboard)/admin/automation/assignment-rules-content.tsx:113)"}, "fullDescription": {"text": "`src/app/(dashboard)/admin/automation/assignment-rules-content.tsx:113` calls `POST /api/assignment-rules` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/assignment-rules`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a9f75e87b57fc19c", "name": "Dangling fetch: PATCH /api/assignment-rules/${id} (src/app/(dashboard)/admin/automation/assignment-rules-content.tsx:137", "shortDescription": {"text": "Dangling fetch: PATCH /api/assignment-rules/${id} (src/app/(dashboard)/admin/automation/assignment-rules-content.tsx:137)"}, "fullDescription": {"text": "`src/app/(dashboard)/admin/automation/assignment-rules-content.tsx:137` calls `PATCH /api/assignment-rules/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/assignment-rules/<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-2ad191369c21a3c6", "name": "Dangling fetch: DELETE /api/assignment-rules/${id} (src/app/(dashboard)/admin/automation/assignment-rules-content.tsx:15", "shortDescription": {"text": "Dangling fetch: DELETE /api/assignment-rules/${id} (src/app/(dashboard)/admin/automation/assignment-rules-content.tsx:155)"}, "fullDescription": {"text": "`src/app/(dashboard)/admin/automation/assignment-rules-content.tsx:155` calls `DELETE /api/assignment-rules/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/assignment-rules/<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-2ea3f0d4cc97fd9e", "name": "Dangling fetch: GET /api/tags (src/app/(dashboard)/admin/automation/tags-content.tsx:53)", "shortDescription": {"text": "Dangling fetch: GET /api/tags (src/app/(dashboard)/admin/automation/tags-content.tsx:53)"}, "fullDescription": {"text": "`src/app/(dashboard)/admin/automation/tags-content.tsx:53` calls `GET /api/tags` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tags`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9cbc1c2406d0a13d", "name": "Dangling fetch: GET /api/tags/${expandedTag} (src/app/(dashboard)/admin/automation/tags-content.tsx:64)", "shortDescription": {"text": "Dangling fetch: GET /api/tags/${expandedTag} (src/app/(dashboard)/admin/automation/tags-content.tsx:64)"}, "fullDescription": {"text": "`src/app/(dashboard)/admin/automation/tags-content.tsx:64` calls `GET /api/tags/${expandedTag}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tags/<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-c3029a92d513c14a", "name": "Dangling fetch: POST /api/tags (src/app/(dashboard)/admin/automation/tags-content.tsx:75)", "shortDescription": {"text": "Dangling fetch: POST /api/tags (src/app/(dashboard)/admin/automation/tags-content.tsx:75)"}, "fullDescription": {"text": "`src/app/(dashboard)/admin/automation/tags-content.tsx:75` calls `POST /api/tags` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tags`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ec41d3c972297bc2", "name": "Dangling fetch: PATCH /api/tags/${id} (src/app/(dashboard)/admin/automation/tags-content.tsx:96)", "shortDescription": {"text": "Dangling fetch: PATCH /api/tags/${id} (src/app/(dashboard)/admin/automation/tags-content.tsx:96)"}, "fullDescription": {"text": "`src/app/(dashboard)/admin/automation/tags-content.tsx:96` calls `PATCH /api/tags/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tags/<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-d77eb537aebbd26c", "name": "Dangling fetch: DELETE /api/tags/${id} (src/app/(dashboard)/admin/automation/tags-content.tsx:115)", "shortDescription": {"text": "Dangling fetch: DELETE /api/tags/${id} (src/app/(dashboard)/admin/automation/tags-content.tsx:115)"}, "fullDescription": {"text": "`src/app/(dashboard)/admin/automation/tags-content.tsx:115` calls `DELETE /api/tags/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tags/<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-dbe13075c8f12974", "name": "Dangling fetch: POST /api/tag-rules (src/app/(dashboard)/admin/automation/tags-content.tsx:129)", "shortDescription": {"text": "Dangling fetch: POST /api/tag-rules (src/app/(dashboard)/admin/automation/tags-content.tsx:129)"}, "fullDescription": {"text": "`src/app/(dashboard)/admin/automation/tags-content.tsx:129` calls `POST /api/tag-rules` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tag-rules`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fbb025d3d714005d", "name": "Dangling fetch: DELETE /api/tag-rules/${id} (src/app/(dashboard)/admin/automation/tags-content.tsx:149)", "shortDescription": {"text": "Dangling fetch: DELETE /api/tag-rules/${id} (src/app/(dashboard)/admin/automation/tags-content.tsx:149)"}, "fullDescription": {"text": "`src/app/(dashboard)/admin/automation/tags-content.tsx:149` calls `DELETE /api/tag-rules/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tag-rules/<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-87d90d9f2a2af04d", "name": "Dangling fetch: GET /api/filter-rules (src/app/(dashboard)/admin/automation/filters-content.tsx:40)", "shortDescription": {"text": "Dangling fetch: GET /api/filter-rules (src/app/(dashboard)/admin/automation/filters-content.tsx:40)"}, "fullDescription": {"text": "`src/app/(dashboard)/admin/automation/filters-content.tsx:40` calls `GET /api/filter-rules` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/filter-rules`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8dfa7617d1a1c260", "name": "Dangling fetch: POST /api/filter-rules (src/app/(dashboard)/admin/automation/filters-content.tsx:54)", "shortDescription": {"text": "Dangling fetch: POST /api/filter-rules (src/app/(dashboard)/admin/automation/filters-content.tsx:54)"}, "fullDescription": {"text": "`src/app/(dashboard)/admin/automation/filters-content.tsx:54` calls `POST /api/filter-rules` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/filter-rules`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1107dadfb1faee14", "name": "Dangling fetch: PATCH /api/filter-rules/${id} (src/app/(dashboard)/admin/automation/filters-content.tsx:78)", "shortDescription": {"text": "Dangling fetch: PATCH /api/filter-rules/${id} (src/app/(dashboard)/admin/automation/filters-content.tsx:78)"}, "fullDescription": {"text": "`src/app/(dashboard)/admin/automation/filters-content.tsx:78` calls `PATCH /api/filter-rules/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/filter-rules/<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-0f3c483410deab6f", "name": "Dangling fetch: DELETE /api/filter-rules/${id} (src/app/(dashboard)/admin/automation/filters-content.tsx:96)", "shortDescription": {"text": "Dangling fetch: DELETE /api/filter-rules/${id} (src/app/(dashboard)/admin/automation/filters-content.tsx:96)"}, "fullDescription": {"text": "`src/app/(dashboard)/admin/automation/filters-content.tsx:96` calls `DELETE /api/filter-rules/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/filter-rules/<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-495ef627d54da862", "name": "Dangling fetch: PATCH /api/filter-rules/${data.id} (src/app/(dashboard)/admin/automation/filters-content.tsx:115)", "shortDescription": {"text": "Dangling fetch: PATCH /api/filter-rules/${data.id} (src/app/(dashboard)/admin/automation/filters-content.tsx:115)"}, "fullDescription": {"text": "`src/app/(dashboard)/admin/automation/filters-content.tsx:115` calls `PATCH /api/filter-rules/${data.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/filter-rules/<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-99f2f018dec70373", "name": "Dangling fetch: GET /api/admin/users (src/app/(dashboard)/admin/users/page.tsx:44)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/users (src/app/(dashboard)/admin/users/page.tsx:44)"}, "fullDescription": {"text": "`src/app/(dashboard)/admin/users/page.tsx:44` calls `GET /api/admin/users` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/users`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-52ecc466f64e10a4", "name": "Dangling fetch: POST /api/admin/users (src/app/(dashboard)/admin/users/page.tsx:52)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/users (src/app/(dashboard)/admin/users/page.tsx:52)"}, "fullDescription": {"text": "`src/app/(dashboard)/admin/users/page.tsx:52` calls `POST /api/admin/users` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/users`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d7c0faa1964975e5", "name": "Dangling fetch: PATCH /api/admin/users/${id} (src/app/(dashboard)/admin/users/page.tsx:78)", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/users/${id} (src/app/(dashboard)/admin/users/page.tsx:78)"}, "fullDescription": {"text": "`src/app/(dashboard)/admin/users/page.tsx:78` calls `PATCH /api/admin/users/${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/users/<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-72a29c4e78698162", "name": "Dangling fetch: GET /api/sync (src/app/(dashboard)/admin/mailbox/page.tsx:52)", "shortDescription": {"text": "Dangling fetch: GET /api/sync (src/app/(dashboard)/admin/mailbox/page.tsx:52)"}, "fullDescription": {"text": "`src/app/(dashboard)/admin/mailbox/page.tsx:52` calls `GET /api/sync` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/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-1203842d8b587b66", "name": "Dangling fetch: POST /api/sync (src/app/(dashboard)/admin/mailbox/page.tsx:62)", "shortDescription": {"text": "Dangling fetch: POST /api/sync (src/app/(dashboard)/admin/mailbox/page.tsx:62)"}, "fullDescription": {"text": "`src/app/(dashboard)/admin/mailbox/page.tsx:62` calls `POST /api/sync` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/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-46156fdb05042dd9", "name": "Dangling fetch: GET /api/canned-replies (src/app/(dashboard)/admin/canned-replies/page.tsx:29)", "shortDescription": {"text": "Dangling fetch: GET /api/canned-replies (src/app/(dashboard)/admin/canned-replies/page.tsx:29)"}, "fullDescription": {"text": "`src/app/(dashboard)/admin/canned-replies/page.tsx:29` calls `GET /api/canned-replies` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/canned-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-041095a63552061f", "name": "Dangling fetch: POST /api/canned-replies (src/app/(dashboard)/admin/canned-replies/page.tsx:37)", "shortDescription": {"text": "Dangling fetch: POST /api/canned-replies (src/app/(dashboard)/admin/canned-replies/page.tsx:37)"}, "fullDescription": {"text": "`src/app/(dashboard)/admin/canned-replies/page.tsx:37` calls `POST /api/canned-replies` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/canned-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-a490dad806d9aa5c", "name": "Dangling fetch: DELETE /api/canned-replies/${id} (src/app/(dashboard)/admin/canned-replies/page.tsx:53)", "shortDescription": {"text": "Dangling fetch: DELETE /api/canned-replies/${id} (src/app/(dashboard)/admin/canned-replies/page.tsx:53)"}, "fullDescription": {"text": "`src/app/(dashboard)/admin/canned-replies/page.tsx:53` calls `DELETE /api/canned-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: `/canned-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-d1919d8533f592c1", "name": "Dangling fetch: GET /api/assignment-rules (src/app/(dashboard)/admin/rules/page.tsx:107)", "shortDescription": {"text": "Dangling fetch: GET /api/assignment-rules (src/app/(dashboard)/admin/rules/page.tsx:107)"}, "fullDescription": {"text": "`src/app/(dashboard)/admin/rules/page.tsx:107` calls `GET /api/assignment-rules` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/assignment-rules`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9da92f434d2c6484", "name": "Dangling fetch: GET /api/admin/users (src/app/(dashboard)/admin/rules/page.tsx:117)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/users (src/app/(dashboard)/admin/rules/page.tsx:117)"}, "fullDescription": {"text": "`src/app/(dashboard)/admin/rules/page.tsx:117` calls `GET /api/admin/users` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/users`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9d7b9c291c749cb2", "name": "Dangling fetch: GET /api/tags (src/app/(dashboard)/admin/rules/page.tsx:128)", "shortDescription": {"text": "Dangling fetch: GET /api/tags (src/app/(dashboard)/admin/rules/page.tsx:128)"}, "fullDescription": {"text": "`src/app/(dashboard)/admin/rules/page.tsx:128` calls `GET /api/tags` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tags`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-efb307812f5ae793", "name": "Dangling fetch: GET /api/filter-rules (src/app/(dashboard)/admin/rules/page.tsx:138)", "shortDescription": {"text": "Dangling fetch: GET /api/filter-rules (src/app/(dashboard)/admin/rules/page.tsx:138)"}, "fullDescription": {"text": "`src/app/(dashboard)/admin/rules/page.tsx:138` calls `GET /api/filter-rules` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/filter-rules`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a30e660bb56da22d", "name": "Dangling fetch: POST /api/assignment-rules (src/app/(dashboard)/admin/rules/page.tsx:153)", "shortDescription": {"text": "Dangling fetch: POST /api/assignment-rules (src/app/(dashboard)/admin/rules/page.tsx:153)"}, "fullDescription": {"text": "`src/app/(dashboard)/admin/rules/page.tsx:153` calls `POST /api/assignment-rules` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/assignment-rules`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a23a6767543e2173", "name": "Dangling fetch: PATCH /api/assignment-rules/${id} (src/app/(dashboard)/admin/rules/page.tsx:177)", "shortDescription": {"text": "Dangling fetch: PATCH /api/assignment-rules/${id} (src/app/(dashboard)/admin/rules/page.tsx:177)"}, "fullDescription": {"text": "`src/app/(dashboard)/admin/rules/page.tsx:177` calls `PATCH /api/assignment-rules/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/assignment-rules/<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-e593459d29dc928d", "name": "Dangling fetch: DELETE /api/assignment-rules/${id} (src/app/(dashboard)/admin/rules/page.tsx:195)", "shortDescription": {"text": "Dangling fetch: DELETE /api/assignment-rules/${id} (src/app/(dashboard)/admin/rules/page.tsx:195)"}, "fullDescription": {"text": "`src/app/(dashboard)/admin/rules/page.tsx:195` calls `DELETE /api/assignment-rules/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/assignment-rules/<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-2e12af8e8a84b46a", "name": "Dangling fetch: POST /api/filter-rules (src/app/(dashboard)/admin/rules/page.tsx:216)", "shortDescription": {"text": "Dangling fetch: POST /api/filter-rules (src/app/(dashboard)/admin/rules/page.tsx:216)"}, "fullDescription": {"text": "`src/app/(dashboard)/admin/rules/page.tsx:216` calls `POST /api/filter-rules` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/filter-rules`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-405699636b6d9c38", "name": "Dangling fetch: PATCH /api/filter-rules/${id} (src/app/(dashboard)/admin/rules/page.tsx:240)", "shortDescription": {"text": "Dangling fetch: PATCH /api/filter-rules/${id} (src/app/(dashboard)/admin/rules/page.tsx:240)"}, "fullDescription": {"text": "`src/app/(dashboard)/admin/rules/page.tsx:240` calls `PATCH /api/filter-rules/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/filter-rules/<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-318fa0213159b99f", "name": "Dangling fetch: DELETE /api/filter-rules/${id} (src/app/(dashboard)/admin/rules/page.tsx:258)", "shortDescription": {"text": "Dangling fetch: DELETE /api/filter-rules/${id} (src/app/(dashboard)/admin/rules/page.tsx:258)"}, "fullDescription": {"text": "`src/app/(dashboard)/admin/rules/page.tsx:258` calls `DELETE /api/filter-rules/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/filter-rules/<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-a6de5a4550b53d0f", "name": "Dangling fetch: PATCH /api/filter-rules/${data.id} (src/app/(dashboard)/admin/rules/page.tsx:279)", "shortDescription": {"text": "Dangling fetch: PATCH /api/filter-rules/${data.id} (src/app/(dashboard)/admin/rules/page.tsx:279)"}, "fullDescription": {"text": "`src/app/(dashboard)/admin/rules/page.tsx:279` calls `PATCH /api/filter-rules/${data.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/filter-rules/<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-a82cd93a4c9ae70a", "name": "Dangling fetch: GET /api/admin/activity (src/app/(dashboard)/admin/activity/page.tsx:40)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/activity (src/app/(dashboard)/admin/activity/page.tsx:40)"}, "fullDescription": {"text": "`src/app/(dashboard)/admin/activity/page.tsx:40` calls `GET /api/admin/activity` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/activity`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ea3903c1373ceb50", "name": "Dangling fetch: GET /api/social/auth (src/app/(dashboard)/admin/social/page.tsx:46)", "shortDescription": {"text": "Dangling fetch: GET /api/social/auth (src/app/(dashboard)/admin/social/page.tsx:46)"}, "fullDescription": {"text": "`src/app/(dashboard)/admin/social/page.tsx:46` calls `GET /api/social/auth` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/social/auth`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1dab094c61909175", "name": "Dangling fetch: GET /api/social/accounts (src/app/(dashboard)/admin/social/page.tsx:56)", "shortDescription": {"text": "Dangling fetch: GET /api/social/accounts (src/app/(dashboard)/admin/social/page.tsx:56)"}, "fullDescription": {"text": "`src/app/(dashboard)/admin/social/page.tsx:56` calls `GET /api/social/accounts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/social/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-077ece18d5772625", "name": "Dangling fetch: GET /api/social/rules (src/app/(dashboard)/admin/social/page.tsx:67)", "shortDescription": {"text": "Dangling fetch: GET /api/social/rules (src/app/(dashboard)/admin/social/page.tsx:67)"}, "fullDescription": {"text": "`src/app/(dashboard)/admin/social/page.tsx:67` calls `GET /api/social/rules` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/social/rules`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5176e65cc52eebdb", "name": "Dangling fetch: DELETE /api/social/auth (src/app/(dashboard)/admin/social/page.tsx:76)", "shortDescription": {"text": "Dangling fetch: DELETE /api/social/auth (src/app/(dashboard)/admin/social/page.tsx:76)"}, "fullDescription": {"text": "`src/app/(dashboard)/admin/social/page.tsx:76` calls `DELETE /api/social/auth` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/social/auth`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6c16e12ed98a75db", "name": "Dangling fetch: POST /api/social/sync (src/app/(dashboard)/admin/social/page.tsx:88)", "shortDescription": {"text": "Dangling fetch: POST /api/social/sync (src/app/(dashboard)/admin/social/page.tsx:88)"}, "fullDescription": {"text": "`src/app/(dashboard)/admin/social/page.tsx:88` calls `POST /api/social/sync` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/social/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-3daac501e98d856f", "name": "Dangling fetch: PATCH /api/social/accounts (src/app/(dashboard)/admin/social/page.tsx:107)", "shortDescription": {"text": "Dangling fetch: PATCH /api/social/accounts (src/app/(dashboard)/admin/social/page.tsx:107)"}, "fullDescription": {"text": "`src/app/(dashboard)/admin/social/page.tsx:107` calls `PATCH /api/social/accounts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/social/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-58a0c9bfe4d5808a", "name": "Dangling fetch: DELETE /api/social/rules/${ruleId} (src/app/(dashboard)/admin/social/page.tsx:122)", "shortDescription": {"text": "Dangling fetch: DELETE /api/social/rules/${ruleId} (src/app/(dashboard)/admin/social/page.tsx:122)"}, "fullDescription": {"text": "`src/app/(dashboard)/admin/social/page.tsx:122` calls `DELETE /api/social/rules/${ruleId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/social/rules/<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-3407285f623b88a0", "name": "Dangling fetch: PATCH /api/social/rules/${ruleId} (src/app/(dashboard)/admin/social/page.tsx:133)", "shortDescription": {"text": "Dangling fetch: PATCH /api/social/rules/${ruleId} (src/app/(dashboard)/admin/social/page.tsx:133)"}, "fullDescription": {"text": "`src/app/(dashboard)/admin/social/page.tsx:133` calls `PATCH /api/social/rules/${ruleId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/social/rules/<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-fae948b7909ca47b", "name": "Dangling fetch: GET /api/social/auth?action=auth_url (src/app/(dashboard)/admin/social/page.tsx:150)", "shortDescription": {"text": "Dangling fetch: GET /api/social/auth?action=auth_url (src/app/(dashboard)/admin/social/page.tsx:150)"}, "fullDescription": {"text": "`src/app/(dashboard)/admin/social/page.tsx:150` calls `GET /api/social/auth?action=auth_url` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/social/auth`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-55b50f72b99acd57", "name": "Dangling fetch: POST /api/social/auth (src/app/(dashboard)/admin/social/page.tsx:177)", "shortDescription": {"text": "Dangling fetch: POST /api/social/auth (src/app/(dashboard)/admin/social/page.tsx:177)"}, "fullDescription": {"text": "`src/app/(dashboard)/admin/social/page.tsx:177` calls `POST /api/social/auth` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/social/auth`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bec6fc93bb719ad6", "name": "Dangling fetch: POST /api/social/auth (src/app/(dashboard)/admin/social/page.tsx:221)", "shortDescription": {"text": "Dangling fetch: POST /api/social/auth (src/app/(dashboard)/admin/social/page.tsx:221)"}, "fullDescription": {"text": "`src/app/(dashboard)/admin/social/page.tsx:221` calls `POST /api/social/auth` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/social/auth`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1d5f46999e483b9c", "name": "Dangling fetch: POST /api/admin/meta-data-deletion (src/app/(dashboard)/admin/social/page.tsx:637)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/meta-data-deletion (src/app/(dashboard)/admin/social/page.tsx:637)"}, "fullDescription": {"text": "`src/app/(dashboard)/admin/social/page.tsx:637` calls `POST /api/admin/meta-data-deletion` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/meta-data-deletion`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cde083c4a26a3746", "name": "Dangling fetch: GET /api/tags (src/app/(dashboard)/admin/tags/page.tsx:66)", "shortDescription": {"text": "Dangling fetch: GET /api/tags (src/app/(dashboard)/admin/tags/page.tsx:66)"}, "fullDescription": {"text": "`src/app/(dashboard)/admin/tags/page.tsx:66` calls `GET /api/tags` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tags`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d36955f8bb965487", "name": "Dangling fetch: GET /api/tags/${expandedTag} (src/app/(dashboard)/admin/tags/page.tsx:78)", "shortDescription": {"text": "Dangling fetch: GET /api/tags/${expandedTag} (src/app/(dashboard)/admin/tags/page.tsx:78)"}, "fullDescription": {"text": "`src/app/(dashboard)/admin/tags/page.tsx:78` calls `GET /api/tags/${expandedTag}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tags/<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-bcace945930cc1fe", "name": "Dangling fetch: POST /api/tags (src/app/(dashboard)/admin/tags/page.tsx:89)", "shortDescription": {"text": "Dangling fetch: POST /api/tags (src/app/(dashboard)/admin/tags/page.tsx:89)"}, "fullDescription": {"text": "`src/app/(dashboard)/admin/tags/page.tsx:89` calls `POST /api/tags` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tags`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ff561b0e5d634bd7", "name": "Dangling fetch: PATCH /api/tags/${id} (src/app/(dashboard)/admin/tags/page.tsx:110)", "shortDescription": {"text": "Dangling fetch: PATCH /api/tags/${id} (src/app/(dashboard)/admin/tags/page.tsx:110)"}, "fullDescription": {"text": "`src/app/(dashboard)/admin/tags/page.tsx:110` calls `PATCH /api/tags/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tags/<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-9cc0ea4e79ed0b6a", "name": "Dangling fetch: DELETE /api/tags/${id} (src/app/(dashboard)/admin/tags/page.tsx:129)", "shortDescription": {"text": "Dangling fetch: DELETE /api/tags/${id} (src/app/(dashboard)/admin/tags/page.tsx:129)"}, "fullDescription": {"text": "`src/app/(dashboard)/admin/tags/page.tsx:129` calls `DELETE /api/tags/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tags/<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-15689a5ed2009d84", "name": "Dangling fetch: POST /api/tag-rules (src/app/(dashboard)/admin/tags/page.tsx:145)", "shortDescription": {"text": "Dangling fetch: POST /api/tag-rules (src/app/(dashboard)/admin/tags/page.tsx:145)"}, "fullDescription": {"text": "`src/app/(dashboard)/admin/tags/page.tsx:145` calls `POST /api/tag-rules` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tag-rules`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7521af8aa6fb592c", "name": "Dangling fetch: DELETE /api/tag-rules/${id} (src/app/(dashboard)/admin/tags/page.tsx:165)", "shortDescription": {"text": "Dangling fetch: DELETE /api/tag-rules/${id} (src/app/(dashboard)/admin/tags/page.tsx:165)"}, "fullDescription": {"text": "`src/app/(dashboard)/admin/tags/page.tsx:165` calls `DELETE /api/tag-rules/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tag-rules/<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-64ea7be8c06dd72e", "name": "Dangling fetch: GET /api/social/comments?status=NEW,IN_PROGRESS,ESCALATED&limit=1 (src/app/(dashboard)/social/page.tsx:3", "shortDescription": {"text": "Dangling fetch: GET /api/social/comments?status=NEW,IN_PROGRESS,ESCALATED&limit=1 (src/app/(dashboard)/social/page.tsx:39)"}, "fullDescription": {"text": "`src/app/(dashboard)/social/page.tsx:39` calls `GET /api/social/comments?status=NEW,IN_PROGRESS,ESCALATED&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: `/social/comments`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ba326ab4c818c94a", "name": "Dangling fetch: GET /api/social/comments?status=DONE&limit=1 (src/app/(dashboard)/social/page.tsx:42)", "shortDescription": {"text": "Dangling fetch: GET /api/social/comments?status=DONE&limit=1 (src/app/(dashboard)/social/page.tsx:42)"}, "fullDescription": {"text": "`src/app/(dashboard)/social/page.tsx:42` calls `GET /api/social/comments?status=DONE&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: `/social/comments`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b5ff1f1ff074c507", "name": "Dangling fetch: GET /api/social/conversations (src/app/(dashboard)/social/page.tsx:56)", "shortDescription": {"text": "Dangling fetch: GET /api/social/conversations (src/app/(dashboard)/social/page.tsx:56)"}, "fullDescription": {"text": "`src/app/(dashboard)/social/page.tsx:56` calls `GET /api/social/conversations` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/social/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-908db284f2ea334c", "name": "Dangling fetch: GET /api/social/auth (src/app/(dashboard)/social/page.tsx:71)", "shortDescription": {"text": "Dangling fetch: GET /api/social/auth (src/app/(dashboard)/social/page.tsx:71)"}, "fullDescription": {"text": "`src/app/(dashboard)/social/page.tsx:71` calls `GET /api/social/auth` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/social/auth`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-644432c0583f613b", "name": "Dangling fetch: GET /api/social/sync (src/app/(dashboard)/social/page.tsx:81)", "shortDescription": {"text": "Dangling fetch: GET /api/social/sync (src/app/(dashboard)/social/page.tsx:81)"}, "fullDescription": {"text": "`src/app/(dashboard)/social/page.tsx:81` calls `GET /api/social/sync` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/social/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-1ab4794d82797caa", "name": "Dangling fetch: POST /api/social/sync (src/app/(dashboard)/social/page.tsx:94)", "shortDescription": {"text": "Dangling fetch: POST /api/social/sync (src/app/(dashboard)/social/page.tsx:94)"}, "fullDescription": {"text": "`src/app/(dashboard)/social/page.tsx:94` calls `POST /api/social/sync` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/social/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-b50031ce3723de40", "name": "Dangling fetch: GET /api/social/comments/${nextId} (src/app/(dashboard)/social/page.tsx:142)", "shortDescription": {"text": "Dangling fetch: GET /api/social/comments/${nextId} (src/app/(dashboard)/social/page.tsx:142)"}, "fullDescription": {"text": "`src/app/(dashboard)/social/page.tsx:142` calls `GET /api/social/comments/${nextId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/social/comments/<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-f6fd0fc69b6171af", "name": "Dangling fetch: POST /api/social/comments/bulk-like (src/app/(dashboard)/social/page.tsx:166)", "shortDescription": {"text": "Dangling fetch: POST /api/social/comments/bulk-like (src/app/(dashboard)/social/page.tsx:166)"}, "fullDescription": {"text": "`src/app/(dashboard)/social/page.tsx:166` calls `POST /api/social/comments/bulk-like` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/social/comments/bulk-like`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-162a605f8274ed7f", "name": "Dangling fetch: POST /api/setup (src/app/setup/page.tsx:20)", "shortDescription": {"text": "Dangling fetch: POST /api/setup (src/app/setup/page.tsx:20)"}, "fullDescription": {"text": "`src/app/setup/page.tsx:20` calls `POST /api/setup` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/setup`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6d5b7b5c7749381e", "name": "Dangling fetch: GET /shops.json (src/lib/printify/client.ts:63)", "shortDescription": {"text": "Dangling fetch: GET /shops.json (src/lib/printify/client.ts:63)"}, "fullDescription": {"text": "`src/lib/printify/client.ts:63` calls `GET /shops.json` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/shops.json`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5420690d638951f7", "name": "Dangling fetch: GET /shops/${this.config.shopId}/webhooks.json (src/lib/printify/client.ts:252)", "shortDescription": {"text": "Dangling fetch: GET /shops/${this.config.shopId}/webhooks.json (src/lib/printify/client.ts:252)"}, "fullDescription": {"text": "`src/lib/printify/client.ts:252` calls `GET /shops/${this.config.shopId}/webhooks.json` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/shops/<p>/webhooks.json`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-af97a216bc4d913c", "name": "Dangling fetch: GET /shops/${this.config.shopId}/products/${productId}.json (src/lib/printify/client.ts:330)", "shortDescription": {"text": "Dangling fetch: GET /shops/${this.config.shopId}/products/${productId}.json (src/lib/printify/client.ts:330)"}, "fullDescription": {"text": "`src/lib/printify/client.ts:330` calls `GET /shops/${this.config.shopId}/products/${productId}.json` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/shops/<p>/products/<p>.json`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-028a66373925f712", "name": "Dangling fetch: GET /catalog/blueprints/${blueprintId}/print_providers.json (src/lib/printify/client.ts:584)", "shortDescription": {"text": "Dangling fetch: GET /catalog/blueprints/${blueprintId}/print_providers.json (src/lib/printify/client.ts:584)"}, "fullDescription": {"text": "`src/lib/printify/client.ts:584` calls `GET /catalog/blueprints/${blueprintId}/print_providers.json` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/catalog/blueprints/<p>/print_providers.json`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bfc8567dc6287ed6", "name": "Dangling fetch: GET /couriers (src/lib/trackingmore/client.ts:402)", "shortDescription": {"text": "Dangling fetch: GET /couriers (src/lib/trackingmore/client.ts:402)"}, "fullDescription": {"text": "`src/lib/trackingmore/client.ts:402` calls `GET /couriers` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/couriers`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c73b9be0cd1a612f", "name": "Dangling fetch: POST https://accounts.zoho.${dataCenter}/oauth/v2/token (src/lib/zoho-mail-api/index.ts:527)", "shortDescription": {"text": "Dangling fetch: POST https://accounts.zoho.${dataCenter}/oauth/v2/token (src/lib/zoho-mail-api/index.ts:527)"}, "fullDescription": {"text": "`src/lib/zoho-mail-api/index.ts:527` calls `POST https://accounts.zoho.${dataCenter}/oauth/v2/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:/accounts.zoho./<p>/oauth/v2/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-e615c636db709852", "name": "Dangling fetch: GET https://api-eu.dhl.com/track/shipments?trackingNumber=${encodeURIComponent(trackingNumber)} (src/lib", "shortDescription": {"text": "Dangling fetch: GET https://api-eu.dhl.com/track/shipments?trackingNumber=${encodeURIComponent(trackingNumber)} (src/lib/tracking/dhl.ts:31)"}, "fullDescription": {"text": "`src/lib/tracking/dhl.ts:31` calls `GET https://api-eu.dhl.com/track/shipments?trackingNumber=${encodeURIComponent(trackingNumber)}` 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-eu.dhl.com/track/shipments`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-82feca46303cc746", "name": "Dangling fetch: POST https://a.klaviyo.com/api/profile-suppression-bulk-create-jobs (src/lib/klaviyo/suppress.ts:33)", "shortDescription": {"text": "Dangling fetch: POST https://a.klaviyo.com/api/profile-suppression-bulk-create-jobs (src/lib/klaviyo/suppress.ts:33)"}, "fullDescription": {"text": "`src/lib/klaviyo/suppress.ts:33` calls `POST https://a.klaviyo.com/api/profile-suppression-bulk-create-jobs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/a.klaviyo.com/api/profile-suppression-bulk-create-jobs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-353746a256220f20", "name": "Dangling fetch: GET /api/sync (src/hooks/use-auto-sync.ts:50)", "shortDescription": {"text": "Dangling fetch: GET /api/sync (src/hooks/use-auto-sync.ts:50)"}, "fullDescription": {"text": "`src/hooks/use-auto-sync.ts:50` calls `GET /api/sync` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/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-1f3042ff191047bd", "name": "Dangling fetch: POST /api/sync (src/hooks/use-auto-sync.ts:67)", "shortDescription": {"text": "Dangling fetch: POST /api/sync (src/hooks/use-auto-sync.ts:67)"}, "fullDescription": {"text": "`src/hooks/use-auto-sync.ts:67` calls `POST /api/sync` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/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-3a911eb1e1eaf83c", "name": "Dangling fetch: POST /api/admin/printify/sync (src/hooks/use-auto-sync.ts:104)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/printify/sync (src/hooks/use-auto-sync.ts:104)"}, "fullDescription": {"text": "`src/hooks/use-auto-sync.ts:104` calls `POST /api/admin/printify/sync` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/printify/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-19a1a46befe3d6a6", "name": "Unused endpoint: DELETE ", "shortDescription": {"text": "Unused endpoint: DELETE "}, "fullDescription": {"text": "`src/app/api/threads/bulk/route.ts` declares `DELETE ` 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/20499"}, "properties": {"repository": "summitsoulbrand-ship-it/support-desk", "repoUrl": "https://github.com/summitsoulbrand-ship-it/support-desk", "branch": "main"}, "results": [{"ruleId": "scanner-cc127d69d14f2314", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/merge-customer-threads.ts:11"}, "properties": {"repobilityId": "9eb91b43529843c4", "scanner": "scanner-primary", "fingerprint": "cc127d69d14f2314", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e8db822338184332", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/create-admin.js:19"}, "properties": {"repobilityId": "855f1b10a3a3072b", "scanner": "scanner-primary", "fingerprint": "e8db822338184332", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9857d65262146678", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-order.ts:16"}, "properties": {"repobilityId": "917de97698320425", "scanner": "scanner-primary", "fingerprint": "9857d65262146678", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b0eff9c822af6447", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-meta-permissions.ts:11"}, "properties": {"repobilityId": "f5846b0280027802", "scanner": "scanner-primary", "fingerprint": "b0eff9c822af6447", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f1f5bc6885f01577", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/diagnose-imap.ts:20"}, "properties": {"repobilityId": "de729a79ef7b3717", "scanner": "scanner-primary", "fingerprint": "f1f5bc6885f01577", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-84f46a78147e6dec", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-webhook-status.ts:19"}, "properties": {"repobilityId": "a8625f3d07df9b5f", "scanner": "scanner-primary", "fingerprint": "84f46a78147e6dec", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-386fa730f2df156e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 prisma/seed.ts:12"}, "properties": {"repobilityId": "f77d7e0fb34b08e2", "scanner": "scanner-primary", "fingerprint": "386fa730f2df156e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b4e842bee02d1883", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard-nav.tsx:359"}, "properties": {"repobilityId": "f233567795a8deb5", "scanner": "scanner-primary", "fingerprint": "b4e842bee02d1883", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-eee2c2b1e42dedcd", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/compose/compose-modal.tsx:223"}, "properties": {"repobilityId": "e70a79bb1da3bb3d", "scanner": "scanner-primary", "fingerprint": "eee2c2b1e42dedcd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-62ea6cf666ee2967", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/thread/thread-view.tsx:1114"}, "properties": {"repobilityId": "7c2e3ec9f307413d", "scanner": "scanner-primary", "fingerprint": "62ea6cf666ee2967", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2f97138e044ed36e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/ui/address-autocomplete.tsx:238"}, "properties": {"repobilityId": "7891023d20e3ca90", "scanner": "scanner-primary", "fingerprint": "2f97138e044ed36e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c82f9ae6a5d0fb28", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/social/conversations-view.tsx:375"}, "properties": {"repobilityId": "ab2c8daa35379918", "scanner": "scanner-primary", "fingerprint": "c82f9ae6a5d0fb28", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9c4adb171afe3d8f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/social/comment-list.tsx:298"}, "properties": {"repobilityId": "872b066b05840a09", "scanner": "scanner-primary", "fingerprint": "9c4adb171afe3d8f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4fc963855bdd8f3c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/inbox/inbox-list.tsx:352"}, "properties": {"repobilityId": "1b099695bf98026d", "scanner": "scanner-primary", "fingerprint": "4fc963855bdd8f3c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-378c551ab0d8d365", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/sidebar/customer-sidebar.tsx:3061"}, "properties": {"repobilityId": "766ce7e299852887", "scanner": "scanner-primary", "fingerprint": "378c551ab0d8d365", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0bebdb04ff5cb778", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/sidebar/customer-sidebar.tsx:2373"}, "properties": {"repobilityId": "0dd44c03c0cb92c5", "scanner": "scanner-primary", "fingerprint": "0bebdb04ff5cb778", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b539b747767dc505", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/threads/compose/route.ts:108"}, "properties": {"repobilityId": "a657a5df297a0a69", "scanner": "scanner-primary", "fingerprint": "b539b747767dc505", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9cfdee73ed6ea6cb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/threads/auto-merge/route.ts:97"}, "properties": {"repobilityId": "1a2e7071e9d22ff8", "scanner": "scanner-primary", "fingerprint": "9cfdee73ed6ea6cb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9ce85708df4fd520", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/integrations/route.ts:247"}, "properties": {"repobilityId": "d535214cfa4305b8", "scanner": "scanner-primary", "fingerprint": "9ce85708df4fd520", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c3457c4a05c98b66", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/backup/route.ts:36"}, "properties": {"repobilityId": "04331c67785ebaa0", "scanner": "scanner-primary", "fingerprint": "c3457c4a05c98b66", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-da087e3d0d8e1cf8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/social/auth/route.ts:45"}, "properties": {"repobilityId": "cac2748a6a49a2c3", "scanner": "scanner-primary", "fingerprint": "da087e3d0d8e1cf8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-db64776c4d13aec4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/social/webhook/route.ts:49"}, "properties": {"repobilityId": "9cabfa75da7bbfa3", "scanner": "scanner-primary", "fingerprint": "db64776c4d13aec4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-431bb4108d53c4ee", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/backup/route.ts:95"}, "properties": {"repobilityId": "2fc6807e6a88876d", "scanner": "scanner-primary", "fingerprint": "431bb4108d53c4ee", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-75afad3f8e1ec37c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/tag-rules/route.ts:192"}, "properties": {"repobilityId": "b1dee2bef42e9521", "scanner": "scanner-primary", "fingerprint": "75afad3f8e1ec37c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0126211b528e5b65", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/trash/page.tsx:194"}, "properties": {"repobilityId": "8a4e68bd42910c5d", "scanner": "scanner-primary", "fingerprint": "0126211b528e5b65", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f1286112eca1cbac", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/reviews/page.tsx:432"}, "properties": {"repobilityId": "33bad65570f64757", "scanner": "scanner-primary", "fingerprint": "f1286112eca1cbac", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9e9b71008ac55e33", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(dashboard)/admin/activity/page.tsx:80"}, "properties": {"repobilityId": "c0b7befed71e9932", "scanner": "scanner-primary", "fingerprint": "9e9b71008ac55e33", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d42d115afd6b7d54", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/(dashboard)/admin/social/page.tsx:169"}, "properties": {"repobilityId": "44f80157bcf5e93a", "scanner": "scanner-primary", "fingerprint": "d42d115afd6b7d54", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6f19976dc29fc3f9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/cache.ts:35"}, "properties": {"repobilityId": "dfa144e3e7990e88", "scanner": "scanner-primary", "fingerprint": "6f19976dc29fc3f9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d8b0656faab44762", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/rules.ts:154"}, "properties": {"repobilityId": "72e30526384c3d5e", "scanner": "scanner-primary", "fingerprint": "d8b0656faab44762", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0f845a72f87b0708", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/printify/relink.ts:359"}, "properties": {"repobilityId": "b767ea739fa7a000", "scanner": "scanner-primary", "fingerprint": "0f845a72f87b0708", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c7a9ca68c1db834b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/email/index.ts:61"}, "properties": {"repobilityId": "36c9f758062716c9", "scanner": "scanner-primary", "fingerprint": "c7a9ca68c1db834b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1316f2bde61a0a62", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/email/zoho-imap-provider.ts:270"}, "properties": {"repobilityId": "a32a1ca4dd753aa7", "scanner": "scanner-primary", "fingerprint": "1316f2bde61a0a62", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-91561e9c12364555", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/email/sync-service.ts:84"}, "properties": {"repobilityId": "1dcef0faa1839bd5", "scanner": "scanner-primary", "fingerprint": "91561e9c12364555", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8a45a16c8e1000f8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/zoho-mail-api/index.ts:93"}, "properties": {"repobilityId": "241343bf5cf5d289", "scanner": "scanner-primary", "fingerprint": "8a45a16c8e1000f8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-295873d7191912a6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/social/rules-engine.ts:170"}, "properties": {"repobilityId": "60ffc9c8d5ad61c6", "scanner": "scanner-primary", "fingerprint": "295873d7191912a6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-936170d99854f677", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/social/sync.ts:49"}, "properties": {"repobilityId": "058a49164157ec2b", "scanner": "scanner-primary", "fingerprint": "936170d99854f677", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cb1477b5e1cfa023", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/social/meta-client.ts:21"}, "properties": {"repobilityId": "5106f1c922eb2538", "scanner": "scanner-primary", "fingerprint": "cb1477b5e1cfa023", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-92a1007facf0b067", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/shopify/client.ts:2110"}, "properties": {"repobilityId": "85701d23d1c5cb05", "scanner": "scanner-primary", "fingerprint": "92a1007facf0b067", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9cae34cb24bf48f9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/claude/index.ts:53"}, "properties": {"repobilityId": "3a9d3d7b6aa7ecee", "scanner": "scanner-primary", "fingerprint": "9cae34cb24bf48f9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d3f605d021b41b24", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/workers/email-sync.ts:20"}, "properties": {"repobilityId": "cf4c7cf5e5660da6", "scanner": "scanner-primary", "fingerprint": "d3f605d021b41b24", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5174cf51cbcb9091", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/workers/main.ts:107"}, "properties": {"repobilityId": "c348d6bf03ea7eb1", "scanner": "scanner-primary", "fingerprint": "5174cf51cbcb9091", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8987d6d1c30c7202", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-alpine"}, "properties": {"repobilityId": "59ac04a55dcc3b67", "scanner": "scanner-primary", "fingerprint": "8987d6d1c30c7202", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Dockerfile"}, "region": {"startLine": 9}}}]}, {"ruleId": "scanner-8987d6d1c30c7202", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-alpine"}, "properties": {"repobilityId": "0db346914f09148d", "scanner": "scanner-primary", "fingerprint": "8987d6d1c30c7202", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Dockerfile"}, "region": {"startLine": 18}}}]}, {"ruleId": "scanner-8987d6d1c30c7202", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-alpine"}, "properties": {"repobilityId": "9c7ad7dbaca77d44", "scanner": "scanner-primary", "fingerprint": "8987d6d1c30c7202", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Dockerfile"}, "region": {"startLine": 34}}}]}, {"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-ce8b3454f4b451e5", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/thread/thread-view.tsx:1093"}, "properties": {"repobilityId": "f4c01e73f1ec6efe", "scanner": "scanner-primary", "fingerprint": "ce8b3454f4b451e5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/thread/thread-view.tsx"}, "region": {"startLine": 1093}}}]}, {"ruleId": "scanner-72aac4b1a6b8e0e1", "level": "error", "message": {"text": "Possible secret in src/app/api/admin/integrations/route.ts"}, "properties": {"repobilityId": "8d4d80a97677e96a", "scanner": "scanner-primary", "fingerprint": "72aac4b1a6b8e0e1", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/api/admin/integrations/route.ts"}, "region": {"startLine": 154}}}]}, {"ruleId": "scanner-d7ce886a88363287", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in src/app/api/admin/backup/route.ts:8"}, "properties": {"repobilityId": "2e97db95f9f081d4", "scanner": "scanner-primary", "fingerprint": "d7ce886a88363287", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/api/admin/backup/route.ts"}, "region": {"startLine": 8}}}]}, {"ruleId": "scanner-7b743795a1e336c5", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in src/app/api/admin/backup/restore/route.ts:8"}, "properties": {"repobilityId": "d79541b04dab4229", "scanner": "scanner-primary", "fingerprint": "7b743795a1e336c5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/api/admin/backup/restore/route.ts"}, "region": {"startLine": 8}}}]}, {"ruleId": "scanner-aa1d5f83fa2ea8ea", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in src/app/api/cron/backup/route.ts:13"}, "properties": {"repobilityId": "761640faea674eb1", "scanner": "scanner-primary", "fingerprint": "aa1d5f83fa2ea8ea", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/api/cron/backup/route.ts"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-4601e3ad3bb28677", "level": "warning", "message": {"text": "No CI/CD pipelines detected"}, "properties": {"repobilityId": "c3ee439bce2bc51e", "scanner": "scanner-primary", "fingerprint": "4601e3ad3bb28677", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-80ac4dfea5005bb6", "level": "note", "message": {"text": "Very large file: src/components/thread/thread-view.tsx (1933 lines)"}, "properties": {"repobilityId": "6f586de26ae971d3", "scanner": "scanner-primary", "fingerprint": "80ac4dfea5005bb6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f93942093c48bee8", "level": "note", "message": {"text": "Very large file: src/components/sidebar/customer-sidebar.tsx (7834 lines)"}, "properties": {"repobilityId": "51a963fb940a6dac", "scanner": "scanner-primary", "fingerprint": "f93942093c48bee8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-55371b66829f8162", "level": "note", "message": {"text": "Very large file: src/lib/shopify/client.ts (3646 lines)"}, "properties": {"repobilityId": "3226c4a509379510", "scanner": "scanner-primary", "fingerprint": "55371b66829f8162", "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": "6ff187fa8fbbbb0d", "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": "1b300b1c2dcdcbd9", "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": "29195272a5a455f5", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "b7b0af650acd0bc4", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "note", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "f61aeb8f2541b575", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "18d087694c90aa6b", "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": "a2be4820bb34e407", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-99dcc098e221c684", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/check-meta-permissions.ts:148"}, "properties": {"repobilityId": "937c582070bd24f2", "scanner": "scanner-primary", "fingerprint": "99dcc098e221c684", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b2da1bab8377179b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/check-webhook-status.ts:47"}, "properties": {"repobilityId": "fb7cffcbe03aafbd", "scanner": "scanner-primary", "fingerprint": "b2da1bab8377179b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ef592c122b5d6e31", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/dashboard-nav.tsx:82"}, "properties": {"repobilityId": "a9de23586dc0bb5d", "scanner": "scanner-primary", "fingerprint": "ef592c122b5d6e31", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4d54c275d060020f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/compose/compose-modal.tsx:64"}, "properties": {"repobilityId": "b0276cd34c9fab15", "scanner": "scanner-primary", "fingerprint": "4d54c275d060020f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-467eb369c131b7b6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/thread/thread-view.tsx:236"}, "properties": {"repobilityId": "4cebde74e9399b05", "scanner": "scanner-primary", "fingerprint": "467eb369c131b7b6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9b81870ea98cea2f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/social/comment-detail.tsx:140"}, "properties": {"repobilityId": "d3dd06e0aafb5b85", "scanner": "scanner-primary", "fingerprint": "9b81870ea98cea2f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c7710006da1311d9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/social/conversations-view.tsx:90"}, "properties": {"repobilityId": "f8cbf8d676e9283a", "scanner": "scanner-primary", "fingerprint": "c7710006da1311d9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e448764d215a5f7b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/social/comment-list.tsx:58"}, "properties": {"repobilityId": "84ea3adf07895f6a", "scanner": "scanner-primary", "fingerprint": "e448764d215a5f7b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-566f17dc7d979cc1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/inbox/inbox-list.tsx:104"}, "properties": {"repobilityId": "822a63237a38aba6", "scanner": "scanner-primary", "fingerprint": "566f17dc7d979cc1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9d410059e3a4c286", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/sidebar/customer-sidebar.tsx:2313"}, "properties": {"repobilityId": "f49d5ed40adfde5f", "scanner": "scanner-primary", "fingerprint": "9d410059e3a4c286", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0d6455a6edeb5dd7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/sidebar/customer-sidebar.tsx:572"}, "properties": {"repobilityId": "8330181fc970e999", "scanner": "scanner-primary", "fingerprint": "0d6455a6edeb5dd7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2835c236bb5ac4cf", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/address/autocomplete/route.ts:108"}, "properties": {"repobilityId": "789a04dda8f20fd5", "scanner": "scanner-primary", "fingerprint": "2835c236bb5ac4cf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1ea85e8c8eb3ea6b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/integrations/route.ts:249"}, "properties": {"repobilityId": "a56c52fcdfcbc13f", "scanner": "scanner-primary", "fingerprint": "1ea85e8c8eb3ea6b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-017abe546c053818", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/integrations/test/route.ts:113"}, "properties": {"repobilityId": "c5508306652a6795", "scanner": "scanner-primary", "fingerprint": "017abe546c053818", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-05150b4781d57017", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/social/auth/route.ts:228"}, "properties": {"repobilityId": "566b6a79790cac55", "scanner": "scanner-primary", "fingerprint": "05150b4781d57017", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-872ebd11f37a884b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/settings/page.tsx:58"}, "properties": {"repobilityId": "7edfcb3d74e7db85", "scanner": "scanner-primary", "fingerprint": "872ebd11f37a884b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d8473354a2d6af4b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/needs-attention/page.tsx:34"}, "properties": {"repobilityId": "bfcee2d60a7a77e2", "scanner": "scanner-primary", "fingerprint": "d8473354a2d6af4b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-69e458a586ca3b26", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/design-ideas/page.tsx:31"}, "properties": {"repobilityId": "c47e652103aec190", "scanner": "scanner-primary", "fingerprint": "69e458a586ca3b26", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d2bca80cd89e941b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/trash/page.tsx:42"}, "properties": {"repobilityId": "d02869dd7c4e6ed2", "scanner": "scanner-primary", "fingerprint": "d2bca80cd89e941b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b48feabacaec450f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/insights/page.tsx:173"}, "properties": {"repobilityId": "a5cf3169205c81e0", "scanner": "scanner-primary", "fingerprint": "b48feabacaec450f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fb71ac9bcf1ffc53", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/reviews/page.tsx:98"}, "properties": {"repobilityId": "c1fabb87711003cf", "scanner": "scanner-primary", "fingerprint": "fb71ac9bcf1ffc53", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c502d9bbec0d7f39", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/admin/integrations/page.tsx:105"}, "properties": {"repobilityId": "ab547d220b94a319", "scanner": "scanner-primary", "fingerprint": "c502d9bbec0d7f39", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5a43e16ddd1a3e9e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/admin/automation/assignment-rules-content.tsx:77"}, "properties": {"repobilityId": "5afb0d41849f5a0a", "scanner": "scanner-primary", "fingerprint": "5a43e16ddd1a3e9e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a303992ad09cf76e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/admin/automation/tags-content.tsx:53"}, "properties": {"repobilityId": "396221adb07962f7", "scanner": "scanner-primary", "fingerprint": "a303992ad09cf76e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f93273daf3d8a53a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/admin/automation/filters-content.tsx:40"}, "properties": {"repobilityId": "7037dae4610ddc14", "scanner": "scanner-primary", "fingerprint": "f93273daf3d8a53a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c2579fe36aee5661", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/admin/users/page.tsx:44"}, "properties": {"repobilityId": "71116cb6ab54dc8d", "scanner": "scanner-primary", "fingerprint": "c2579fe36aee5661", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-64752f960eea4e23", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/admin/mailbox/page.tsx:52"}, "properties": {"repobilityId": "81289a2c5e52f72a", "scanner": "scanner-primary", "fingerprint": "64752f960eea4e23", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-007654299b596cba", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/admin/canned-replies/page.tsx:29"}, "properties": {"repobilityId": "360c4ad6b9a13de6", "scanner": "scanner-primary", "fingerprint": "007654299b596cba", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b26b3684f54d948c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/admin/rules/page.tsx:107"}, "properties": {"repobilityId": "4ae0ea0bbc4ad009", "scanner": "scanner-primary", "fingerprint": "b26b3684f54d948c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-818523574f4d847a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/admin/activity/page.tsx:40"}, "properties": {"repobilityId": "10e4e6e59f998065", "scanner": "scanner-primary", "fingerprint": "818523574f4d847a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8b77e68e89c50d43", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/admin/social/page.tsx:46"}, "properties": {"repobilityId": "51bb40e84517dda7", "scanner": "scanner-primary", "fingerprint": "8b77e68e89c50d43", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-838245d2c0792ca2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/admin/tags/page.tsx:66"}, "properties": {"repobilityId": "d44cdb5690489b1e", "scanner": "scanner-primary", "fingerprint": "838245d2c0792ca2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2d016bc2c0e5d966", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/(dashboard)/social/page.tsx:39"}, "properties": {"repobilityId": "cb940f5efcf97782", "scanner": "scanner-primary", "fingerprint": "2d016bc2c0e5d966", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f9b74aafd99e7300", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/printify/client.ts:42"}, "properties": {"repobilityId": "1e18c77fb4abe14a", "scanner": "scanner-primary", "fingerprint": "f9b74aafd99e7300", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fe57a0b8789a2641", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/email/zoho-imap-provider.ts:299"}, "properties": {"repobilityId": "d7c9c2cc3e7a5913", "scanner": "scanner-primary", "fingerprint": "fe57a0b8789a2641", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7c21a48a2c409079", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/ai/context.ts:235"}, "properties": {"repobilityId": "7a20c229bcbe1870", "scanner": "scanner-primary", "fingerprint": "7c21a48a2c409079", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1506c8e116339c33", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/trackingmore/client.ts:84"}, "properties": {"repobilityId": "c9f2d9f0e672fdba", "scanner": "scanner-primary", "fingerprint": "1506c8e116339c33", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-40f64966d20a8b87", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/zoho-mail-api/index.ts:215"}, "properties": {"repobilityId": "6e579cf0d1d22394", "scanner": "scanner-primary", "fingerprint": "40f64966d20a8b87", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a16998440a94202a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/judgeme/client.ts:77"}, "properties": {"repobilityId": "5c8abc43120c2a4e", "scanner": "scanner-primary", "fingerprint": "a16998440a94202a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-01ec6e9117d392aa", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/social/meta-client.ts:448"}, "properties": {"repobilityId": "8cb19d00d194712b", "scanner": "scanner-primary", "fingerprint": "01ec6e9117d392aa", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0d5ceab276f6cfc6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/social/meta-client.ts:90"}, "properties": {"repobilityId": "4f7936d11d036ba0", "scanner": "scanner-primary", "fingerprint": "0d5ceab276f6cfc6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a496a3f3d018bb86", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/shopify/client.ts:1233"}, "properties": {"repobilityId": "5256d1ca99a396ff", "scanner": "scanner-primary", "fingerprint": "a496a3f3d018bb86", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2b06971d500e9b2e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/use-auto-sync.ts:67"}, "properties": {"repobilityId": "ae6816915eff16f3", "scanner": "scanner-primary", "fingerprint": "2b06971d500e9b2e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-474b3a89042d2cdf", "level": "error", "message": {"text": "Dangling fetch: GET /api/nav/counts (src/components/dashboard-nav.tsx:82)"}, "properties": {"repobilityId": "8a6bc45a067fc997", "scanner": "scanner-primary", "fingerprint": "474b3a89042d2cdf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e0a3f01c2fae6b35", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/printify/sync (src/components/dashboard-nav.tsx:95)"}, "properties": {"repobilityId": "897d88fa84578e5c", "scanner": "scanner-primary", "fingerprint": "e0a3f01c2fae6b35", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-eb773d990e52e4d1", "level": "error", "message": {"text": "Dangling fetch: POST /api/threads/compose (src/components/compose/compose-modal.tsx:64)"}, "properties": {"repobilityId": "484e6588dcc17baa", "scanner": "scanner-primary", "fingerprint": "eb773d990e52e4d1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0e0a16b10926aaa0", "level": "error", "message": {"text": "Dangling fetch: GET /api/canned-replies (src/components/thread/thread-view.tsx:236)"}, "properties": {"repobilityId": "5e86a4ff4fc6bf87", "scanner": "scanner-primary", "fingerprint": "0e0a16b10926aaa0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6d04e80bf314f864", "level": "error", "message": {"text": "Dangling fetch: GET /api/threads/${threadId} (src/components/thread/thread-view.tsx:369)"}, "properties": {"repobilityId": "3cf6dd5d794eb021", "scanner": "scanner-primary", "fingerprint": "6d04e80bf314f864", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-04e7b986912ab79e", "level": "error", "message": {"text": "Dangling fetch: POST /api/threads/${thread.id}/read (src/components/thread/thread-view.tsx:481)"}, "properties": {"repobilityId": "9c3d198c08baa245", "scanner": "scanner-primary", "fingerprint": "04e7b986912ab79e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9c2cb8a4e07f59db", "level": "error", "message": {"text": "Dangling fetch: GET /api/threads?email=${encodeURIComponent(thread.customerEmail)}&exclude=${threadId} (src/components/thread/thread-view.tsx:496)"}, "properties": {"repobilityId": "bb5e62a6b748c1d0", "scanner": "scanner-primary", "fingerprint": "9c2cb8a4e07f59db", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2bd82d873ddf953b", "level": "error", "message": {"text": "Dangling fetch: GET /api/tags (src/components/thread/thread-view.tsx:508)"}, "properties": {"repobilityId": "6b9859303e4b3b06", "scanner": "scanner-primary", "fingerprint": "2bd82d873ddf953b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c8533c9833eee390", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/users (src/components/thread/thread-view.tsx:517)"}, "properties": {"repobilityId": "d347fb076bda532f", "scanner": "scanner-primary", "fingerprint": "c8533c9833eee390", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-34b88eb2f443e183", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/threads/${threadId} (src/components/thread/thread-view.tsx:527)"}, "properties": {"repobilityId": "e9ee588e935d10fe", "scanner": "scanner-primary", "fingerprint": "34b88eb2f443e183", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-972e1069753c71fc", "level": "error", "message": {"text": "Dangling fetch: POST /api/threads/${threadId}/tags (src/components/thread/thread-view.tsx:549)"}, "properties": {"repobilityId": "2e390d00a2b26380", "scanner": "scanner-primary", "fingerprint": "972e1069753c71fc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-26accd8a0ee4ba80", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/threads/${threadId}/tags/${tagId} (src/components/thread/thread-view.tsx:569)"}, "properties": {"repobilityId": "26757bb082db66b5", "scanner": "scanner-primary", "fingerprint": "26accd8a0ee4ba80", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e27a8408e96d0036", "level": "error", "message": {"text": "Dangling fetch: GET /api/attachments/${id} (src/components/thread/thread-view.tsx:603)"}, "properties": {"repobilityId": "d048decadc73ccaf", "scanner": "scanner-primary", "fingerprint": "e27a8408e96d0036", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6a0637ba7f4260c6", "level": "error", "message": {"text": "Dangling fetch: POST /api/threads/${threadId}/messages (src/components/thread/thread-view.tsx:659)"}, "properties": {"repobilityId": "9ff7bc143062668e", "scanner": "scanner-primary", "fingerprint": "6a0637ba7f4260c6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9c8334372e923b42", "level": "error", "message": {"text": "Dangling fetch: POST /api/threads/${threadId}/suggest (src/components/thread/thread-view.tsx:686)"}, "properties": {"repobilityId": "f67f2b63a6a7c046", "scanner": "scanner-primary", "fingerprint": "9c8334372e923b42", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d41e71ae28bc7ceb", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/threads/${threadId} (src/components/thread/thread-view.tsx:713)"}, "properties": {"repobilityId": "7b0471beea6653dc", "scanner": "scanner-primary", "fingerprint": "d41e71ae28bc7ceb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-84ee472e91b6bbbb", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/threads/${threadId} (src/components/thread/thread-view.tsx:758)"}, "properties": {"repobilityId": "69848ce8e917c445", "scanner": "scanner-primary", "fingerprint": "84ee472e91b6bbbb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1eb6c204f1a467cb", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/threads/${threadId}?purge=true (src/components/thread/thread-view.tsx:780)"}, "properties": {"repobilityId": "65e7e4d9a04ad5dd", "scanner": "scanner-primary", "fingerprint": "1eb6c204f1a467cb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-92d9932b8b4c8279", "level": "error", "message": {"text": "Dangling fetch: GET /api/address/autocomplete?${params} (src/components/ui/address-autocomplete.tsx:71)"}, "properties": {"repobilityId": "1e5e1d188025e8e4", "scanner": "scanner-primary", "fingerprint": "92d9932b8b4c8279", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-187bf1d27bafa228", "level": "error", "message": {"text": "Dangling fetch: GET /api/social/comments/${commentId} (src/components/social/comment-detail.tsx:140)"}, "properties": {"repobilityId": "f4182b1d90de9d92", "scanner": "scanner-primary", "fingerprint": "187bf1d27bafa228", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ede7a24979eac048", "level": "error", "message": {"text": "Dangling fetch: POST /api/social/comments/${targetId || commentId} (src/components/social/comment-detail.tsx:154)"}, "properties": {"repobilityId": "fd16ef5991db7f29", "scanner": "scanner-primary", "fingerprint": "ede7a24979eac048", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9781dc493209a346", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/social/comments/${commentId} (src/components/social/comment-detail.tsx:296)"}, "properties": {"repobilityId": "684dae33a8388631", "scanner": "scanner-primary", "fingerprint": "9781dc493209a346", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2ca5f87d7f7ea6dd", "level": "error", "message": {"text": "Dangling fetch: GET /api/social/comments/${commentId}/order-match (src/components/social/comment-detail.tsx:332)"}, "properties": {"repobilityId": "e61eb4eb4abf50f2", "scanner": "scanner-primary", "fingerprint": "2ca5f87d7f7ea6dd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-11d25035e50365aa", "level": "error", "message": {"text": "Dangling fetch: POST /api/social/comments/${replyTargetId || commentId}/suggest (src/components/social/comment-detail.tsx:344)"}, "properties": {"repobilityId": "dcdceb06b2dd01f3", "scanner": "scanner-primary", "fingerprint": "11d25035e50365aa", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-77ab7efa08ecdc64", "level": "error", "message": {"text": "Dangling fetch: GET /api/social/conversations/${conversationId} (src/components/social/conversations-view.tsx:90)"}, "properties": {"repobilityId": "06f771018cc656ff", "scanner": "scanner-primary", "fingerprint": "77ab7efa08ecdc64", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0b36dd0387a0d2b8", "level": "error", "message": {"text": "Dangling fetch: POST /api/social/conversations/${conversationId} (src/components/social/conversations-view.tsx:124)"}, "properties": {"repobilityId": "83a68413acb62bf4", "scanner": "scanner-primary", "fingerprint": "0b36dd0387a0d2b8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e0dc96230176b090", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/social/conversations/${conversationId} (src/components/social/conversations-view.tsx:142)"}, "properties": {"repobilityId": "c76f0e8663850f78", "scanner": "scanner-primary", "fingerprint": "e0dc96230176b090", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-abffba2b16a0c648", "level": "error", "message": {"text": "Dangling fetch: GET /api/social/conversations (src/components/social/conversations-view.tsx:321)"}, "properties": {"repobilityId": "13989c56c87015ef", "scanner": "scanner-primary", "fingerprint": "abffba2b16a0c648", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-447bd0bf7428b078", "level": "error", "message": {"text": "Dangling fetch: POST /api/design-ideas (src/components/social/comment-list.tsx:58)"}, "properties": {"repobilityId": "27fd7a964e3cf22d", "scanner": "scanner-primary", "fingerprint": "447bd0bf7428b078", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9199896c28abf74b", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/social/comments/${id} (src/components/social/comment-list.tsx:80)"}, "properties": {"repobilityId": "d8e978cea4a669a3", "scanner": "scanner-primary", "fingerprint": "9199896c28abf74b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6f94bb3e62418269", "level": "error", "message": {"text": "Dangling fetch: GET /api/social/comments?${queryParams} (src/components/social/comment-list.tsx:126)"}, "properties": {"repobilityId": "8f4b72c18ed67302", "scanner": "scanner-primary", "fingerprint": "6f94bb3e62418269", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a7b0ed2bf47f3606", "level": "error", "message": {"text": "Dangling fetch: GET /api/nav/counts (src/components/inbox/inbox-list.tsx:104)"}, "properties": {"repobilityId": "5748297ebdffd586", "scanner": "scanner-primary", "fingerprint": "a7b0ed2bf47f3606", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e0f07f2ebbeb2174", "level": "error", "message": {"text": "Dangling fetch: GET /api/threads?${params} (src/components/inbox/inbox-list.tsx:125)"}, "properties": {"repobilityId": "d2fa9c1733b3c29c", "scanner": "scanner-primary", "fingerprint": "e0f07f2ebbeb2174", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0e463880f8c2c19d", "level": "error", "message": {"text": "Dangling fetch: POST /api/sync (src/components/inbox/inbox-list.tsx:160)"}, "properties": {"repobilityId": "a4c868d1b14cdd1c", "scanner": "scanner-primary", "fingerprint": "0e463880f8c2c19d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-21f28536036919b6", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/printify/sync (src/components/inbox/inbox-list.tsx:164)"}, "properties": {"repobilityId": "9db8e5aa25ff5f6f", "scanner": "scanner-primary", "fingerprint": "21f28536036919b6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-404dd5d5216deb52", "level": "error", "message": {"text": "Dangling fetch: POST /api/threads/${threadId}/suppress-marketing (src/components/sidebar/customer-sidebar.tsx:609)"}, "properties": {"repobilityId": "8e7412013266185d", "scanner": "scanner-primary", "fingerprint": "404dd5d5216deb52", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0fa8edbbb9888537", "level": "error", "message": {"text": "Dangling fetch: GET /api/threads/${threadId}/reviews (src/components/sidebar/customer-sidebar.tsx:650)"}, "properties": {"repobilityId": "a9964b84327ffd40", "scanner": "scanner-primary", "fingerprint": "0fa8edbbb9888537", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1b27d145ec09881a", "level": "error", "message": {"text": "Dangling fetch: GET /api/threads/${threadId} (src/components/sidebar/customer-sidebar.tsx:696)"}, "properties": {"repobilityId": "dd74afd08265904a", "scanner": "scanner-primary", "fingerprint": "1b27d145ec09881a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-647d872e7b15d1bc", "level": "error", "message": {"text": "Dangling fetch: POST /api/threads/${threadId}/orders/actions (src/components/sidebar/customer-sidebar.tsx:906)"}, "properties": {"repobilityId": "725570c175ef6ad6", "scanner": "scanner-primary", "fingerprint": "647d872e7b15d1bc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7cfe1022d332c893", "level": "error", "message": {"text": "Dangling fetch: POST /api/threads/${threadId}/messages (src/components/sidebar/customer-sidebar.tsx:936)"}, "properties": {"repobilityId": "fc8d463f354ca6e4", "scanner": "scanner-primary", "fingerprint": "7cfe1022d332c893", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b6c1905ba2c079b7", "level": "error", "message": {"text": "Dangling fetch: POST /api/threads/${threadId}/orders/actions (src/components/sidebar/customer-sidebar.tsx:1476)"}, "properties": {"repobilityId": "113d0ee8ef0f02f9", "scanner": "scanner-primary", "fingerprint": "b6c1905ba2c079b7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-aeea55547ab99f93", "level": "error", "message": {"text": "Dangling fetch: POST /api/threads/${threadId}/orders/actions (src/components/sidebar/customer-sidebar.tsx:1555)"}, "properties": {"repobilityId": "fa8d8046bb2d4e35", "scanner": "scanner-primary", "fingerprint": "aeea55547ab99f93", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bf40f4cbd76c370d", "level": "error", "message": {"text": "Dangling fetch: POST /api/threads/${threadId}/orders/actions (src/components/sidebar/customer-sidebar.tsx:1595)"}, "properties": {"repobilityId": "71299c96e149962b", "scanner": "scanner-primary", "fingerprint": "bf40f4cbd76c370d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f99d080a7cff3d3d", "level": "error", "message": {"text": "Dangling fetch: POST /api/tracking (src/components/sidebar/customer-sidebar.tsx:1632)"}, "properties": {"repobilityId": "7867eb90ee47e568", "scanner": "scanner-primary", "fingerprint": "f99d080a7cff3d3d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2cc77c002b0b3c52", "level": "error", "message": {"text": "Dangling fetch: POST /api/threads/${threadId}/orders/actions (src/components/sidebar/customer-sidebar.tsx:1697)"}, "properties": {"repobilityId": "d0efd8d27f95b6b8", "scanner": "scanner-primary", "fingerprint": "2cc77c002b0b3c52", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5d3863168150b764", "level": "error", "message": {"text": "Dangling fetch: POST /api/threads/${threadId}/orders/actions (src/components/sidebar/customer-sidebar.tsx:1818)"}, "properties": {"repobilityId": "2f459268d055809f", "scanner": "scanner-primary", "fingerprint": "5d3863168150b764", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-62fad8867cdabbbf", "level": "error", "message": {"text": "Dangling fetch: POST /api/threads/${threadId}/orders/actions (src/components/sidebar/customer-sidebar.tsx:1933)"}, "properties": {"repobilityId": "a3ac00d2acb006cb", "scanner": "scanner-primary", "fingerprint": "62fad8867cdabbbf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b02ace347c1cd0d4", "level": "error", "message": {"text": "Dangling fetch: POST /api/threads/${threadId}/orders/actions (src/components/sidebar/customer-sidebar.tsx:1974)"}, "properties": {"repobilityId": "955f676fd27b00b1", "scanner": "scanner-primary", "fingerprint": "b02ace347c1cd0d4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ac72af6de2b5a7c5", "level": "error", "message": {"text": "Dangling fetch: POST /api/threads/${threadId}/orders/actions (src/components/sidebar/customer-sidebar.tsx:2013)"}, "properties": {"repobilityId": "170b19741d54b17b", "scanner": "scanner-primary", "fingerprint": "ac72af6de2b5a7c5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b4c6f86876dda534", "level": "error", "message": {"text": "Dangling fetch: POST /api/threads/${threadId}/orders/actions (src/components/sidebar/customer-sidebar.tsx:2374)"}, "properties": {"repobilityId": "d6833cb874edb06d", "scanner": "scanner-primary", "fingerprint": "b4c6f86876dda534", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a3efe01f9409bdbb", "level": "error", "message": {"text": "Dangling fetch: GET /api/shopify/products/${encodeURIComponent(product.id)}/variants (src/components/sidebar/customer-sidebar.tsx:2565)"}, "properties": {"repobilityId": "7dd890270738839d", "scanner": "scanner-primary", "fingerprint": "a3efe01f9409bdbb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4bbd430b8cf6d8ea", "level": "error", "message": {"text": "Dangling fetch: POST /api/threads/${threadId}/orders/actions (src/components/sidebar/customer-sidebar.tsx:2718)"}, "properties": {"repobilityId": "e2ca02d8434bea96", "scanner": "scanner-primary", "fingerprint": "4bbd430b8cf6d8ea", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2cb07b597b1c007e", "level": "error", "message": {"text": "Dangling fetch: GET /api/shopify/products/${encodeURIComponent(product.id)}/variants (src/components/sidebar/customer-sidebar.tsx:2803)"}, "properties": {"repobilityId": "b4e7551f02a15c1e", "scanner": "scanner-primary", "fingerprint": "2cb07b597b1c007e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9e640b0d2d13cd3d", "level": "error", "message": {"text": "Dangling fetch: POST https://accounts.zoho.${dc}/oauth/v2/token (src/app/api/admin/integrations/route.ts:249)"}, "properties": {"repobilityId": "5e68f1e185c6ad0e", "scanner": "scanner-primary", "fingerprint": "9e640b0d2d13cd3d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cbc3d9cf1c5f14a6", "level": "error", "message": {"text": "Dangling fetch: GET /api/profile (src/app/(dashboard)/settings/page.tsx:58)"}, "properties": {"repobilityId": "e587f59f4c53fb9c", "scanner": "scanner-primary", "fingerprint": "cbc3d9cf1c5f14a6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cc00d18217d5c6ae", "level": "error", "message": {"text": "Dangling fetch: GET /api/settings (src/app/(dashboard)/settings/page.tsx:68)"}, "properties": {"repobilityId": "11900a89a5f07dc0", "scanner": "scanner-primary", "fingerprint": "cc00d18217d5c6ae", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-efe0f95bbf20e391", "level": "error", "message": {"text": "Dangling fetch: PUT /api/profile (src/app/(dashboard)/settings/page.tsx:97)"}, "properties": {"repobilityId": "15425e1b14873ca4", "scanner": "scanner-primary", "fingerprint": "efe0f95bbf20e391", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d5cf0c5158eb083a", "level": "error", "message": {"text": "Dangling fetch: PUT /api/profile/password (src/app/(dashboard)/settings/page.tsx:115)"}, "properties": {"repobilityId": "10493101bcf1a8e2", "scanner": "scanner-primary", "fingerprint": "d5cf0c5158eb083a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e7c4d02fbbde7c15", "level": "error", "message": {"text": "Dangling fetch: POST /api/profile/avatar (src/app/(dashboard)/settings/page.tsx:137)"}, "properties": {"repobilityId": "61fe6a097d292782", "scanner": "scanner-primary", "fingerprint": "e7c4d02fbbde7c15", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fa2ff2b80d393657", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/profile/avatar (src/app/(dashboard)/settings/page.tsx:154)"}, "properties": {"repobilityId": "ab06417fd50ecbf2", "scanner": "scanner-primary", "fingerprint": "fa2ff2b80d393657", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-29ea3062d85762b4", "level": "error", "message": {"text": "Dangling fetch: PUT /api/settings (src/app/(dashboard)/settings/page.tsx:168)"}, "properties": {"repobilityId": "e009ce6aa2c2b878", "scanner": "scanner-primary", "fingerprint": "29ea3062d85762b4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-942422bab348ae92", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/backup (src/app/(dashboard)/settings/page.tsx:188)"}, "properties": {"repobilityId": "5c28fbc0824de8ff", "scanner": "scanner-primary", "fingerprint": "942422bab348ae92", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1ad44dc0cb3cbac9", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/backup (src/app/(dashboard)/settings/page.tsx:202)"}, "properties": {"repobilityId": "f34d97b51d8d41bd", "scanner": "scanner-primary", "fingerprint": "1ad44dc0cb3cbac9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6aab2e34da266fb3", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/backup/restore (src/app/(dashboard)/settings/page.tsx:216)"}, "properties": {"repobilityId": "022bfa48c083c1b6", "scanner": "scanner-primary", "fingerprint": "6aab2e34da266fb3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-035a9429cac44bd4", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/admin/backup?id=${encodeURIComponent(id)} (src/app/(dashboard)/settings/page.tsx:236)"}, "properties": {"repobilityId": "2b8261f90ea88c0d", "scanner": "scanner-primary", "fingerprint": "035a9429cac44bd4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-81e4e98281e289df", "level": "error", "message": {"text": "Dangling fetch: GET /api/needs-attention (src/app/(dashboard)/needs-attention/page.tsx:34)"}, "properties": {"repobilityId": "ec270a361f2c8f70", "scanner": "scanner-primary", "fingerprint": "81e4e98281e289df", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c55e2278f967f057", "level": "error", "message": {"text": "Dangling fetch: POST /api/needs-attention (src/app/(dashboard)/needs-attention/page.tsx:43)"}, "properties": {"repobilityId": "39f54b32cf47eb20", "scanner": "scanner-primary", "fingerprint": "c55e2278f967f057", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-65bff092dd0ecb91", "level": "error", "message": {"text": "Dangling fetch: GET /api/design-ideas (src/app/(dashboard)/design-ideas/page.tsx:31)"}, "properties": {"repobilityId": "250ab94ac75b7a7d", "scanner": "scanner-primary", "fingerprint": "65bff092dd0ecb91", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1fbea970448238d0", "level": "error", "message": {"text": "Dangling fetch: POST /api/design-ideas (src/app/(dashboard)/design-ideas/page.tsx:39)"}, "properties": {"repobilityId": "2580da0eaae08063", "scanner": "scanner-primary", "fingerprint": "1fbea970448238d0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8d66f4fe594c09cf", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/design-ideas/${id} (src/app/(dashboard)/design-ideas/page.tsx:55)"}, "properties": {"repobilityId": "744350293bb3a699", "scanner": "scanner-primary", "fingerprint": "8d66f4fe594c09cf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7c73d9c5ea15c216", "level": "error", "message": {"text": "Dangling fetch: GET /api/threads?status=TRASHED (src/app/(dashboard)/trash/page.tsx:42)"}, "properties": {"repobilityId": "8e6b4dc106c5a08f", "scanner": "scanner-primary", "fingerprint": "7c73d9c5ea15c216", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fa9b4a4103f0426f", "level": "error", "message": {"text": "Dangling fetch: POST /api/threads/bulk (src/app/(dashboard)/trash/page.tsx:55)"}, "properties": {"repobilityId": "a15a7646c14df87b", "scanner": "scanner-primary", "fingerprint": "fa9b4a4103f0426f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8150d57d27257f64", "level": "error", "message": {"text": "Dangling fetch: POST /api/threads/bulk (src/app/(dashboard)/trash/page.tsx:75)"}, "properties": {"repobilityId": "9e6fe3d3956d9de7", "scanner": "scanner-primary", "fingerprint": "8150d57d27257f64", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a8c3a37ff2817df3", "level": "error", "message": {"text": "Dangling fetch: GET /api/insights/support?days=${days} (src/app/(dashboard)/insights/page.tsx:173)"}, "properties": {"repobilityId": "63e358d9ad9b8c9d", "scanner": "scanner-primary", "fingerprint": "a8c3a37ff2817df3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d9de476a0c7271e2", "level": "error", "message": {"text": "Dangling fetch: GET /api/reviews/${review.id}/reply (src/app/(dashboard)/reviews/page.tsx:98)"}, "properties": {"repobilityId": "bbb14f95f3f76881", "scanner": "scanner-primary", "fingerprint": "d9de476a0c7271e2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e837a88644938f90", "level": "error", "message": {"text": "Dangling fetch: POST /api/reviews/${review.id}/visibility (src/app/(dashboard)/reviews/page.tsx:118)"}, "properties": {"repobilityId": "801b009d8fa7cdec", "scanner": "scanner-primary", "fingerprint": "e837a88644938f90", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-60b31b93d0e99a9a", "level": "error", "message": {"text": "Dangling fetch: POST /api/reviews/${draft.reviewId}/reply (src/app/(dashboard)/reviews/page.tsx:377)"}, "properties": {"repobilityId": "c51c67782f9f3b71", "scanner": "scanner-primary", "fingerprint": "60b31b93d0e99a9a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5d0df0aa79a6262a", "level": "error", "message": {"text": "Dangling fetch: POST /api/reviews/${draft.reviewId}/visibility (src/app/(dashboard)/reviews/page.tsx:393)"}, "properties": {"repobilityId": "aaa5ca085ee19076", "scanner": "scanner-primary", "fingerprint": "5d0df0aa79a6262a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d124ebbfd133f86c", "level": "error", "message": {"text": "Dangling fetch: POST /api/reviews/attention/dismiss (src/app/(dashboard)/reviews/page.tsx:409)"}, "properties": {"repobilityId": "1c0477c2bf317019", "scanner": "scanner-primary", "fingerprint": "d124ebbfd133f86c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7b77a72bde97c15d", "level": "error", "message": {"text": "Dangling fetch: GET /api/reviews/attention (src/app/(dashboard)/reviews/page.tsx:526)"}, "properties": {"repobilityId": "d64749307197ad2c", "scanner": "scanner-primary", "fingerprint": "7b77a72bde97c15d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-aee65e680e276470", "level": "error", "message": {"text": "Dangling fetch: GET /api/reviews?${params} (src/app/(dashboard)/reviews/page.tsx:559)"}, "properties": {"repobilityId": "0612ea698c11acca", "scanner": "scanner-primary", "fingerprint": "aee65e680e276470", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b2e6fe856f304bdd", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/integrations (src/app/(dashboard)/admin/integrations/page.tsx:105)"}, "properties": {"repobilityId": "3e1c319d330d96d8", "scanner": "scanner-primary", "fingerprint": "b2e6fe856f304bdd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-71e23dfd16b16aef", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/printify/sync (src/app/(dashboard)/admin/integrations/page.tsx:117)"}, "properties": {"repobilityId": "0ad9b406802c280a", "scanner": "scanner-primary", "fingerprint": "71e23dfd16b16aef", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0d4797adc262cf79", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/integrations (src/app/(dashboard)/admin/integrations/page.tsx:134)"}, "properties": {"repobilityId": "02e8259d1caa9e34", "scanner": "scanner-primary", "fingerprint": "0d4797adc262cf79", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6f924303e8e9d47c", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/integrations/test (src/app/(dashboard)/admin/integrations/page.tsx:160)"}, "properties": {"repobilityId": "3b5e240779a4fab5", "scanner": "scanner-primary", "fingerprint": "6f924303e8e9d47c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ee6cb813218958f4", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/printify/sync (src/app/(dashboard)/admin/integrations/page.tsx:181)"}, "properties": {"repobilityId": "6ab74b50455b3a29", "scanner": "scanner-primary", "fingerprint": "ee6cb813218958f4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-36c08eae33c6c29b", "level": "error", "message": {"text": "Dangling fetch: GET /api/assignment-rules (src/app/(dashboard)/admin/automation/assignment-rules-content.tsx:77)"}, "properties": {"repobilityId": "372a591fc4b49a07", "scanner": "scanner-primary", "fingerprint": "36c08eae33c6c29b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-57cf5161bc7be8e3", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/users (src/app/(dashboard)/admin/automation/assignment-rules-content.tsx:87)"}, "properties": {"repobilityId": "fc2b25363c8c895b", "scanner": "scanner-primary", "fingerprint": "57cf5161bc7be8e3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dec9e332e279267e", "level": "error", "message": {"text": "Dangling fetch: GET /api/tags (src/app/(dashboard)/admin/automation/assignment-rules-content.tsx:98)"}, "properties": {"repobilityId": "809fc850d9b11ceb", "scanner": "scanner-primary", "fingerprint": "dec9e332e279267e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a94bbd83a76b98a0", "level": "error", "message": {"text": "Dangling fetch: POST /api/assignment-rules (src/app/(dashboard)/admin/automation/assignment-rules-content.tsx:113)"}, "properties": {"repobilityId": "c84ab1d054e4c4ea", "scanner": "scanner-primary", "fingerprint": "a94bbd83a76b98a0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a9f75e87b57fc19c", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/assignment-rules/${id} (src/app/(dashboard)/admin/automation/assignment-rules-content.tsx:137)"}, "properties": {"repobilityId": "6dfe5bf5896b8fdf", "scanner": "scanner-primary", "fingerprint": "a9f75e87b57fc19c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2ad191369c21a3c6", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/assignment-rules/${id} (src/app/(dashboard)/admin/automation/assignment-rules-content.tsx:155)"}, "properties": {"repobilityId": "9c93f3a24a659701", "scanner": "scanner-primary", "fingerprint": "2ad191369c21a3c6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2ea3f0d4cc97fd9e", "level": "error", "message": {"text": "Dangling fetch: GET /api/tags (src/app/(dashboard)/admin/automation/tags-content.tsx:53)"}, "properties": {"repobilityId": "18aa4b608bf3b4e4", "scanner": "scanner-primary", "fingerprint": "2ea3f0d4cc97fd9e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9cbc1c2406d0a13d", "level": "error", "message": {"text": "Dangling fetch: GET /api/tags/${expandedTag} (src/app/(dashboard)/admin/automation/tags-content.tsx:64)"}, "properties": {"repobilityId": "fb152b49ee1fb976", "scanner": "scanner-primary", "fingerprint": "9cbc1c2406d0a13d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c3029a92d513c14a", "level": "error", "message": {"text": "Dangling fetch: POST /api/tags (src/app/(dashboard)/admin/automation/tags-content.tsx:75)"}, "properties": {"repobilityId": "040c23152080da67", "scanner": "scanner-primary", "fingerprint": "c3029a92d513c14a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ec41d3c972297bc2", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/tags/${id} (src/app/(dashboard)/admin/automation/tags-content.tsx:96)"}, "properties": {"repobilityId": "ec59e86587d17e4b", "scanner": "scanner-primary", "fingerprint": "ec41d3c972297bc2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d77eb537aebbd26c", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/tags/${id} (src/app/(dashboard)/admin/automation/tags-content.tsx:115)"}, "properties": {"repobilityId": "ae0b0444e4f0cdc4", "scanner": "scanner-primary", "fingerprint": "d77eb537aebbd26c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dbe13075c8f12974", "level": "error", "message": {"text": "Dangling fetch: POST /api/tag-rules (src/app/(dashboard)/admin/automation/tags-content.tsx:129)"}, "properties": {"repobilityId": "48a971dd3092a22a", "scanner": "scanner-primary", "fingerprint": "dbe13075c8f12974", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fbb025d3d714005d", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/tag-rules/${id} (src/app/(dashboard)/admin/automation/tags-content.tsx:149)"}, "properties": {"repobilityId": "d984d96bfb7bd94e", "scanner": "scanner-primary", "fingerprint": "fbb025d3d714005d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-87d90d9f2a2af04d", "level": "error", "message": {"text": "Dangling fetch: GET /api/filter-rules (src/app/(dashboard)/admin/automation/filters-content.tsx:40)"}, "properties": {"repobilityId": "05316d7ac1e9dc03", "scanner": "scanner-primary", "fingerprint": "87d90d9f2a2af04d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8dfa7617d1a1c260", "level": "error", "message": {"text": "Dangling fetch: POST /api/filter-rules (src/app/(dashboard)/admin/automation/filters-content.tsx:54)"}, "properties": {"repobilityId": "9f91731ac9dbeb28", "scanner": "scanner-primary", "fingerprint": "8dfa7617d1a1c260", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1107dadfb1faee14", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/filter-rules/${id} (src/app/(dashboard)/admin/automation/filters-content.tsx:78)"}, "properties": {"repobilityId": "ce4ae9cf7721ed0f", "scanner": "scanner-primary", "fingerprint": "1107dadfb1faee14", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0f3c483410deab6f", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/filter-rules/${id} (src/app/(dashboard)/admin/automation/filters-content.tsx:96)"}, "properties": {"repobilityId": "64b0bc6e70e0ef45", "scanner": "scanner-primary", "fingerprint": "0f3c483410deab6f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-495ef627d54da862", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/filter-rules/${data.id} (src/app/(dashboard)/admin/automation/filters-content.tsx:115)"}, "properties": {"repobilityId": "9508d089c65ff565", "scanner": "scanner-primary", "fingerprint": "495ef627d54da862", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-99f2f018dec70373", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/users (src/app/(dashboard)/admin/users/page.tsx:44)"}, "properties": {"repobilityId": "b4d00a3bfc7c7739", "scanner": "scanner-primary", "fingerprint": "99f2f018dec70373", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-52ecc466f64e10a4", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/users (src/app/(dashboard)/admin/users/page.tsx:52)"}, "properties": {"repobilityId": "9e35a2be055e5898", "scanner": "scanner-primary", "fingerprint": "52ecc466f64e10a4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d7c0faa1964975e5", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/users/${id} (src/app/(dashboard)/admin/users/page.tsx:78)"}, "properties": {"repobilityId": "f8fe1bf09af64581", "scanner": "scanner-primary", "fingerprint": "d7c0faa1964975e5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-72a29c4e78698162", "level": "error", "message": {"text": "Dangling fetch: GET /api/sync (src/app/(dashboard)/admin/mailbox/page.tsx:52)"}, "properties": {"repobilityId": "7ebfabcdb15fe967", "scanner": "scanner-primary", "fingerprint": "72a29c4e78698162", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1203842d8b587b66", "level": "error", "message": {"text": "Dangling fetch: POST /api/sync (src/app/(dashboard)/admin/mailbox/page.tsx:62)"}, "properties": {"repobilityId": "67b13a2ba9b42d13", "scanner": "scanner-primary", "fingerprint": "1203842d8b587b66", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-46156fdb05042dd9", "level": "error", "message": {"text": "Dangling fetch: GET /api/canned-replies (src/app/(dashboard)/admin/canned-replies/page.tsx:29)"}, "properties": {"repobilityId": "d51fc56afc6c173a", "scanner": "scanner-primary", "fingerprint": "46156fdb05042dd9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-041095a63552061f", "level": "error", "message": {"text": "Dangling fetch: POST /api/canned-replies (src/app/(dashboard)/admin/canned-replies/page.tsx:37)"}, "properties": {"repobilityId": "7937c1fb223fe9a4", "scanner": "scanner-primary", "fingerprint": "041095a63552061f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a490dad806d9aa5c", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/canned-replies/${id} (src/app/(dashboard)/admin/canned-replies/page.tsx:53)"}, "properties": {"repobilityId": "d353aa8f01d7a742", "scanner": "scanner-primary", "fingerprint": "a490dad806d9aa5c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d1919d8533f592c1", "level": "error", "message": {"text": "Dangling fetch: GET /api/assignment-rules (src/app/(dashboard)/admin/rules/page.tsx:107)"}, "properties": {"repobilityId": "a68c06a47bb40d98", "scanner": "scanner-primary", "fingerprint": "d1919d8533f592c1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9da92f434d2c6484", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/users (src/app/(dashboard)/admin/rules/page.tsx:117)"}, "properties": {"repobilityId": "ab73137a954da757", "scanner": "scanner-primary", "fingerprint": "9da92f434d2c6484", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9d7b9c291c749cb2", "level": "error", "message": {"text": "Dangling fetch: GET /api/tags (src/app/(dashboard)/admin/rules/page.tsx:128)"}, "properties": {"repobilityId": "d84c66b52a0ec0a8", "scanner": "scanner-primary", "fingerprint": "9d7b9c291c749cb2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-efb307812f5ae793", "level": "error", "message": {"text": "Dangling fetch: GET /api/filter-rules (src/app/(dashboard)/admin/rules/page.tsx:138)"}, "properties": {"repobilityId": "baf2241bbc9dde08", "scanner": "scanner-primary", "fingerprint": "efb307812f5ae793", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a30e660bb56da22d", "level": "error", "message": {"text": "Dangling fetch: POST /api/assignment-rules (src/app/(dashboard)/admin/rules/page.tsx:153)"}, "properties": {"repobilityId": "e3868c8a8571da63", "scanner": "scanner-primary", "fingerprint": "a30e660bb56da22d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a23a6767543e2173", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/assignment-rules/${id} (src/app/(dashboard)/admin/rules/page.tsx:177)"}, "properties": {"repobilityId": "86287a368cbec604", "scanner": "scanner-primary", "fingerprint": "a23a6767543e2173", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e593459d29dc928d", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/assignment-rules/${id} (src/app/(dashboard)/admin/rules/page.tsx:195)"}, "properties": {"repobilityId": "ff54d66bfa294281", "scanner": "scanner-primary", "fingerprint": "e593459d29dc928d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2e12af8e8a84b46a", "level": "error", "message": {"text": "Dangling fetch: POST /api/filter-rules (src/app/(dashboard)/admin/rules/page.tsx:216)"}, "properties": {"repobilityId": "384f0ef954763f57", "scanner": "scanner-primary", "fingerprint": "2e12af8e8a84b46a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-405699636b6d9c38", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/filter-rules/${id} (src/app/(dashboard)/admin/rules/page.tsx:240)"}, "properties": {"repobilityId": "3c3f824718c9709c", "scanner": "scanner-primary", "fingerprint": "405699636b6d9c38", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-318fa0213159b99f", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/filter-rules/${id} (src/app/(dashboard)/admin/rules/page.tsx:258)"}, "properties": {"repobilityId": "68d2c03b82ca5693", "scanner": "scanner-primary", "fingerprint": "318fa0213159b99f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a6de5a4550b53d0f", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/filter-rules/${data.id} (src/app/(dashboard)/admin/rules/page.tsx:279)"}, "properties": {"repobilityId": "7acf9f0ca798283d", "scanner": "scanner-primary", "fingerprint": "a6de5a4550b53d0f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a82cd93a4c9ae70a", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/activity (src/app/(dashboard)/admin/activity/page.tsx:40)"}, "properties": {"repobilityId": "1c566d4ad6b4fe34", "scanner": "scanner-primary", "fingerprint": "a82cd93a4c9ae70a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ea3903c1373ceb50", "level": "error", "message": {"text": "Dangling fetch: GET /api/social/auth (src/app/(dashboard)/admin/social/page.tsx:46)"}, "properties": {"repobilityId": "f832d9279b5569c9", "scanner": "scanner-primary", "fingerprint": "ea3903c1373ceb50", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1dab094c61909175", "level": "error", "message": {"text": "Dangling fetch: GET /api/social/accounts (src/app/(dashboard)/admin/social/page.tsx:56)"}, "properties": {"repobilityId": "28b4dc800a9c3e7d", "scanner": "scanner-primary", "fingerprint": "1dab094c61909175", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-077ece18d5772625", "level": "error", "message": {"text": "Dangling fetch: GET /api/social/rules (src/app/(dashboard)/admin/social/page.tsx:67)"}, "properties": {"repobilityId": "4672f5e38cc134f4", "scanner": "scanner-primary", "fingerprint": "077ece18d5772625", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5176e65cc52eebdb", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/social/auth (src/app/(dashboard)/admin/social/page.tsx:76)"}, "properties": {"repobilityId": "1da089990ff59dec", "scanner": "scanner-primary", "fingerprint": "5176e65cc52eebdb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6c16e12ed98a75db", "level": "error", "message": {"text": "Dangling fetch: POST /api/social/sync (src/app/(dashboard)/admin/social/page.tsx:88)"}, "properties": {"repobilityId": "4c3ce43a2c0e2e66", "scanner": "scanner-primary", "fingerprint": "6c16e12ed98a75db", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3daac501e98d856f", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/social/accounts (src/app/(dashboard)/admin/social/page.tsx:107)"}, "properties": {"repobilityId": "71b51345d9bc7f41", "scanner": "scanner-primary", "fingerprint": "3daac501e98d856f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-58a0c9bfe4d5808a", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/social/rules/${ruleId} (src/app/(dashboard)/admin/social/page.tsx:122)"}, "properties": {"repobilityId": "b836e6ff21a1c969", "scanner": "scanner-primary", "fingerprint": "58a0c9bfe4d5808a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3407285f623b88a0", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/social/rules/${ruleId} (src/app/(dashboard)/admin/social/page.tsx:133)"}, "properties": {"repobilityId": "53f416d0e9c41710", "scanner": "scanner-primary", "fingerprint": "3407285f623b88a0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fae948b7909ca47b", "level": "error", "message": {"text": "Dangling fetch: GET /api/social/auth?action=auth_url (src/app/(dashboard)/admin/social/page.tsx:150)"}, "properties": {"repobilityId": "da4674f320a86ed0", "scanner": "scanner-primary", "fingerprint": "fae948b7909ca47b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-55b50f72b99acd57", "level": "error", "message": {"text": "Dangling fetch: POST /api/social/auth (src/app/(dashboard)/admin/social/page.tsx:177)"}, "properties": {"repobilityId": "997c446732ac1b75", "scanner": "scanner-primary", "fingerprint": "55b50f72b99acd57", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bec6fc93bb719ad6", "level": "error", "message": {"text": "Dangling fetch: POST /api/social/auth (src/app/(dashboard)/admin/social/page.tsx:221)"}, "properties": {"repobilityId": "3b0f9f0c68408df4", "scanner": "scanner-primary", "fingerprint": "bec6fc93bb719ad6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1d5f46999e483b9c", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/meta-data-deletion (src/app/(dashboard)/admin/social/page.tsx:637)"}, "properties": {"repobilityId": "8449e83f48450012", "scanner": "scanner-primary", "fingerprint": "1d5f46999e483b9c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cde083c4a26a3746", "level": "error", "message": {"text": "Dangling fetch: GET /api/tags (src/app/(dashboard)/admin/tags/page.tsx:66)"}, "properties": {"repobilityId": "0d4178bea47f64db", "scanner": "scanner-primary", "fingerprint": "cde083c4a26a3746", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d36955f8bb965487", "level": "error", "message": {"text": "Dangling fetch: GET /api/tags/${expandedTag} (src/app/(dashboard)/admin/tags/page.tsx:78)"}, "properties": {"repobilityId": "2c1e6ea6e8354c4e", "scanner": "scanner-primary", "fingerprint": "d36955f8bb965487", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bcace945930cc1fe", "level": "error", "message": {"text": "Dangling fetch: POST /api/tags (src/app/(dashboard)/admin/tags/page.tsx:89)"}, "properties": {"repobilityId": "dca808850fefa574", "scanner": "scanner-primary", "fingerprint": "bcace945930cc1fe", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ff561b0e5d634bd7", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/tags/${id} (src/app/(dashboard)/admin/tags/page.tsx:110)"}, "properties": {"repobilityId": "555f74fef51b3558", "scanner": "scanner-primary", "fingerprint": "ff561b0e5d634bd7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9cc0ea4e79ed0b6a", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/tags/${id} (src/app/(dashboard)/admin/tags/page.tsx:129)"}, "properties": {"repobilityId": "8ee71f3267b25df7", "scanner": "scanner-primary", "fingerprint": "9cc0ea4e79ed0b6a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-15689a5ed2009d84", "level": "error", "message": {"text": "Dangling fetch: POST /api/tag-rules (src/app/(dashboard)/admin/tags/page.tsx:145)"}, "properties": {"repobilityId": "0a7d895ae5c20211", "scanner": "scanner-primary", "fingerprint": "15689a5ed2009d84", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7521af8aa6fb592c", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/tag-rules/${id} (src/app/(dashboard)/admin/tags/page.tsx:165)"}, "properties": {"repobilityId": "e921e84c6bfcea30", "scanner": "scanner-primary", "fingerprint": "7521af8aa6fb592c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-64ea7be8c06dd72e", "level": "error", "message": {"text": "Dangling fetch: GET /api/social/comments?status=NEW,IN_PROGRESS,ESCALATED&limit=1 (src/app/(dashboard)/social/page.tsx:39)"}, "properties": {"repobilityId": "a1fa9ddb1ceb24dd", "scanner": "scanner-primary", "fingerprint": "64ea7be8c06dd72e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ba326ab4c818c94a", "level": "error", "message": {"text": "Dangling fetch: GET /api/social/comments?status=DONE&limit=1 (src/app/(dashboard)/social/page.tsx:42)"}, "properties": {"repobilityId": "1bd3a410cabb0c30", "scanner": "scanner-primary", "fingerprint": "ba326ab4c818c94a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b5ff1f1ff074c507", "level": "error", "message": {"text": "Dangling fetch: GET /api/social/conversations (src/app/(dashboard)/social/page.tsx:56)"}, "properties": {"repobilityId": "114e45bc56d1ddc4", "scanner": "scanner-primary", "fingerprint": "b5ff1f1ff074c507", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-908db284f2ea334c", "level": "error", "message": {"text": "Dangling fetch: GET /api/social/auth (src/app/(dashboard)/social/page.tsx:71)"}, "properties": {"repobilityId": "cb6cfcda333fc8c2", "scanner": "scanner-primary", "fingerprint": "908db284f2ea334c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-644432c0583f613b", "level": "error", "message": {"text": "Dangling fetch: GET /api/social/sync (src/app/(dashboard)/social/page.tsx:81)"}, "properties": {"repobilityId": "f30ddb667cc20b4d", "scanner": "scanner-primary", "fingerprint": "644432c0583f613b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1ab4794d82797caa", "level": "error", "message": {"text": "Dangling fetch: POST /api/social/sync (src/app/(dashboard)/social/page.tsx:94)"}, "properties": {"repobilityId": "e1a90b63a865814b", "scanner": "scanner-primary", "fingerprint": "1ab4794d82797caa", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b50031ce3723de40", "level": "error", "message": {"text": "Dangling fetch: GET /api/social/comments/${nextId} (src/app/(dashboard)/social/page.tsx:142)"}, "properties": {"repobilityId": "f43c2ec62ecc16b1", "scanner": "scanner-primary", "fingerprint": "b50031ce3723de40", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f6fd0fc69b6171af", "level": "error", "message": {"text": "Dangling fetch: POST /api/social/comments/bulk-like (src/app/(dashboard)/social/page.tsx:166)"}, "properties": {"repobilityId": "243e17f5a9f782e9", "scanner": "scanner-primary", "fingerprint": "f6fd0fc69b6171af", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-162a605f8274ed7f", "level": "error", "message": {"text": "Dangling fetch: POST /api/setup (src/app/setup/page.tsx:20)"}, "properties": {"repobilityId": "742c30e98c0fb5c7", "scanner": "scanner-primary", "fingerprint": "162a605f8274ed7f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6d5b7b5c7749381e", "level": "error", "message": {"text": "Dangling fetch: GET /shops.json (src/lib/printify/client.ts:63)"}, "properties": {"repobilityId": "1cfe595b16925d84", "scanner": "scanner-primary", "fingerprint": "6d5b7b5c7749381e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-5420690d638951f7", "level": "error", "message": {"text": "Dangling fetch: GET /shops/${this.config.shopId}/webhooks.json (src/lib/printify/client.ts:252)"}, "properties": {"repobilityId": "cf85ba2df9a43687", "scanner": "scanner-primary", "fingerprint": "5420690d638951f7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-af97a216bc4d913c", "level": "error", "message": {"text": "Dangling fetch: GET /shops/${this.config.shopId}/products/${productId}.json (src/lib/printify/client.ts:330)"}, "properties": {"repobilityId": "9ae9a38a459ad8db", "scanner": "scanner-primary", "fingerprint": "af97a216bc4d913c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-028a66373925f712", "level": "error", "message": {"text": "Dangling fetch: GET /catalog/blueprints/${blueprintId}/print_providers.json (src/lib/printify/client.ts:584)"}, "properties": {"repobilityId": "eb6d6536df9aa885", "scanner": "scanner-primary", "fingerprint": "028a66373925f712", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-bfc8567dc6287ed6", "level": "error", "message": {"text": "Dangling fetch: GET /couriers (src/lib/trackingmore/client.ts:402)"}, "properties": {"repobilityId": "c40eecdd662f0bcd", "scanner": "scanner-primary", "fingerprint": "bfc8567dc6287ed6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-c73b9be0cd1a612f", "level": "error", "message": {"text": "Dangling fetch: POST https://accounts.zoho.${dataCenter}/oauth/v2/token (src/lib/zoho-mail-api/index.ts:527)"}, "properties": {"repobilityId": "7e43d76a8b7c5e4f", "scanner": "scanner-primary", "fingerprint": "c73b9be0cd1a612f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e615c636db709852", "level": "error", "message": {"text": "Dangling fetch: GET https://api-eu.dhl.com/track/shipments?trackingNumber=${encodeURIComponent(trackingNumber)} (src/lib/tracking/dhl.ts:31)"}, "properties": {"repobilityId": "8e99327115d87dd1", "scanner": "scanner-primary", "fingerprint": "e615c636db709852", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-82feca46303cc746", "level": "error", "message": {"text": "Dangling fetch: POST https://a.klaviyo.com/api/profile-suppression-bulk-create-jobs (src/lib/klaviyo/suppress.ts:33)"}, "properties": {"repobilityId": "21fecc5fa56653a6", "scanner": "scanner-primary", "fingerprint": "82feca46303cc746", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-353746a256220f20", "level": "error", "message": {"text": "Dangling fetch: GET /api/sync (src/hooks/use-auto-sync.ts:50)"}, "properties": {"repobilityId": "cbd64ed1218fbb9c", "scanner": "scanner-primary", "fingerprint": "353746a256220f20", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1f3042ff191047bd", "level": "error", "message": {"text": "Dangling fetch: POST /api/sync (src/hooks/use-auto-sync.ts:67)"}, "properties": {"repobilityId": "e840ec5568e2a535", "scanner": "scanner-primary", "fingerprint": "1f3042ff191047bd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3a911eb1e1eaf83c", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/printify/sync (src/hooks/use-auto-sync.ts:104)"}, "properties": {"repobilityId": "c664490799f4a08e", "scanner": "scanner-primary", "fingerprint": "3a911eb1e1eaf83c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-19a1a46befe3d6a6", "level": "note", "message": {"text": "Unused endpoint: DELETE "}, "properties": {"repobilityId": "e566fddd219debd0", "scanner": "scanner-primary", "fingerprint": "19a1a46befe3d6a6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}