{"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-915e441c51be35f4", "name": "Possibly dead Python function: compare_approaches", "shortDescription": {"text": "Possibly dead Python function: compare_approaches"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-05b269e6a9e3eead", "name": "Stray `console.log` in TS/JS \u2014 packages/api/backend/scripts/seed-users.js:58", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/api/backend/scripts/seed-users.js:58"}, "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-5a63da94eadbf422", "name": "Stray `console.log` in TS/JS \u2014 packages/api/backend/utils/notify.js:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/api/backend/utils/notify.js:13"}, "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-63cec3fb3badd44c", "name": "Stray `console.log` in TS/JS \u2014 packages/api/backend/src/index.ts:69", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/api/backend/src/index.ts:69"}, "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-1ea3725630f25569", "name": "Stray `console.log` in TS/JS \u2014 packages/api/backend/src/utils/seed-default-users.ts:110", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/api/backend/src/utils/seed-default-users.ts:110"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b2ade723957dfb7c", "name": "Stray `console.log` in TS/JS \u2014 packages/api/backend/controllers/webhooks.js:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/api/backend/controllers/webhooks.js:14"}, "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-ea3d5497ce0fdbb5", "name": "Stray `console.log` in TS/JS \u2014 packages/api/backend/platforms/twitter_x.ts:392", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/api/backend/platforms/twitter_x.ts:392"}, "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-fe875c3dd2efc94e", "name": "Stray `console.log` in TS/JS \u2014 packages/api/backend/scheduler/scheduler.js:123", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/api/backend/scheduler/scheduler.js:123"}, "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-d294cf1add92e228", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/App.tsx:388", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/App.tsx:388"}, "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-35b352ed96dbaf7d", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/FileUploadDropzone.tsx:185", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/FileUploadDropzone.tsx:185"}, "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-dd2aeef7752494be", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/ChatWidget.tsx:415", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/ChatWidget.tsx:415"}, "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-3ca7d53e61f802f4", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/automation/SocialTemplatePreview.tsx:13", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/automation/SocialTemplatePreview.tsx:131"}, "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-e0d2489b9ec35f9f", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/automation/SocialTemplateNetworkTabs.ts", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/automation/SocialTemplateNetworkTabs.tsx:41"}, "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-4fbf30f1c2b00872", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/cards/ColorPickerField.tsx:92", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/cards/ColorPickerField.tsx:92"}, "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-8891faa013c3b630", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/cards/builder/LayersPanel.tsx:84", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/cards/builder/LayersPanel.tsx:84"}, "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-c0eb6524aaf216d8", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/cards/builder/PropertiesPanel.tsx:108", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/cards/builder/PropertiesPanel.tsx:108"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d80c591430019c44", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/cards/builder/ElementsPanel.tsx:112", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/cards/builder/ElementsPanel.tsx:112"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9671e001669a1804", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/cards/builder/ImageUploadModal.tsx:209", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/cards/builder/ImageUploadModal.tsx:209"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bf27f3b405b2eda4", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/admin/AdminLearn.tsx:349", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/admin/AdminLearn.tsx:349"}, "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-514c9e7e02c3afa7", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/admin/CardBuilder.tsx:334", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/admin/CardBuilder.tsx:334"}, "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-ded44d20b0e9735d", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/admin/AdminAgents.tsx:750", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/admin/AdminAgents.tsx:750"}, "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-442f93223e75fd22", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/admin/AdminCardsManagement.tsx:357", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/admin/AdminCardsManagement.tsx:357"}, "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-b950a1c107c664b6", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/admin/AdminOpenAI.tsx:252", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/admin/AdminOpenAI.tsx:252"}, "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-0b7574b681c59e84", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/admin/AdminMediaManagement.tsx:177", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/admin/AdminMediaManagement.tsx:177"}, "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-58caae81b4acbbae", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/admin/AdminMagnific.tsx:328", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/admin/AdminMagnific.tsx:328"}, "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-931321eaf3c5c430", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/admin/AdminFabricBuilder.tsx:625", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/admin/AdminFabricBuilder.tsx:625"}, "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-65bc7589ca9ee12c", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/admin/AdminHiggsfield.tsx:640", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/admin/AdminHiggsfield.tsx:640"}, "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-65577e46923117bd", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/admin/AdminKling.tsx:231", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/admin/AdminKling.tsx:231"}, "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-60ef4e9403bdb103", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/admin/AdminApify.tsx:353", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/admin/AdminApify.tsx:353"}, "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-9f3c404e0986c847", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/admin/AdminGoogle.tsx:258", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/admin/AdminGoogle.tsx:258"}, "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-aebf8f040aa8cb9f", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/media/MediaLibraryModal.tsx:370", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/media/MediaLibraryModal.tsx:370"}, "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-86712996b96d289c", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/email/EmailBuilder.tsx:918", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/email/EmailBuilder.tsx:918"}, "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-350dc8161cb75a52", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 packages/web/src/components/email/EmailBuilder.tsx:376", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 packages/web/src/components/email/EmailBuilder.tsx:376"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0ab2e9a7e9db2776", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/analytics/AccountDashboard.tsx:226", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/analytics/AccountDashboard.tsx:226"}, "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-e2e6350fdd4100f1", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/analytics/LinkedInAnalytics.tsx:285", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/analytics/LinkedInAnalytics.tsx:285"}, "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-ad0ee4b7f72abb6e", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/analytics/ComparisonView.tsx:51", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/analytics/ComparisonView.tsx:51"}, "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-09da27a3c8391efe", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/analytics/SocialAccountsOverview.tsx:16", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/analytics/SocialAccountsOverview.tsx:160"}, "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-53d808d932465926", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/analytics/PinterestAnalytics.tsx:507", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/analytics/PinterestAnalytics.tsx:507"}, "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-ea01dbcc80b74216", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/calendar/ScheduleCalendar.tsx:404", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/calendar/ScheduleCalendar.tsx:404"}, "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-1454215f82f12ab9", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/tasks/tabs/TaskMembers.tsx:47", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/tasks/tabs/TaskMembers.tsx:47"}, "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-afdeec2b1255047c", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/tasks/tabs/TaskFiles.tsx:57", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/tasks/tabs/TaskFiles.tsx:57"}, "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-55406f3eeeadfdc9", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/tasks/tabs/TaskOverview.tsx:116", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/tasks/tabs/TaskOverview.tsx:116"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-88bc5226d7bfcdc1", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/tasks/detail/TaskDetailPanel.tsx:524", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/tasks/detail/TaskDetailPanel.tsx:524"}, "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-fc2909c0a3382f0f", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/posts/batch/PlatformsModal.tsx:57", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/posts/batch/PlatformsModal.tsx:57"}, "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-96d009d4beac8045", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/crm/ScheduleMeetingModal.tsx:273", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/crm/ScheduleMeetingModal.tsx:273"}, "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-a064834a3bb13502", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/pages/Discover.tsx:108", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/pages/Discover.tsx:108"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5f48b256b6211a31", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/pages/GmailInbox.tsx:169", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/pages/GmailInbox.tsx:169"}, "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-8b3e725a92ea040b", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/pages/Posts.tsx:292", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/pages/Posts.tsx:292"}, "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-cf8cfca91b733d2c", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/pages/Workflow.tsx:431", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/pages/Workflow.tsx:431"}, "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-a0529d26d0968d72", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/pages/GmailAgent.tsx:303", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/pages/GmailAgent.tsx:303"}, "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-4ca59cfe20cbdb38", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/pages/CRMCompanies.tsx:643", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/pages/CRMCompanies.tsx:643"}, "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-45e8c8c249a540b0", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 packages/web/src/pages/CRMCompanies.tsx:212", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 packages/web/src/pages/CRMCompanies.tsx:212"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-33c1f57ebfa1143f", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 packages/web/src/pages/PublicSurvey.tsx:113", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 packages/web/src/pages/PublicSurvey.tsx:113"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f0bc0f77231b90f0", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/pages/MarketingAutomations.tsx:604", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/pages/MarketingAutomations.tsx:604"}, "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-5ac3a8f6ca87da45", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/pages/MarketingCampaigns.tsx:693", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/pages/MarketingCampaigns.tsx:693"}, "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-b5fdeed1b521e239", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/pages/Cards.tsx:468", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/pages/Cards.tsx:468"}, "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-e65caaa161d867e2", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/pages/MarketingEmail.tsx:299", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/pages/MarketingEmail.tsx:299"}, "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-1004672081bace7e", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/pages/ConnectorProviderSetup.tsx:153", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/pages/ConnectorProviderSetup.tsx:153"}, "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-3940433590c19f67", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/pages/PostAutomation.tsx:109", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/pages/PostAutomation.tsx:109"}, "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-263d322dd0914cb3", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/pages/MarketingSurveys.tsx:579", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/pages/MarketingSurveys.tsx:579"}, "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-5bcd27d9e4be355d", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/pages/AITeam.tsx:643", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/pages/AITeam.tsx:643"}, "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-782835f442b982cc", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/pages/Integrations.tsx:1418", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/pages/Integrations.tsx:1418"}, "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-ef14061b58719339", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/pages/MarketingContacts.tsx:1279", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/pages/MarketingContacts.tsx:1279"}, "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-cbe82c48c550c399", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/pages/MarketingOverview.tsx:155", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/pages/MarketingOverview.tsx:155"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7930d0f3d4d6cb66", "name": "\"active\" state uses light bg in a dark theme \u2014 packages/web/src/pages/Admin.tsx:186", "shortDescription": {"text": "\"active\" state uses light bg in a dark theme \u2014 packages/web/src/pages/Admin.tsx:186"}, "fullDescription": {"text": "A ternary like `active ? 'bg-white' : '...'` (or bg-gray-100/200) on a dark theme produces jarring white pills. Use a dark-emphasized active state instead \u2014 border + ring or slightly brighter dark bg. Example: `active ? 'bg-gray-800 border-gray-500 ring-1 ring-blue-500/30' : '\u2026'`.\n\nWhy: P-E in CHECKLIST.md \u2014 light bg in a dark theme is a class of regression.\nRule id: fq.active-light-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-835c43307f1e59d6", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 packages/web/src/pages/Auth.tsx:492", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 packages/web/src/pages/Auth.tsx:492"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7e8e7894e7511b97", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/pages/Media.tsx:397", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/pages/Media.tsx:397"}, "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-ac564edd6d408c5f", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/pages/Workspace.tsx:107", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/pages/Workspace.tsx:107"}, "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-35342ff7de01a36f", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/pages/CRMPipeline.tsx:181", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/pages/CRMPipeline.tsx:181"}, "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-304cec3a956d210b", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/pages/ConnectorSyncDashboard.tsx:404", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/pages/ConnectorSyncDashboard.tsx:404"}, "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-788cf4eb25d49e4a", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/pages/Dashboard.tsx:692", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/pages/Dashboard.tsx:692"}, "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-838ea99a91187a2f", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/pages/ProjectSettings.tsx:373", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/pages/ProjectSettings.tsx:373"}, "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-7f018748821f0664", "name": "Stray `console.log` in TS/JS \u2014 .claude/skills/remotion-to-hyperframes/scripts/tests/fixtures/clean.tsx:26", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 .claude/skills/remotion-to-hyperframes/scripts/tests/fixtures/clean.tsx:26"}, "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-d63da3583b14afc0", "name": "Dockerfile runs as root: Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-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-8a8afc8ce2ef5600", "name": "Possible secret in packages/api/src/user-auth.ts", "shortDescription": {"text": "Possible secret in packages/api/src/user-auth.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-7b37cf326d20c0ce", "name": "Insecure pattern 'local_storage_auth_token' in packages/web/src/App.tsx:1023", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in packages/web/src/App.tsx:1023"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-436d44f5b2183456", "name": "Insecure pattern 'dangerous_innerhtml' in packages/web/src/components/email/EmailBuilder.tsx:376", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in packages/web/src/components/email/EmailBuilder.tsx:376"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d0b5fb8103d7399b", "name": "Insecure pattern 'dangerous_innerhtml' in packages/web/src/pages/CRMCompanies.tsx:212", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in packages/web/src/pages/CRMCompanies.tsx:212"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-99fedd03bacfcb8b", "name": "Insecure pattern 'dangerous_innerhtml' in packages/web/src/pages/PublicSurvey.tsx:113", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in packages/web/src/pages/PublicSurvey.tsx:113"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-70f047568758b33e", "name": "Insecure pattern 'direct_innerhtml_assignment' in packages/web/src/pages/MarketingSurveys.tsx:127", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in packages/web/src/pages/MarketingSurveys.tsx:127"}, "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-116b8b53563d81f5", "name": "Insecure pattern 'exec_used' in packages/web/src/pages/MarketingContacts.tsx:1857", "shortDescription": {"text": "Insecure pattern 'exec_used' in packages/web/src/pages/MarketingContacts.tsx:1857"}, "fullDescription": {"text": "Found a known-risky pattern (exec_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-505711b2d813b4c8", "name": "Insecure pattern 'dangerous_innerhtml' in packages/web/src/pages/Auth.tsx:492", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in packages/web/src/pages/Auth.tsx:492"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-130a418be00238b2", "name": "Insecure pattern 'local_storage_auth_token' in packages/web/src/pages/Auth.tsx:355", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in packages/web/src/pages/Auth.tsx:355"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a37eefe655a49c3b", "name": "Insecure pattern 'node_child_process' in scripts/dev.mjs:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/dev.mjs:1"}, "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-594e9038ce7231e8", "name": "Insecure pattern 'node_child_process' in scripts/set-production-api.mjs:9", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/set-production-api.mjs:9"}, "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-c157671f40832885", "name": "Insecure pattern 'local_storage_auth_token' in frontend/src/utils/api.ts:34", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in frontend/src/utils/api.ts:34"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-971ef6728bdbcac3", "name": "Insecure pattern 'local_storage_auth_token' in frontend/src/store/authStore.ts:53", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in frontend/src/store/authStore.ts:53"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e9c68d8653565e05", "name": "Insecure pattern 'node_child_process' in .claude/skills/hyperframes/scripts/package-loader.mjs:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in .claude/skills/hyperframes/scripts/package-loader.mjs:1"}, "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-d1b928f8f8d158f1", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d6eb6f61f39a295c", "name": "Very large file: packages/api/backend/src/services/analytics.service.ts (10922 lines)", "shortDescription": {"text": "Very large file: packages/api/backend/src/services/analytics.service.ts (10922 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-838717c25e1c8f43", "name": "Very large file: packages/api/src/db-migrations.ts (3996 lines)", "shortDescription": {"text": "Very large file: packages/api/src/db-migrations.ts (3996 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-54321af1c3b85155", "name": "Very large file: packages/api/src/server/orgRoutes.ts (992 lines)", "shortDescription": {"text": "Very large file: packages/api/src/server/orgRoutes.ts (992 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-e2e75759bf3525f2", "name": "Very large file: packages/api/src/server/novaRoutes.ts (1823 lines)", "shortDescription": {"text": "Very large file: packages/api/src/server/novaRoutes.ts (1823 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-84b6d9966b49feb9", "name": "Very large file: packages/api/src/server/aiChatRoutes.ts (1085 lines)", "shortDescription": {"text": "Very large file: packages/api/src/server/aiChatRoutes.ts (1085 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-9176f9d581a2bfdf", "name": "Very large file: packages/api/src/server/distributionRoutes.ts (2804 lines)", "shortDescription": {"text": "Very large file: packages/api/src/server/distributionRoutes.ts (2804 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-ded4663d8945107a", "name": "Very large file: packages/api/src/server/socialRoutes.ts (1428 lines)", "shortDescription": {"text": "Very large file: packages/api/src/server/socialRoutes.ts (1428 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-5c84bc11e2cd411a", "name": "Very large file: packages/api/src/server/socialConnectRoutes.ts (1643 lines)", "shortDescription": {"text": "Very large file: packages/api/src/server/socialConnectRoutes.ts (1643 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-3a1b4078d89f46f5", "name": "Very large file: packages/web/src/App.tsx (1241 lines)", "shortDescription": {"text": "Very large file: packages/web/src/App.tsx (1241 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-2fa86e34cece1b21", "name": "Very large file: packages/web/src/components/ChatWidget.tsx (1367 lines)", "shortDescription": {"text": "Very large file: packages/web/src/components/ChatWidget.tsx (1367 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-98b9afe80d382da6", "name": "Very large file: packages/web/src/components/cards/builder/PropertiesPanel.tsx (1073 lines)", "shortDescription": {"text": "Very large file: packages/web/src/components/cards/builder/PropertiesPanel.tsx (1073 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-b2ea9a6aeede9e85", "name": "Very large file: packages/web/src/components/admin/AdminAgents.tsx (1449 lines)", "shortDescription": {"text": "Very large file: packages/web/src/components/admin/AdminAgents.tsx (1449 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-7e3a64376f167a8a", "name": "Very large file: packages/web/src/components/email/EmailBuilder.tsx (1446 lines)", "shortDescription": {"text": "Very large file: packages/web/src/components/email/EmailBuilder.tsx (1446 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-876b00b4c7eaa1ef", "name": "Very large file: packages/web/src/pages/Posts.tsx (2198 lines)", "shortDescription": {"text": "Very large file: packages/web/src/pages/Posts.tsx (2198 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-b4bd0527fcf0d80f", "name": "Very large file: packages/web/src/pages/Workflow.tsx (1175 lines)", "shortDescription": {"text": "Very large file: packages/web/src/pages/Workflow.tsx (1175 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-8a08bcedb8fb7975", "name": "Very large file: packages/web/src/pages/Landing.tsx (1217 lines)", "shortDescription": {"text": "Very large file: packages/web/src/pages/Landing.tsx (1217 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-a6f809c83890a0de", "name": "Very large file: packages/web/src/pages/CRMCompanies.tsx (1525 lines)", "shortDescription": {"text": "Very large file: packages/web/src/pages/CRMCompanies.tsx (1525 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-2f5a4cf17e5c7a59", "name": "Very large file: packages/web/src/pages/MarketingAutomations.tsx (1503 lines)", "shortDescription": {"text": "Very large file: packages/web/src/pages/MarketingAutomations.tsx (1503 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-667d1112d79fa6ca", "name": "Very large file: packages/web/src/pages/MarketingCampaigns.tsx (2012 lines)", "shortDescription": {"text": "Very large file: packages/web/src/pages/MarketingCampaigns.tsx (2012 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-0ef8dfaac124fbd3", "name": "Very large file: packages/web/src/pages/Cards.tsx (1790 lines)", "shortDescription": {"text": "Very large file: packages/web/src/pages/Cards.tsx (1790 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-de3c325ea9a094d5", "name": "Very large file: packages/web/src/pages/MarketingSurveys.tsx (998 lines)", "shortDescription": {"text": "Very large file: packages/web/src/pages/MarketingSurveys.tsx (998 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-f038781bdb9b3637", "name": "Very large file: packages/web/src/pages/AITeam.tsx (1742 lines)", "shortDescription": {"text": "Very large file: packages/web/src/pages/AITeam.tsx (1742 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-1eb14a47cb259522", "name": "Very large file: packages/web/src/pages/Integrations.tsx (1746 lines)", "shortDescription": {"text": "Very large file: packages/web/src/pages/Integrations.tsx (1746 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-507225bddfbefa3b", "name": "Very large file: packages/web/src/pages/MarketingContacts.tsx (2561 lines)", "shortDescription": {"text": "Very large file: packages/web/src/pages/MarketingContacts.tsx (2561 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": "33 test file(s) for 414 source file(s) (ratio 0.08). 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-0a0634ffe3eb1107", "name": "Node manifest has dependencies but no lockfile: packages/api/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/api/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a28850983a0b02d5", "name": "Node manifest has dependencies but no lockfile: packages/web/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/web/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-47e453b6d91595b1", "name": "Node manifest has dependencies but no lockfile: .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-c", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1829447bc11c6a6a", "name": "Node manifest has dependencies but no lockfile: .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-dr", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-86362ad75f6024fd", "name": "Node manifest has dependencies but no lockfile: .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-s", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 217 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 423 placeholder/mock markers across 75 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9d79c4077342a7d0", "name": "Runtime service client appears to use placeholder configuration", "shortDescription": {"text": "Runtime service client appears to use placeholder configuration"}, "fullDescription": {"text": "A runtime source file appears to wire Supabase/Firebase/AI/payment-style clients to placeholder URLs, keys, or fallback values. In the Fable corpus this often means the UI/API shape is present while the backend service is not actually configured."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, lockfile. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license, lockfile. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-122f91b7f2906dc4", "name": "Agent authority lacks a verifier contract: .claude/settings.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/settings.json"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c2c8044344fb49db", "name": "Agent authority lacks a verifier contract: .claude/skills/tailwind/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/tailwind/SKILL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3912a1a57c52d6f6", "name": "Agent authority lacks a verifier contract: .claude/skills/hyperframes/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/hyperframes/SKILL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4a60e968f01ab124", "name": "Agent authority lacks a verifier contract: .claude/skills/hyperframes/references/techniques.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/hyperframes/references/techniques.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0a94a522c7aac872", "name": "Agent authority lacks a verifier contract: .claude/skills/hyperframes/references/typography.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/hyperframes/references/typography.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d016aace36b42213", "name": "Agent authority lacks a verifier contract: .claude/skills/hyperframes/references/transcript-guide.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/hyperframes/references/transcript-guide.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ec2a3edfadbee5ed", "name": "Agent authority lacks a verifier contract: .claude/skills/hyperframes/references/motion-principles.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/hyperframes/references/motion-principles.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-41428002df7d07c7", "name": "Agent authority lacks a verifier contract: .claude/skills/hyperframes-registry/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/hyperframes-registry/SKILL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5cbfa57d7b11abea", "name": "Agent authority lacks a verifier contract: .claude/skills/hyperframes-registry/references/install-locations.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/hyperframes-registry/references/install-locations.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f266c5d72e112fb7", "name": "Agent authority lacks a verifier contract: .claude/skills/hyperframes-registry/references/discovery.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/hyperframes-registry/references/discovery.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f218ac5c3674a3c7", "name": "Agent authority lacks a verifier contract: .claude/skills/website-to-hyperframes/references/step-5-vo.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/website-to-hyperframes/references/step-5-vo.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-49ffd286dcbd1bf4", "name": "Agent authority lacks a verifier contract: .claude/skills/website-to-hyperframes/references/step-2-design.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/website-to-hyperframes/references/step-2-design.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9c2d5eef7893959a", "name": "Agent authority lacks a verifier contract: .claude/skills/website-to-hyperframes/references/step-6-build.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/website-to-hyperframes/references/step-6-build.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-65d7cf56ce6c6927", "name": "Agent authority lacks a verifier contract: .claude/skills/remotion-to-hyperframes/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/remotion-to-hyperframes/SKILL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-848cf9ddfbb8a287", "name": "Agent authority lacks a verifier contract: .claude/skills/remotion-to-hyperframes/references/limitations.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/remotion-to-hyperframes/references/limitations.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-891ebfefa106dd50", "name": "Agent authority lacks a verifier contract: .claude/skills/remotion-to-hyperframes/references/media.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/remotion-to-hyperframes/references/media.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ecaad27c656ba42a", "name": "Agent authority lacks a verifier contract: .claude/skills/remotion-to-hyperframes/references/fonts.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/remotion-to-hyperframes/references/fonts.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-653cf5e502a52d87", "name": "Agent authority lacks a verifier contract: .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/e", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/expected.json"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a5a86f28e9937cd7", "name": "Agent authority lacks a verifier contract: .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/R", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/README.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2bc9e25b3016bc49", "name": "Agent authority lacks a verifier contract: .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/README.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b0624263bb5c31ff", "name": "Agent authority lacks a verifier contract: .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/expected.json"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6be6b1b08b9ece5c", "name": "Agent authority lacks a verifier contract: .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/README.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d226b3425d099648", "name": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare-proxy.js:17", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare-proxy.js:17"}, "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-74784cfd3e47d43e", "name": "Legacy-named symbol `ad_copy` in packages/api/src/agent-helpers.ts:16", "shortDescription": {"text": "Legacy-named symbol `ad_copy` in packages/api/src/agent-helpers.ts:16"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bc2f8d3f1af0f63d", "name": "Legacy-named symbol `ad_copy` in packages/api/src/db-migrations.ts:2788", "shortDescription": {"text": "Legacy-named symbol `ad_copy` in packages/api/src/db-migrations.ts:2788"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4e2cc699e15cf545", "name": "Commented-code block (7 lines) in packages/api/src/db-migrations.ts:845", "shortDescription": {"text": "Commented-code block (7 lines) in packages/api/src/db-migrations.ts:845"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8675391966dea5dc", "name": "Legacy-named symbol `ad_copy` in packages/api/src/server/novaRoutes.ts:97", "shortDescription": {"text": "Legacy-named symbol `ad_copy` in packages/api/src/server/novaRoutes.ts:97"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a8e50772ce626c7a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/api/src/server/leadsRoutes.ts:26", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/api/src/server/leadsRoutes.ts:26"}, "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-8001275cb5e55c65", "name": "Commented-code block (5 lines) in packages/api/src/server/distributionRoutes.ts:859", "shortDescription": {"text": "Commented-code block (5 lines) in packages/api/src/server/distributionRoutes.ts:859"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-69081d4a44600f91", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/components/admin/AdminBillingDashboard.tsx:8", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/components/admin/AdminBillingDashboard.tsx:8"}, "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-037f87221ca19174", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/components/admin/AdminLearn.tsx:125", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/components/admin/AdminLearn.tsx:125"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6fe444d23bff5573", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/components/admin/AdminAgents.tsx:267", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/components/admin/AdminAgents.tsx:267"}, "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-c6b64aea714c3b9f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/components/admin/AdminAIConfig.tsx:70", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/components/admin/AdminAIConfig.tsx:70"}, "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-cd66f5ebee3d58ff", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/components/admin/AdminHiggsfield.tsx:215", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/components/admin/AdminHiggsfield.tsx: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-bac3ae430ae5b9d8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/components/admin/AdminAISkills.tsx:127", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/components/admin/AdminAISkills.tsx:127"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-89d6fa7ff95ecedd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/components/admin/AdminPlatformSettings.tsx:159", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/components/admin/AdminPlatformSettings.tsx:159"}, "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-b4bf6d914726ceb0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/components/crm/ScheduleMeetingModal.tsx:345", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/components/crm/ScheduleMeetingModal.tsx:345"}, "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-06849c3acb30cd52", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/pages/GmailInbox.tsx:416", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/pages/GmailInbox.tsx:416"}, "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-b915f91604197baf", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/pages/Workflow.tsx:13", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/pages/Workflow.tsx:13"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-59416b54f413a0c1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/pages/CRMLeadScoring.tsx:119", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/pages/CRMLeadScoring.tsx:119"}, "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-ece8c0ee827e156c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/pages/CRMCompanies.tsx:888", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/pages/CRMCompanies.tsx:888"}, "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-286395b5a8e10703", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/pages/VerifyEmail.tsx:18", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/pages/VerifyEmail.tsx:18"}, "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-b5a2b7c92ee7ea41", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/pages/MarketingAutomations.tsx:151", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/pages/MarketingAutomations.tsx:151"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9ed64aa97ccce44", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/pages/Cards.tsx:236", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/pages/Cards.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-e929d53316692576", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/pages/ConnectorProviderSetup.tsx:212", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/pages/ConnectorProviderSetup.tsx:212"}, "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-24333d52760dbe82", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/pages/Notifications.tsx:85", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/pages/Notifications.tsx:85"}, "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-87e8e33e54db71d2", "name": "Legacy-named symbol `ad_copy` in packages/web/src/pages/AITeam.tsx:121", "shortDescription": {"text": "Legacy-named symbol `ad_copy` in packages/web/src/pages/AITeam.tsx:121"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-eb6df56e8a602877", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/pages/AITeam.tsx:1304", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/pages/AITeam.tsx:1304"}, "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-cfbe33dd5615d4d9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/pages/Settings.tsx:263", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/pages/Settings.tsx:263"}, "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-ac89ffdc0f4514b4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/pages/Auth.tsx:348", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/pages/Auth.tsx:348"}, "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-1c3d319ad80edb20", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/pages/CRMPipeline.tsx:336", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/pages/CRMPipeline.tsx:336"}, "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-098e93cb85ede165", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/pages/ConnectorSyncDashboard.tsx:184", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/pages/ConnectorSyncDashboard.tsx:184"}, "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-8d7a2d0f6465d6a7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/pages/ProjectSettings.tsx:95", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/pages/ProjectSettings.tsx:95"}, "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-0c78f37b11a5e842", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/services/leadService.ts:38", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/services/leadService.ts:38"}, "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-6f90ad028acb07c1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/services/calendarService.ts:62", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/services/calendarService.ts:62"}, "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-9448af408eef400f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/services/pricingService.ts:31", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/services/pricingService.ts: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-91072353ec485143", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/services/campaignService.ts:166", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/services/campaignService.ts:166"}, "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-41c0ca24244cb7d9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/services/socialTemplateService.ts:62", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/services/socialTemplateService.ts:62"}, "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-dec588aa34d268ae", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/services/cardTemplateService.ts:32", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/services/cardTemplateService.ts:32"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4007f645c2d39371", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/services/mediaService.ts:67", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/services/mediaService.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-dbcb0a41fac58ed1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/services/designService.ts:22", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/services/designService.ts:22"}, "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-a810d20064fb7710", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/services/blogService.ts:96", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/services/blogService.ts:96"}, "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-255b5d80496d7867", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/services/socialPostService.ts:66", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/services/socialPostService.ts: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-f80a5c97d7ee794e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/services/adminUserService.ts:43", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/services/adminUserService.ts:43"}, "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-c2023fc0faeb61e8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/services/surveysService.ts:66", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/services/surveysService.ts: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-8a48a4e321cf613a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/services/mailingService.ts:98", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/services/mailingService.ts: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-c9b22dc019b43aa8", "name": "Commented-code block (15 lines) in scripts/archive/extract-db-migrations.mjs:38", "shortDescription": {"text": "Commented-code block (15 lines) in scripts/archive/extract-db-migrations.mjs:38"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-77209cf20e3fb795", "name": "Commented-code block (6 lines) in scripts/archive/wire-social-connect-routes.mjs:13", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/archive/wire-social-connect-routes.mjs:13"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-265905645531af56", "name": "Network/subprocess call without timeout or try/except \u2014 .claude/skills/gsap/scripts/extract-audio-data.py:52", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 .claude/skills/gsap/scripts/extract-audio-data.py:52"}, "fullDescription": {"text": "`subprocess.run(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a7339f870dd831a9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-ha", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/08-mixed.tsx:25"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f502845f2fd35815", "name": "`fetch()` without try/.catch or AbortSignal \u2014 .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-ha", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/03-async-metadata.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-30beb4d95741b6b4", "name": "Commented-code block (6 lines) in .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/04", "shortDescription": {"text": "Commented-code block (6 lines) in .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/04-third-party-react.tsx:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b7553d121a6a04c6", "name": "Commented-code block (6 lines) in .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/05", "shortDescription": {"text": "Commented-code block (6 lines) in .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/05-lambda-config.tsx:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-226522e03cfab62d", "name": "45 env vars used in code but missing from .env.example", "shortDescription": {"text": "45 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `API_PUBLIC_URL`, `API_URL`, `BACKEND_PUBLIC_URL`, `BULLMQ_REDIS_URL`, `FREEPIK_API_KEY`, `FRONTEND_ORIGIN`, `GEMINI_API_KEY`, `GOOGLE_AI_API_KEY` + 37 more. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6f9c8fbc479e98e0", "name": "Frontend route `/posts/:id` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/posts/:id` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c46488f8312cc04d", "name": "Frontend route `/analytics` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/analytics` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-09126f544c751aa8", "name": "Dangling fetch: POST https://api.twitter.com/2/oauth2/token (packages/api/backend/src/services/integration.service.ts:26", "shortDescription": {"text": "Dangling fetch: POST https://api.twitter.com/2/oauth2/token (packages/api/backend/src/services/integration.service.ts:261)"}, "fullDescription": {"text": "`packages/api/backend/src/services/integration.service.ts:261` calls `POST https://api.twitter.com/2/oauth2/token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.twitter.com/<p>/oauth2/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-1d41162434474955", "name": "Dangling fetch: POST https://www.linkedin.com/oauth/v2/accessToken (packages/api/backend/src/services/integration.servic", "shortDescription": {"text": "Dangling fetch: POST https://www.linkedin.com/oauth/v2/accessToken (packages/api/backend/src/services/integration.service.ts:285)"}, "fullDescription": {"text": "`packages/api/backend/src/services/integration.service.ts:285` calls `POST https://www.linkedin.com/oauth/v2/accessToken` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/www.linkedin.com/oauth/v2/accesstoken`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-551e48d6715c826b", "name": "Dangling fetch: POST https://api.pinterest.com/v5/oauth/token (packages/api/backend/src/services/integration.service.ts:", "shortDescription": {"text": "Dangling fetch: POST https://api.pinterest.com/v5/oauth/token (packages/api/backend/src/services/integration.service.ts:304)"}, "fullDescription": {"text": "`packages/api/backend/src/services/integration.service.ts:304` calls `POST https://api.pinterest.com/v5/oauth/token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.pinterest.com/v5/oauth/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-24440dbbb4466c99", "name": "Dangling fetch: GET https://graph.facebook.com/v18.0/oauth/access_token (packages/api/backend/src/services/integration.s", "shortDescription": {"text": "Dangling fetch: GET https://graph.facebook.com/v18.0/oauth/access_token (packages/api/backend/src/services/integration.service.ts:322)"}, "fullDescription": {"text": "`packages/api/backend/src/services/integration.service.ts:322` calls `GET https://graph.facebook.com/v18.0/oauth/access_token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/graph.facebook.com/v18.0/oauth/access_token`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-70418b6a97da049f", "name": "Dangling fetch: POST https://api.twitter.com/2/oauth2/token (packages/api/backend/src/services/integration.service.ts:36", "shortDescription": {"text": "Dangling fetch: POST https://api.twitter.com/2/oauth2/token (packages/api/backend/src/services/integration.service.ts:367)"}, "fullDescription": {"text": "`packages/api/backend/src/services/integration.service.ts:367` calls `POST https://api.twitter.com/2/oauth2/token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.twitter.com/<p>/oauth2/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-c865f3e8cec8e02a", "name": "Dangling fetch: POST https://www.linkedin.com/oauth/v2/accessToken (packages/api/backend/src/services/integration.servic", "shortDescription": {"text": "Dangling fetch: POST https://www.linkedin.com/oauth/v2/accessToken (packages/api/backend/src/services/integration.service.ts:384)"}, "fullDescription": {"text": "`packages/api/backend/src/services/integration.service.ts:384` calls `POST https://www.linkedin.com/oauth/v2/accessToken` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/www.linkedin.com/oauth/v2/accesstoken`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-618e4ee2966938b7", "name": "Dangling fetch: POST https://api.pinterest.com/v5/oauth/token (packages/api/backend/src/services/integration.service.ts:", "shortDescription": {"text": "Dangling fetch: POST https://api.pinterest.com/v5/oauth/token (packages/api/backend/src/services/integration.service.ts:400)"}, "fullDescription": {"text": "`packages/api/backend/src/services/integration.service.ts:400` calls `POST https://api.pinterest.com/v5/oauth/token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.pinterest.com/v5/oauth/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-3be78701c1459018", "name": "Dangling fetch: GET https://graph.facebook.com/v18.0/oauth/access_token (packages/api/backend/src/services/integration.s", "shortDescription": {"text": "Dangling fetch: GET https://graph.facebook.com/v18.0/oauth/access_token (packages/api/backend/src/services/integration.service.ts:416)"}, "fullDescription": {"text": "`packages/api/backend/src/services/integration.service.ts:416` calls `GET https://graph.facebook.com/v18.0/oauth/access_token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/graph.facebook.com/v18.0/oauth/access_token`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f44ad333763a9f6e", "name": "Dangling fetch: GET https://open.tiktokapis.com/v2/video/list/ (packages/api/backend/src/services/analytics.service.ts:1", "shortDescription": {"text": "Dangling fetch: GET https://open.tiktokapis.com/v2/video/list/ (packages/api/backend/src/services/analytics.service.ts:10022)"}, "fullDescription": {"text": "`packages/api/backend/src/services/analytics.service.ts:10022` calls `GET https://open.tiktokapis.com/v2/video/list/` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/open.tiktokapis.com/v2/video/list`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c9190bd88e669b02", "name": "Dangling fetch: POST https://api.pinterest.com/v5/pins (packages/api/backend/src/services/platform-adapters/pinterest.ad", "shortDescription": {"text": "Dangling fetch: POST https://api.pinterest.com/v5/pins (packages/api/backend/src/services/platform-adapters/pinterest.adapter.ts:15)"}, "fullDescription": {"text": "`packages/api/backend/src/services/platform-adapters/pinterest.adapter.ts:15` calls `POST https://api.pinterest.com/v5/pins` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.pinterest.com/v5/pins`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2147a57b637ea277", "name": "Dangling fetch: GET https://api.pinterest.com/v5/user_account (packages/api/backend/src/services/platform-adapters/pinte", "shortDescription": {"text": "Dangling fetch: GET https://api.pinterest.com/v5/user_account (packages/api/backend/src/services/platform-adapters/pinterest.adapter.ts:48)"}, "fullDescription": {"text": "`packages/api/backend/src/services/platform-adapters/pinterest.adapter.ts:48` calls `GET https://api.pinterest.com/v5/user_account` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.pinterest.com/v5/user_account`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6792b2718577bfda", "name": "Dangling fetch: GET https://api.pinterest.com/v5/user_account (packages/api/backend/src/services/platform-adapters/pinte", "shortDescription": {"text": "Dangling fetch: GET https://api.pinterest.com/v5/user_account (packages/api/backend/src/services/platform-adapters/pinterest.adapter.ts:59)"}, "fullDescription": {"text": "`packages/api/backend/src/services/platform-adapters/pinterest.adapter.ts:59` calls `GET https://api.pinterest.com/v5/user_account` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.pinterest.com/v5/user_account`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-02d1d0275dbfb370", "name": "Dangling fetch: GET https://api.pinterest.com/v5/boards (packages/api/backend/src/services/platform-adapters/pinterest.a", "shortDescription": {"text": "Dangling fetch: GET https://api.pinterest.com/v5/boards (packages/api/backend/src/services/platform-adapters/pinterest.adapter.ts:84)"}, "fullDescription": {"text": "`packages/api/backend/src/services/platform-adapters/pinterest.adapter.ts:84` calls `GET https://api.pinterest.com/v5/boards` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.pinterest.com/v5/boards`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2cea0177cd953733", "name": "Dangling fetch: POST https://api.linkedin.com/v2/ugcPosts (packages/api/backend/src/services/platform-adapters/linkedin.", "shortDescription": {"text": "Dangling fetch: POST https://api.linkedin.com/v2/ugcPosts (packages/api/backend/src/services/platform-adapters/linkedin.adapter.ts:33)"}, "fullDescription": {"text": "`packages/api/backend/src/services/platform-adapters/linkedin.adapter.ts:33` calls `POST https://api.linkedin.com/v2/ugcPosts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.linkedin.com/v2/ugcposts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-15a0817e5395da03", "name": "Dangling fetch: GET https://api.linkedin.com/v2/me (packages/api/backend/src/services/platform-adapters/linkedin.adapter", "shortDescription": {"text": "Dangling fetch: GET https://api.linkedin.com/v2/me (packages/api/backend/src/services/platform-adapters/linkedin.adapter.ts:62)"}, "fullDescription": {"text": "`packages/api/backend/src/services/platform-adapters/linkedin.adapter.ts:62` calls `GET https://api.linkedin.com/v2/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.linkedin.com/v2/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-91545d37f191643e", "name": "Dangling fetch: GET https://api.linkedin.com/v2/organizations/${encodeURIComponent(organizationId)}?projection=(id,local", "shortDescription": {"text": "Dangling fetch: GET https://api.linkedin.com/v2/organizations/${encodeURIComponent(organizationId)}?projection=(id,localizedName,followerCount,description,website) (packages/api/backend/src/services/platform-adapters/linkedin.adapter.ts:73)"}, "fullDescription": {"text": "`packages/api/backend/src/services/platform-adapters/linkedin.adapter.ts:73` calls `GET https://api.linkedin.com/v2/organizations/${encodeURIComponent(organizationId)}?projection=(id,localizedName,followerCount,description,website)` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.linkedin.com/v2/organizations/<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-6e440b85d998308a", "name": "Dangling fetch: GET https://api.linkedin.com/v2/me (packages/api/backend/src/services/platform-adapters/linkedin.adapter", "shortDescription": {"text": "Dangling fetch: GET https://api.linkedin.com/v2/me (packages/api/backend/src/services/platform-adapters/linkedin.adapter.ts:95)"}, "fullDescription": {"text": "`packages/api/backend/src/services/platform-adapters/linkedin.adapter.ts:95` calls `GET https://api.linkedin.com/v2/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.linkedin.com/v2/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-768aa424a87f8107", "name": "Dangling fetch: GET https://api.linkedin.com/v2/emailAddress?q=members&projection=(elements*(handle~)) (packages/api/bac", "shortDescription": {"text": "Dangling fetch: GET https://api.linkedin.com/v2/emailAddress?q=members&projection=(elements*(handle~)) (packages/api/backend/src/services/platform-adapters/linkedin.adapter.ts:98)"}, "fullDescription": {"text": "`packages/api/backend/src/services/platform-adapters/linkedin.adapter.ts:98` calls `GET https://api.linkedin.com/v2/emailAddress?q=members&projection=(elements*(handle~))` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.linkedin.com/v2/emailaddress`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-27fefa07ad20992e", "name": "Dangling fetch: GET https://api.linkedin.com/v2/organizationalEntityShareStatistics (packages/api/backend/src/services/p", "shortDescription": {"text": "Dangling fetch: GET https://api.linkedin.com/v2/organizationalEntityShareStatistics (packages/api/backend/src/services/platform-adapters/linkedin.adapter.ts:123)"}, "fullDescription": {"text": "`packages/api/backend/src/services/platform-adapters/linkedin.adapter.ts:123` calls `GET https://api.linkedin.com/v2/organizationalEntityShareStatistics` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.linkedin.com/v2/organizationalentitysharestatistics`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-416438c1d30012ba", "name": "Dangling fetch: GET https://api.twitter.com/2/users/${encodeURIComponent(userId)} (packages/api/backend/src/services/pla", "shortDescription": {"text": "Dangling fetch: GET https://api.twitter.com/2/users/${encodeURIComponent(userId)} (packages/api/backend/src/services/platform-adapters/twitter.adapter.ts:328)"}, "fullDescription": {"text": "`packages/api/backend/src/services/platform-adapters/twitter.adapter.ts:328` calls `GET https://api.twitter.com/2/users/${encodeURIComponent(userId)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.twitter.com/<p>/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-b8ee2471e1b6f750", "name": "Dangling fetch: GET https://api.twitter.com/2/tweets/${encodeURIComponent(tweetId)} (packages/api/backend/src/services/p", "shortDescription": {"text": "Dangling fetch: GET https://api.twitter.com/2/tweets/${encodeURIComponent(tweetId)} (packages/api/backend/src/services/platform-adapters/twitter.adapter.ts:368)"}, "fullDescription": {"text": "`packages/api/backend/src/services/platform-adapters/twitter.adapter.ts:368` calls `GET https://api.twitter.com/2/tweets/${encodeURIComponent(tweetId)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.twitter.com/<p>/tweets/<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-ce21862e29174927", "name": "Dangling fetch: GET https://api.twitter.com/2/users/${encodeURIComponent(userId)}/tweets (packages/api/backend/src/servi", "shortDescription": {"text": "Dangling fetch: GET https://api.twitter.com/2/users/${encodeURIComponent(userId)}/tweets (packages/api/backend/src/services/platform-adapters/twitter.adapter.ts:400)"}, "fullDescription": {"text": "`packages/api/backend/src/services/platform-adapters/twitter.adapter.ts:400` calls `GET https://api.twitter.com/2/users/${encodeURIComponent(userId)}/tweets` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.twitter.com/<p>/users/<p>/tweets`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5a2321163ea7a449", "name": "Dangling fetch: GET https://open.tiktokapis.com/v2/video/list/ (packages/api/backend/src/routes/analytics.routes.ts:1112", "shortDescription": {"text": "Dangling fetch: GET https://open.tiktokapis.com/v2/video/list/ (packages/api/backend/src/routes/analytics.routes.ts:1112)"}, "fullDescription": {"text": "`packages/api/backend/src/routes/analytics.routes.ts:1112` calls `GET https://open.tiktokapis.com/v2/video/list/` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/open.tiktokapis.com/v2/video/list`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-273ccbf1fe543ee3", "name": "Dangling fetch: GET https://api.linkedin.com/rest/socialMetadata/${encodeURIComponent(postId)} (packages/api/backend/pla", "shortDescription": {"text": "Dangling fetch: GET https://api.linkedin.com/rest/socialMetadata/${encodeURIComponent(postId)} (packages/api/backend/platforms/linkedin.ts:469)"}, "fullDescription": {"text": "`packages/api/backend/platforms/linkedin.ts:469` calls `GET https://api.linkedin.com/rest/socialMetadata/${encodeURIComponent(postId)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.linkedin.com/rest/socialmetadata/<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-2bad1bed13190945", "name": "Dangling fetch: POST https://www.linkedin.com/oauth/v2/accessToken (packages/api/backend/platforms/linkedin.ts:500)", "shortDescription": {"text": "Dangling fetch: POST https://www.linkedin.com/oauth/v2/accessToken (packages/api/backend/platforms/linkedin.ts:500)"}, "fullDescription": {"text": "`packages/api/backend/platforms/linkedin.ts:500` calls `POST https://www.linkedin.com/oauth/v2/accessToken` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/www.linkedin.com/oauth/v2/accesstoken`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0b34d30f7c28bd53", "name": "Dangling fetch: POST https://api.imgbb.com/1/upload (packages/api/src/server/openaiRoutes.ts:60)", "shortDescription": {"text": "Dangling fetch: POST https://api.imgbb.com/1/upload (packages/api/src/server/openaiRoutes.ts:60)"}, "fullDescription": {"text": "`packages/api/src/server/openaiRoutes.ts:60` calls `POST https://api.imgbb.com/1/upload` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.imgbb.com/<p>/upload`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-62f8a2e829870360", "name": "Dangling fetch: GET https://date.nager.at/api/v3/publicholidays/${yr}/${cc} (packages/api/src/server/calendarRoutes.ts:2", "shortDescription": {"text": "Dangling fetch: GET https://date.nager.at/api/v3/publicholidays/${yr}/${cc} (packages/api/src/server/calendarRoutes.ts:296)"}, "fullDescription": {"text": "`packages/api/src/server/calendarRoutes.ts:296` calls `GET https://date.nager.at/api/v3/publicholidays/${yr}/${cc}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/date.nager.at/api/v3/publicholidays/<p>/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f4741c0fe4c3d4ad", "name": "Dangling fetch: GET https://${serverPrefix}.api.mailchimp.com/3.0/ (packages/api/src/server/platformConfigRoutes.ts:243)", "shortDescription": {"text": "Dangling fetch: GET https://${serverPrefix}.api.mailchimp.com/3.0/ (packages/api/src/server/platformConfigRoutes.ts:243)"}, "fullDescription": {"text": "`packages/api/src/server/platformConfigRoutes.ts:243` calls `GET https://${serverPrefix}.api.mailchimp.com/3.0/` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/<p>.api.mailchimp.com/3.0`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7f57a0a7771aa26a", "name": "Dangling fetch: GET https://api.openai.com/v1/models (packages/api/src/server/platformConfigRoutes.ts:251)", "shortDescription": {"text": "Dangling fetch: GET https://api.openai.com/v1/models (packages/api/src/server/platformConfigRoutes.ts:251)"}, "fullDescription": {"text": "`packages/api/src/server/platformConfigRoutes.ts:251` calls `GET https://api.openai.com/v1/models` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.openai.com/v1/models`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-447b431d29e4c9f1", "name": "Dangling fetch: GET https://api.webflow.com/v2/sites (packages/api/src/server/platformConfigRoutes.ts:259)", "shortDescription": {"text": "Dangling fetch: GET https://api.webflow.com/v2/sites (packages/api/src/server/platformConfigRoutes.ts:259)"}, "fullDescription": {"text": "`packages/api/src/server/platformConfigRoutes.ts:259` calls `GET https://api.webflow.com/v2/sites` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.webflow.com/v2/sites`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ba12a416734f3eb9", "name": "Dangling fetch: GET https://api.stripe.com/v1/account (packages/api/src/server/platformConfigRoutes.ts:267)", "shortDescription": {"text": "Dangling fetch: GET https://api.stripe.com/v1/account (packages/api/src/server/platformConfigRoutes.ts:267)"}, "fullDescription": {"text": "`packages/api/src/server/platformConfigRoutes.ts:267` calls `GET https://api.stripe.com/v1/account` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.stripe.com/v1/account`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-083185e2b01c817c", "name": "Dangling fetch: POST https://api.linear.app/graphql (packages/api/src/server/platformConfigRoutes.ts:275)", "shortDescription": {"text": "Dangling fetch: POST https://api.linear.app/graphql (packages/api/src/server/platformConfigRoutes.ts:275)"}, "fullDescription": {"text": "`packages/api/src/server/platformConfigRoutes.ts:275` calls `POST https://api.linear.app/graphql` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.linear.app/graphql`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1ae936ad5f750ff2", "name": "Dangling fetch: GET https://connect.squareup.com/v2/locations (packages/api/src/server/platformConfigRoutes.ts:285)", "shortDescription": {"text": "Dangling fetch: GET https://connect.squareup.com/v2/locations (packages/api/src/server/platformConfigRoutes.ts:285)"}, "fullDescription": {"text": "`packages/api/src/server/platformConfigRoutes.ts:285` calls `GET https://connect.squareup.com/v2/locations` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/connect.squareup.com/v2/locations`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e06b8a4f253f04cf", "name": "Dangling fetch: GET https://api.apify.com/v2/users/me (packages/api/src/server/platformConfigRoutes.ts:302)", "shortDescription": {"text": "Dangling fetch: GET https://api.apify.com/v2/users/me (packages/api/src/server/platformConfigRoutes.ts:302)"}, "fullDescription": {"text": "`packages/api/src/server/platformConfigRoutes.ts:302` calls `GET https://api.apify.com/v2/users/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.apify.com/v2/users/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-83f2b61c7daba49c", "name": "Dangling fetch: GET https://api.apify.com/v2/users/me (packages/api/src/server/apifyRoutes.ts:33)", "shortDescription": {"text": "Dangling fetch: GET https://api.apify.com/v2/users/me (packages/api/src/server/apifyRoutes.ts:33)"}, "fullDescription": {"text": "`packages/api/src/server/apifyRoutes.ts:33` calls `GET https://api.apify.com/v2/users/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.apify.com/v2/users/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2800c959f0682f19", "name": "Dangling fetch: POST https://api.apify.com/v2/acts/${apifyActorId}/runs (packages/api/src/server/apifyRoutes.ts:111)", "shortDescription": {"text": "Dangling fetch: POST https://api.apify.com/v2/acts/${apifyActorId}/runs (packages/api/src/server/apifyRoutes.ts:111)"}, "fullDescription": {"text": "`packages/api/src/server/apifyRoutes.ts:111` calls `POST https://api.apify.com/v2/acts/${apifyActorId}/runs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.apify.com/v2/acts/<p>/runs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-47993beabde11471", "name": "Dangling fetch: GET https://api.apify.com/v2/actor-runs/${run.apify_run_id} (packages/api/src/server/apifyRoutes.ts:148)", "shortDescription": {"text": "Dangling fetch: GET https://api.apify.com/v2/actor-runs/${run.apify_run_id} (packages/api/src/server/apifyRoutes.ts:148)"}, "fullDescription": {"text": "`packages/api/src/server/apifyRoutes.ts:148` calls `GET https://api.apify.com/v2/actor-runs/${run.apify_run_id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.apify.com/v2/actor-runs/<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-1fca8818b806baf6", "name": "Dangling fetch: GET https://api.linkedin.com/v2/me (packages/api/src/server/linkedinRoutes.ts:95)", "shortDescription": {"text": "Dangling fetch: GET https://api.linkedin.com/v2/me (packages/api/src/server/linkedinRoutes.ts:95)"}, "fullDescription": {"text": "`packages/api/src/server/linkedinRoutes.ts:95` calls `GET https://api.linkedin.com/v2/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.linkedin.com/v2/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0a735de9b75d1b9e", "name": "Dangling fetch: GET https://api.linkedin.com/v2/userinfo (packages/api/src/server/linkedinRoutes.ts:106)", "shortDescription": {"text": "Dangling fetch: GET https://api.linkedin.com/v2/userinfo (packages/api/src/server/linkedinRoutes.ts:106)"}, "fullDescription": {"text": "`packages/api/src/server/linkedinRoutes.ts:106` calls `GET https://api.linkedin.com/v2/userinfo` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.linkedin.com/v2/userinfo`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a2d608da13f90d78", "name": "Dangling fetch: GET https://api.linkedin.com/rest/organizationalEntityFollowerStatistics (packages/api/src/server/linked", "shortDescription": {"text": "Dangling fetch: GET https://api.linkedin.com/rest/organizationalEntityFollowerStatistics (packages/api/src/server/linkedinRoutes.ts:263)"}, "fullDescription": {"text": "`packages/api/src/server/linkedinRoutes.ts:263` calls `GET https://api.linkedin.com/rest/organizationalEntityFollowerStatistics` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.linkedin.com/rest/organizationalentityfollowerstatistics`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b44cd4398c81cc1f", "name": "Dangling fetch: GET https://api.linkedin.com/rest/organizationPageStatistics (packages/api/src/server/linkedinRoutes.ts:", "shortDescription": {"text": "Dangling fetch: GET https://api.linkedin.com/rest/organizationPageStatistics (packages/api/src/server/linkedinRoutes.ts:264)"}, "fullDescription": {"text": "`packages/api/src/server/linkedinRoutes.ts:264` calls `GET https://api.linkedin.com/rest/organizationPageStatistics` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.linkedin.com/rest/organizationpagestatistics`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-42b8410d0ac69c91", "name": "Dangling fetch: GET https://api.linkedin.com/rest/organizationalEntityShareStatistics (packages/api/src/server/linkedinR", "shortDescription": {"text": "Dangling fetch: GET https://api.linkedin.com/rest/organizationalEntityShareStatistics (packages/api/src/server/linkedinRoutes.ts:268)"}, "fullDescription": {"text": "`packages/api/src/server/linkedinRoutes.ts:268` calls `GET https://api.linkedin.com/rest/organizationalEntityShareStatistics` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.linkedin.com/rest/organizationalentitysharestatistics`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6a8c2f466604ed9e", "name": "Dangling fetch: POST https://oauth2.googleapis.com/token (packages/api/src/server/leadsRoutes.ts:26)", "shortDescription": {"text": "Dangling fetch: POST https://oauth2.googleapis.com/token (packages/api/src/server/leadsRoutes.ts:26)"}, "fullDescription": {"text": "`packages/api/src/server/leadsRoutes.ts:26` calls `POST https://oauth2.googleapis.com/token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/oauth2.googleapis.com/token`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-58d1674ecd2c9307", "name": "Dangling fetch: POST https://oauth2.googleapis.com/token (packages/api/src/server/leadsRoutes.ts:245)", "shortDescription": {"text": "Dangling fetch: POST https://oauth2.googleapis.com/token (packages/api/src/server/leadsRoutes.ts:245)"}, "fullDescription": {"text": "`packages/api/src/server/leadsRoutes.ts:245` calls `POST https://oauth2.googleapis.com/token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/oauth2.googleapis.com/token`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-20e0af8127a6dede", "name": "Dangling fetch: GET https://www.googleapis.com/oauth2/v3/userinfo (packages/api/src/server/leadsRoutes.ts:252)", "shortDescription": {"text": "Dangling fetch: GET https://www.googleapis.com/oauth2/v3/userinfo (packages/api/src/server/leadsRoutes.ts:252)"}, "fullDescription": {"text": "`packages/api/src/server/leadsRoutes.ts:252` calls `GET https://www.googleapis.com/oauth2/v3/userinfo` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/www.googleapis.com/oauth2/v3/userinfo`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e8e9db2276ad5ed1", "name": "Dangling fetch: GET https://sheets.googleapis.com/v4/spreadsheets/${req.params.fileId}?fields=sheets.properties(sheetId,", "shortDescription": {"text": "Dangling fetch: GET https://sheets.googleapis.com/v4/spreadsheets/${req.params.fileId}?fields=sheets.properties(sheetId,title) (packages/api/src/server/leadsRoutes.ts:300)"}, "fullDescription": {"text": "`packages/api/src/server/leadsRoutes.ts:300` calls `GET https://sheets.googleapis.com/v4/spreadsheets/${req.params.fileId}?fields=sheets.properties(sheetId,title)` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/sheets.googleapis.com/v4/spreadsheets/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f293175b094b22bb", "name": "Dangling fetch: GET https://sheets.googleapis.com/v4/spreadsheets/${grp.linked_sheet_id}/values/${range} (packages/api/s", "shortDescription": {"text": "Dangling fetch: GET https://sheets.googleapis.com/v4/spreadsheets/${grp.linked_sheet_id}/values/${range} (packages/api/src/server/leadsRoutes.ts:329)"}, "fullDescription": {"text": "`packages/api/src/server/leadsRoutes.ts:329` calls `GET https://sheets.googleapis.com/v4/spreadsheets/${grp.linked_sheet_id}/values/${range}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/sheets.googleapis.com/v4/spreadsheets/<p>/values/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4060c5019b30864c", "name": "Dangling fetch: POST https://oauth2.googleapis.com/token (packages/api/src/server/leadsRoutes.ts:402)", "shortDescription": {"text": "Dangling fetch: POST https://oauth2.googleapis.com/token (packages/api/src/server/leadsRoutes.ts:402)"}, "fullDescription": {"text": "`packages/api/src/server/leadsRoutes.ts:402` calls `POST https://oauth2.googleapis.com/token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/oauth2.googleapis.com/token`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a97361c426248689", "name": "Dangling fetch: GET https://www.googleapis.com/oauth2/v3/userinfo (packages/api/src/server/leadsRoutes.ts:409)", "shortDescription": {"text": "Dangling fetch: GET https://www.googleapis.com/oauth2/v3/userinfo (packages/api/src/server/leadsRoutes.ts:409)"}, "fullDescription": {"text": "`packages/api/src/server/leadsRoutes.ts:409` calls `GET https://www.googleapis.com/oauth2/v3/userinfo` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/www.googleapis.com/oauth2/v3/userinfo`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-225f5dcd5f8438ed", "name": "Dangling fetch: GET https://sheets.googleapis.com/v4/spreadsheets/${req.params.fileId}?fields=sheets.properties(sheetId,", "shortDescription": {"text": "Dangling fetch: GET https://sheets.googleapis.com/v4/spreadsheets/${req.params.fileId}?fields=sheets.properties(sheetId,title) (packages/api/src/server/leadsRoutes.ts:453)"}, "fullDescription": {"text": "`packages/api/src/server/leadsRoutes.ts:453` calls `GET https://sheets.googleapis.com/v4/spreadsheets/${req.params.fileId}?fields=sheets.properties(sheetId,title)` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/sheets.googleapis.com/v4/spreadsheets/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-57b9418717a4c6d1", "name": "Dangling fetch: POST https://api.apify.com/v2/acts/${apifyActorId}/runs (packages/api/src/server/memoryAgentRoutes.ts:33", "shortDescription": {"text": "Dangling fetch: POST https://api.apify.com/v2/acts/${apifyActorId}/runs (packages/api/src/server/memoryAgentRoutes.ts:338)"}, "fullDescription": {"text": "`packages/api/src/server/memoryAgentRoutes.ts:338` calls `POST https://api.apify.com/v2/acts/${apifyActorId}/runs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.apify.com/v2/acts/<p>/runs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c4f86e3a886cdfba", "name": "Dangling fetch: GET https://api.apify.com/v2/datasets/${run.defaultDatasetId}/items (packages/api/src/server/memoryAgent", "shortDescription": {"text": "Dangling fetch: GET https://api.apify.com/v2/datasets/${run.defaultDatasetId}/items (packages/api/src/server/memoryAgentRoutes.ts:347)"}, "fullDescription": {"text": "`packages/api/src/server/memoryAgentRoutes.ts:347` calls `GET https://api.apify.com/v2/datasets/${run.defaultDatasetId}/items` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.apify.com/v2/datasets/<p>/items`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5fffc486dc1ca129", "name": "Dangling fetch: GET https://api.linkedin.com/v2/me (packages/api/src/server/distributionRoutes.ts:647)", "shortDescription": {"text": "Dangling fetch: GET https://api.linkedin.com/v2/me (packages/api/src/server/distributionRoutes.ts:647)"}, "fullDescription": {"text": "`packages/api/src/server/distributionRoutes.ts:647` calls `GET https://api.linkedin.com/v2/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.linkedin.com/v2/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e2ed1b27b0c09037", "name": "Dangling fetch: GET https://api.linkedin.com/v2/userinfo (packages/api/src/server/distributionRoutes.ts:658)", "shortDescription": {"text": "Dangling fetch: GET https://api.linkedin.com/v2/userinfo (packages/api/src/server/distributionRoutes.ts:658)"}, "fullDescription": {"text": "`packages/api/src/server/distributionRoutes.ts:658` calls `GET https://api.linkedin.com/v2/userinfo` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.linkedin.com/v2/userinfo`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-202caf13e887eb52", "name": "Dangling fetch: POST https://open.tiktokapis.com/v2/oauth/token/ (packages/api/src/server/distributionRoutes.ts:823)", "shortDescription": {"text": "Dangling fetch: POST https://open.tiktokapis.com/v2/oauth/token/ (packages/api/src/server/distributionRoutes.ts:823)"}, "fullDescription": {"text": "`packages/api/src/server/distributionRoutes.ts:823` calls `POST https://open.tiktokapis.com/v2/oauth/token/` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/open.tiktokapis.com/v2/oauth/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-6097028f64ca6ff5", "name": "Dangling fetch: GET https://graph.threads.net/refresh_access_token (packages/api/src/server/distributionRoutes.ts:836)", "shortDescription": {"text": "Dangling fetch: GET https://graph.threads.net/refresh_access_token (packages/api/src/server/distributionRoutes.ts:836)"}, "fullDescription": {"text": "`packages/api/src/server/distributionRoutes.ts:836` calls `GET https://graph.threads.net/refresh_access_token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/graph.threads.net/refresh_access_token`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-919cf4d8b8df6dbb", "name": "Dangling fetch: GET https://api.pinterest.com/v5/boards (packages/api/src/server/distributionRoutes.ts:2018)", "shortDescription": {"text": "Dangling fetch: GET https://api.pinterest.com/v5/boards (packages/api/src/server/distributionRoutes.ts:2018)"}, "fullDescription": {"text": "`packages/api/src/server/distributionRoutes.ts:2018` calls `GET https://api.pinterest.com/v5/boards` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.pinterest.com/v5/boards`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b13998efb27c1bd6", "name": "Dangling fetch: POST https://api.pinterest.com/v5/pins (packages/api/src/server/distributionRoutes.ts:2066)", "shortDescription": {"text": "Dangling fetch: POST https://api.pinterest.com/v5/pins (packages/api/src/server/distributionRoutes.ts:2066)"}, "fullDescription": {"text": "`packages/api/src/server/distributionRoutes.ts:2066` calls `POST https://api.pinterest.com/v5/pins` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.pinterest.com/v5/pins`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-35ca8205f29ca22e", "name": "Dangling fetch: GET https://open.tiktokapis.com/v2/post/publish/creator_info/query/ (packages/api/src/server/distributio", "shortDescription": {"text": "Dangling fetch: GET https://open.tiktokapis.com/v2/post/publish/creator_info/query/ (packages/api/src/server/distributionRoutes.ts:2309)"}, "fullDescription": {"text": "`packages/api/src/server/distributionRoutes.ts:2309` calls `GET https://open.tiktokapis.com/v2/post/publish/creator_info/query/` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/open.tiktokapis.com/v2/post/publish/creator_info/query`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e8cddf69c25c3fca", "name": "Dangling fetch: POST https://open.tiktokapis.com/v2/post/publish/content/init/ (packages/api/src/server/distributionRout", "shortDescription": {"text": "Dangling fetch: POST https://open.tiktokapis.com/v2/post/publish/content/init/ (packages/api/src/server/distributionRoutes.ts:2355)"}, "fullDescription": {"text": "`packages/api/src/server/distributionRoutes.ts:2355` calls `POST https://open.tiktokapis.com/v2/post/publish/content/init/` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/open.tiktokapis.com/v2/post/publish/content/init`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ee33ef2225a2aa6e", "name": "Dangling fetch: POST https://open.tiktokapis.com/v2/post/publish/inbox/video/init/ (packages/api/src/server/distribution", "shortDescription": {"text": "Dangling fetch: POST https://open.tiktokapis.com/v2/post/publish/inbox/video/init/ (packages/api/src/server/distributionRoutes.ts:2388)"}, "fullDescription": {"text": "`packages/api/src/server/distributionRoutes.ts:2388` calls `POST https://open.tiktokapis.com/v2/post/publish/inbox/video/init/` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/open.tiktokapis.com/v2/post/publish/inbox/video/init`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5d608ca8254f8694", "name": "Dangling fetch: GET https://graph.facebook.com/v19.0/oauth/access_token (packages/api/src/server/socialRoutes.ts:185)", "shortDescription": {"text": "Dangling fetch: GET https://graph.facebook.com/v19.0/oauth/access_token (packages/api/src/server/socialRoutes.ts:185)"}, "fullDescription": {"text": "`packages/api/src/server/socialRoutes.ts:185` calls `GET https://graph.facebook.com/v19.0/oauth/access_token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/graph.facebook.com/v19.0/oauth/access_token`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e465e827d081d601", "name": "Dangling fetch: GET https://graph.facebook.com/v19.0/oauth/access_token (packages/api/src/server/socialRoutes.ts:568)", "shortDescription": {"text": "Dangling fetch: GET https://graph.facebook.com/v19.0/oauth/access_token (packages/api/src/server/socialRoutes.ts:568)"}, "fullDescription": {"text": "`packages/api/src/server/socialRoutes.ts:568` calls `GET https://graph.facebook.com/v19.0/oauth/access_token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/graph.facebook.com/v19.0/oauth/access_token`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-aabef6403dd21035", "name": "Dangling fetch: GET https://${serverPrefix}.api.mailchimp.com/3.0/ (packages/api/src/server/socialRoutes.ts:1339)", "shortDescription": {"text": "Dangling fetch: GET https://${serverPrefix}.api.mailchimp.com/3.0/ (packages/api/src/server/socialRoutes.ts:1339)"}, "fullDescription": {"text": "`packages/api/src/server/socialRoutes.ts:1339` calls `GET https://${serverPrefix}.api.mailchimp.com/3.0/` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/<p>.api.mailchimp.com/3.0`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-22e1555b3d99cb29", "name": "Dangling fetch: GET https://api.openai.com/v1/models (packages/api/src/server/socialRoutes.ts:1350)", "shortDescription": {"text": "Dangling fetch: GET https://api.openai.com/v1/models (packages/api/src/server/socialRoutes.ts:1350)"}, "fullDescription": {"text": "`packages/api/src/server/socialRoutes.ts:1350` calls `GET https://api.openai.com/v1/models` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.openai.com/v1/models`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-18347a3066780b9c", "name": "Dangling fetch: GET https://api.webflow.com/v2/sites (packages/api/src/server/socialRoutes.ts:1361)", "shortDescription": {"text": "Dangling fetch: GET https://api.webflow.com/v2/sites (packages/api/src/server/socialRoutes.ts:1361)"}, "fullDescription": {"text": "`packages/api/src/server/socialRoutes.ts:1361` calls `GET https://api.webflow.com/v2/sites` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.webflow.com/v2/sites`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d9f09e1fc565c32f", "name": "Dangling fetch: GET https://api.stripe.com/v1/balance (packages/api/src/server/socialRoutes.ts:1372)", "shortDescription": {"text": "Dangling fetch: GET https://api.stripe.com/v1/balance (packages/api/src/server/socialRoutes.ts:1372)"}, "fullDescription": {"text": "`packages/api/src/server/socialRoutes.ts:1372` calls `GET https://api.stripe.com/v1/balance` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.stripe.com/v1/balance`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6148904a844d0cbd", "name": "Dangling fetch: POST https://api.linear.app/graphql (packages/api/src/server/socialRoutes.ts:1383)", "shortDescription": {"text": "Dangling fetch: POST https://api.linear.app/graphql (packages/api/src/server/socialRoutes.ts:1383)"}, "fullDescription": {"text": "`packages/api/src/server/socialRoutes.ts:1383` calls `POST https://api.linear.app/graphql` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.linear.app/graphql`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1fa83cc3c9a0b078", "name": "Dangling fetch: GET https://api.resend.com/domains (packages/api/src/server/socialRoutes.ts:1394)", "shortDescription": {"text": "Dangling fetch: GET https://api.resend.com/domains (packages/api/src/server/socialRoutes.ts:1394)"}, "fullDescription": {"text": "`packages/api/src/server/socialRoutes.ts:1394` calls `GET https://api.resend.com/domains` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.resend.com/domains`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-455963f210785625", "name": "Dangling fetch: GET https://r.jina.ai/${url} (packages/api/src/server/dakyLearnRoutes.ts:103)", "shortDescription": {"text": "Dangling fetch: GET https://r.jina.ai/${url} (packages/api/src/server/dakyLearnRoutes.ts:103)"}, "fullDescription": {"text": "`packages/api/src/server/dakyLearnRoutes.ts:103` calls `GET https://r.jina.ai/${url}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/r.jina.ai/<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-6d95c16d69eb2a68", "name": "Dangling fetch: GET https://r.jina.ai/${item.url} (packages/api/src/server/dakyLearnRoutes.ts:231)", "shortDescription": {"text": "Dangling fetch: GET https://r.jina.ai/${item.url} (packages/api/src/server/dakyLearnRoutes.ts:231)"}, "fullDescription": {"text": "`packages/api/src/server/dakyLearnRoutes.ts:231` calls `GET https://r.jina.ai/${item.url}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/r.jina.ai/<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-302520854f82eb56", "name": "Dangling fetch: POST https://api.imgbb.com/1/upload (packages/api/src/server/googleRoutes.ts:55)", "shortDescription": {"text": "Dangling fetch: POST https://api.imgbb.com/1/upload (packages/api/src/server/googleRoutes.ts:55)"}, "fullDescription": {"text": "`packages/api/src/server/googleRoutes.ts:55` calls `POST https://api.imgbb.com/1/upload` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.imgbb.com/<p>/upload`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e47e8a11133bc9f4", "name": "Dangling fetch: POST https://graph.facebook.com/v19.0/${encodeURIComponent(pageId)}/subscribed_apps (packages/api/src/se", "shortDescription": {"text": "Dangling fetch: POST https://graph.facebook.com/v19.0/${encodeURIComponent(pageId)}/subscribed_apps (packages/api/src/server/webhookRoutes.ts:323)"}, "fullDescription": {"text": "`packages/api/src/server/webhookRoutes.ts:323` calls `POST https://graph.facebook.com/v19.0/${encodeURIComponent(pageId)}/subscribed_apps` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/graph.facebook.com/v19.0/<p>/subscribed_apps`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cc9e232ac84f81b9", "name": "Dangling fetch: POST https://www.linkedin.com/oauth/v2/accessToken (packages/api/src/server/socialConnectRoutes.ts:342)", "shortDescription": {"text": "Dangling fetch: POST https://www.linkedin.com/oauth/v2/accessToken (packages/api/src/server/socialConnectRoutes.ts:342)"}, "fullDescription": {"text": "`packages/api/src/server/socialConnectRoutes.ts:342` calls `POST https://www.linkedin.com/oauth/v2/accessToken` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/www.linkedin.com/oauth/v2/accesstoken`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a9562695da7c4b23", "name": "Dangling fetch: POST https://www.linkedin.com/oauth/v2/introspectToken (packages/api/src/server/socialConnectRoutes.ts:3", "shortDescription": {"text": "Dangling fetch: POST https://www.linkedin.com/oauth/v2/introspectToken (packages/api/src/server/socialConnectRoutes.ts:378)"}, "fullDescription": {"text": "`packages/api/src/server/socialConnectRoutes.ts:378` calls `POST https://www.linkedin.com/oauth/v2/introspectToken` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/www.linkedin.com/oauth/v2/introspecttoken`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4d5035db4c244a43", "name": "Dangling fetch: GET https://api.linkedin.com/v2/me (packages/api/src/server/socialConnectRoutes.ts:446)", "shortDescription": {"text": "Dangling fetch: GET https://api.linkedin.com/v2/me (packages/api/src/server/socialConnectRoutes.ts:446)"}, "fullDescription": {"text": "`packages/api/src/server/socialConnectRoutes.ts:446` calls `GET https://api.linkedin.com/v2/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.linkedin.com/v2/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5c15b6ab354c9d5d", "name": "Dangling fetch: GET https://api.linkedin.com/v2/userinfo (packages/api/src/server/socialConnectRoutes.ts:457)", "shortDescription": {"text": "Dangling fetch: GET https://api.linkedin.com/v2/userinfo (packages/api/src/server/socialConnectRoutes.ts:457)"}, "fullDescription": {"text": "`packages/api/src/server/socialConnectRoutes.ts:457` calls `GET https://api.linkedin.com/v2/userinfo` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.linkedin.com/v2/userinfo`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e634f7bda4cbb2d0", "name": "Dangling fetch: POST https://api.pinterest.com/v5/oauth/token (packages/api/src/server/socialConnectRoutes.ts:503)", "shortDescription": {"text": "Dangling fetch: POST https://api.pinterest.com/v5/oauth/token (packages/api/src/server/socialConnectRoutes.ts:503)"}, "fullDescription": {"text": "`packages/api/src/server/socialConnectRoutes.ts:503` calls `POST https://api.pinterest.com/v5/oauth/token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.pinterest.com/v5/oauth/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-15c6c0e87b22a873", "name": "Dangling fetch: GET https://api.pinterest.com/v5/user_account (packages/api/src/server/socialConnectRoutes.ts:518)", "shortDescription": {"text": "Dangling fetch: GET https://api.pinterest.com/v5/user_account (packages/api/src/server/socialConnectRoutes.ts:518)"}, "fullDescription": {"text": "`packages/api/src/server/socialConnectRoutes.ts:518` calls `GET https://api.pinterest.com/v5/user_account` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.pinterest.com/v5/user_account`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8d852c3f936eddfb", "name": "Dangling fetch: POST https://api.instagram.com/oauth/access_token (packages/api/src/server/socialConnectRoutes.ts:558)", "shortDescription": {"text": "Dangling fetch: POST https://api.instagram.com/oauth/access_token (packages/api/src/server/socialConnectRoutes.ts:558)"}, "fullDescription": {"text": "`packages/api/src/server/socialConnectRoutes.ts:558` calls `POST https://api.instagram.com/oauth/access_token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.instagram.com/oauth/access_token`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3bc8d9483f499c35", "name": "Dangling fetch: GET https://graph.facebook.com/v18.0/oauth/access_token (packages/api/src/server/socialConnectRoutes.ts:", "shortDescription": {"text": "Dangling fetch: GET https://graph.facebook.com/v18.0/oauth/access_token (packages/api/src/server/socialConnectRoutes.ts:655)"}, "fullDescription": {"text": "`packages/api/src/server/socialConnectRoutes.ts:655` calls `GET https://graph.facebook.com/v18.0/oauth/access_token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/graph.facebook.com/v18.0/oauth/access_token`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-25abda7d9218ccd5", "name": "Dangling fetch: GET https://graph.facebook.com/v19.0/me (packages/api/src/server/socialConnectRoutes.ts:668)", "shortDescription": {"text": "Dangling fetch: GET https://graph.facebook.com/v19.0/me (packages/api/src/server/socialConnectRoutes.ts:668)"}, "fullDescription": {"text": "`packages/api/src/server/socialConnectRoutes.ts:668` calls `GET https://graph.facebook.com/v19.0/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/graph.facebook.com/v19.0/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1f743d944cc2f5d0", "name": "Dangling fetch: POST https://graph.threads.net/oauth/access_token (packages/api/src/server/socialConnectRoutes.ts:702)", "shortDescription": {"text": "Dangling fetch: POST https://graph.threads.net/oauth/access_token (packages/api/src/server/socialConnectRoutes.ts:702)"}, "fullDescription": {"text": "`packages/api/src/server/socialConnectRoutes.ts:702` calls `POST https://graph.threads.net/oauth/access_token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/graph.threads.net/oauth/access_token`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2ec4a56d323225b2", "name": "Dangling fetch: GET https://graph.threads.net/access_token (packages/api/src/server/socialConnectRoutes.ts:717)", "shortDescription": {"text": "Dangling fetch: GET https://graph.threads.net/access_token (packages/api/src/server/socialConnectRoutes.ts:717)"}, "fullDescription": {"text": "`packages/api/src/server/socialConnectRoutes.ts:717` calls `GET https://graph.threads.net/access_token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/graph.threads.net/access_token`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4f2d835398a0e18c", "name": "Dangling fetch: GET https://graph.threads.net/v1.0/me (packages/api/src/server/socialConnectRoutes.ts:734)", "shortDescription": {"text": "Dangling fetch: GET https://graph.threads.net/v1.0/me (packages/api/src/server/socialConnectRoutes.ts:734)"}, "fullDescription": {"text": "`packages/api/src/server/socialConnectRoutes.ts:734` calls `GET https://graph.threads.net/v1.0/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/graph.threads.net/v1.0/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3f767f307cc7999f", "name": "Dangling fetch: POST https://open.tiktokapis.com/v2/oauth/token/ (packages/api/src/server/socialConnectRoutes.ts:770)", "shortDescription": {"text": "Dangling fetch: POST https://open.tiktokapis.com/v2/oauth/token/ (packages/api/src/server/socialConnectRoutes.ts:770)"}, "fullDescription": {"text": "`packages/api/src/server/socialConnectRoutes.ts:770` calls `POST https://open.tiktokapis.com/v2/oauth/token/` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/open.tiktokapis.com/v2/oauth/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-d95cc2e49eb505c1", "name": "Dangling fetch: GET https://open.tiktokapis.com/v2/user/info/ (packages/api/src/server/socialConnectRoutes.ts:786)", "shortDescription": {"text": "Dangling fetch: GET https://open.tiktokapis.com/v2/user/info/ (packages/api/src/server/socialConnectRoutes.ts:786)"}, "fullDescription": {"text": "`packages/api/src/server/socialConnectRoutes.ts:786` calls `GET https://open.tiktokapis.com/v2/user/info/` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/open.tiktokapis.com/v2/user/info`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-889bb1e879ae7133", "name": "Dangling fetch: GET https://open.tiktokapis.com/v2/user/info/ (packages/api/src/server/socialConnectRoutes.ts:795)", "shortDescription": {"text": "Dangling fetch: GET https://open.tiktokapis.com/v2/user/info/ (packages/api/src/server/socialConnectRoutes.ts:795)"}, "fullDescription": {"text": "`packages/api/src/server/socialConnectRoutes.ts:795` calls `GET https://open.tiktokapis.com/v2/user/info/` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/open.tiktokapis.com/v2/user/info`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b8683525be7747ab", "name": "Dangling fetch: POST https://oauth2.googleapis.com/token (packages/api/src/server/socialConnectRoutes.ts:828)", "shortDescription": {"text": "Dangling fetch: POST https://oauth2.googleapis.com/token (packages/api/src/server/socialConnectRoutes.ts:828)"}, "fullDescription": {"text": "`packages/api/src/server/socialConnectRoutes.ts:828` calls `POST https://oauth2.googleapis.com/token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/oauth2.googleapis.com/token`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-169cb16ad75e71bf", "name": "Dangling fetch: GET https://www.googleapis.com/oauth2/v2/userinfo (packages/api/src/server/socialConnectRoutes.ts:842)", "shortDescription": {"text": "Dangling fetch: GET https://www.googleapis.com/oauth2/v2/userinfo (packages/api/src/server/socialConnectRoutes.ts:842)"}, "fullDescription": {"text": "`packages/api/src/server/socialConnectRoutes.ts:842` calls `GET https://www.googleapis.com/oauth2/v2/userinfo` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/www.googleapis.com/oauth2/v2/userinfo`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fcb39585e8ceb4e1", "name": "Dangling fetch: POST https://slack.com/api/oauth.v2.access (packages/api/src/server/socialConnectRoutes.ts:876)", "shortDescription": {"text": "Dangling fetch: POST https://slack.com/api/oauth.v2.access (packages/api/src/server/socialConnectRoutes.ts:876)"}, "fullDescription": {"text": "`packages/api/src/server/socialConnectRoutes.ts:876` calls `POST https://slack.com/api/oauth.v2.access` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/slack.com/api/oauth.v2.access`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bd51b64fe58698d1", "name": "Dangling fetch: POST https://zoom.us/oauth/token (packages/api/src/server/socialConnectRoutes.ts:912)", "shortDescription": {"text": "Dangling fetch: POST https://zoom.us/oauth/token (packages/api/src/server/socialConnectRoutes.ts:912)"}, "fullDescription": {"text": "`packages/api/src/server/socialConnectRoutes.ts:912` calls `POST https://zoom.us/oauth/token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/zoom.us/oauth/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-5f11e720495be5da", "name": "Dangling fetch: GET https://api.zoom.us/v2/users/me (packages/api/src/server/socialConnectRoutes.ts:926)", "shortDescription": {"text": "Dangling fetch: GET https://api.zoom.us/v2/users/me (packages/api/src/server/socialConnectRoutes.ts:926)"}, "fullDescription": {"text": "`packages/api/src/server/socialConnectRoutes.ts:926` calls `GET https://api.zoom.us/v2/users/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.zoom.us/v2/users/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8afb3d4f803e9574", "name": "Dangling fetch: GET https://api.pinterest.com/v5/boards?page_size=100 (packages/api/src/server/socialConnectRoutes.ts:14", "shortDescription": {"text": "Dangling fetch: GET https://api.pinterest.com/v5/boards?page_size=100 (packages/api/src/server/socialConnectRoutes.ts:1427)"}, "fullDescription": {"text": "`packages/api/src/server/socialConnectRoutes.ts:1427` calls `GET https://api.pinterest.com/v5/boards?page_size=100` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.pinterest.com/v5/boards`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-da67875d42899a80", "name": "Dangling fetch: POST https://api.pinterest.com/v5/boards (packages/api/src/server/socialConnectRoutes.ts:1467)", "shortDescription": {"text": "Dangling fetch: POST https://api.pinterest.com/v5/boards (packages/api/src/server/socialConnectRoutes.ts:1467)"}, "fullDescription": {"text": "`packages/api/src/server/socialConnectRoutes.ts:1467` calls `POST https://api.pinterest.com/v5/boards` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.pinterest.com/v5/boards`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c94be5339b517846", "name": "Dangling fetch: GET https://${prefix}.api.mailchimp.com/3.0/ (packages/api/src/server/socialConnectRoutes.ts:1502)", "shortDescription": {"text": "Dangling fetch: GET https://${prefix}.api.mailchimp.com/3.0/ (packages/api/src/server/socialConnectRoutes.ts:1502)"}, "fullDescription": {"text": "`packages/api/src/server/socialConnectRoutes.ts:1502` calls `GET https://${prefix}.api.mailchimp.com/3.0/` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/<p>.api.mailchimp.com/3.0`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-99159a020c979a46", "name": "Dangling fetch: GET https://graph.facebook.com/v19.0/${pid}?fields=id,display_phone_number,verified_name (packages/api/s", "shortDescription": {"text": "Dangling fetch: GET https://graph.facebook.com/v19.0/${pid}?fields=id,display_phone_number,verified_name (packages/api/src/server/socialConnectRoutes.ts:1550)"}, "fullDescription": {"text": "`packages/api/src/server/socialConnectRoutes.ts:1550` calls `GET https://graph.facebook.com/v19.0/${pid}?fields=id,display_phone_number,verified_name` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/graph.facebook.com/v19.0/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6c9514d807b88fbc", "name": "Dangling fetch: POST https://oauth2.googleapis.com/token (packages/api/src/server/gmailInboxRoutes.ts:140)", "shortDescription": {"text": "Dangling fetch: POST https://oauth2.googleapis.com/token (packages/api/src/server/gmailInboxRoutes.ts:140)"}, "fullDescription": {"text": "`packages/api/src/server/gmailInboxRoutes.ts:140` calls `POST https://oauth2.googleapis.com/token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/oauth2.googleapis.com/token`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b84afb825c532d77", "name": "Dangling fetch: GET https://gmail.googleapis.com/gmail/v1/users/me/messages/${encodeURIComponent(gmailMessageId)} (packa", "shortDescription": {"text": "Dangling fetch: GET https://gmail.googleapis.com/gmail/v1/users/me/messages/${encodeURIComponent(gmailMessageId)} (packages/api/src/server/gmailInboxRoutes.ts:704)"}, "fullDescription": {"text": "`packages/api/src/server/gmailInboxRoutes.ts:704` calls `GET https://gmail.googleapis.com/gmail/v1/users/me/messages/${encodeURIComponent(gmailMessageId)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/gmail.googleapis.com/gmail/v1/users/me/messages/<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-879208695b49c807", "name": "Dangling fetch: GET https://gmail.googleapis.com/gmail/v1/users/me/messages/${encodeURIComponent(req.params.id)} (packag", "shortDescription": {"text": "Dangling fetch: GET https://gmail.googleapis.com/gmail/v1/users/me/messages/${encodeURIComponent(req.params.id)} (packages/api/src/server/gmailInboxRoutes.ts:878)"}, "fullDescription": {"text": "`packages/api/src/server/gmailInboxRoutes.ts:878` calls `GET https://gmail.googleapis.com/gmail/v1/users/me/messages/${encodeURIComponent(req.params.id)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/gmail.googleapis.com/gmail/v1/users/me/messages/<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-48c9467040b90524", "name": "Dangling fetch: GET https://gmail.googleapis.com/gmail/v1/users/me/messages/${encodeURIComponent(req.params.id)}/attachm", "shortDescription": {"text": "Dangling fetch: GET https://gmail.googleapis.com/gmail/v1/users/me/messages/${encodeURIComponent(req.params.id)}/attachments/${encodeURIComponent(req.params.attId)} (packages/api/src/server/gmailInboxRoutes.ts:907)"}, "fullDescription": {"text": "`packages/api/src/server/gmailInboxRoutes.ts:907` calls `GET https://gmail.googleapis.com/gmail/v1/users/me/messages/${encodeURIComponent(req.params.id)}/attachments/${encodeURIComponent(req.params.attId)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/gmail.googleapis.com/gmail/v1/users/me/messages/<p>/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-1c39489622344260", "name": "Dangling fetch: POST https://payproxyapi.hubtel.com/items/initiate (packages/api/src/server/hubtelRoutes.ts:61)", "shortDescription": {"text": "Dangling fetch: POST https://payproxyapi.hubtel.com/items/initiate (packages/api/src/server/hubtelRoutes.ts:61)"}, "fullDescription": {"text": "`packages/api/src/server/hubtelRoutes.ts:61` calls `POST https://payproxyapi.hubtel.com/items/initiate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/payproxyapi.hubtel.com/items/initiate`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-648b9c0d59042868", "name": "Dangling fetch: GET https://api.hubtel.com/checkout/v1.1/merchant/transactions/status?clientReference=${clientReference}", "shortDescription": {"text": "Dangling fetch: GET https://api.hubtel.com/checkout/v1.1/merchant/transactions/status?clientReference=${clientReference} (packages/api/src/server/hubtelRoutes.ts:124)"}, "fullDescription": {"text": "`packages/api/src/server/hubtelRoutes.ts:124` calls `GET https://api.hubtel.com/checkout/v1.1/merchant/transactions/status?clientReference=${clientReference}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.hubtel.com/checkout/v1.1/merchant/transactions/status`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6eb9a309a111203b", "name": "Dangling fetch: GET https://api.linkedin.com/rest/organizations?ids=${buildLinkedInRestliList(uniqueIds)} (packages/api/", "shortDescription": {"text": "Dangling fetch: GET https://api.linkedin.com/rest/organizations?ids=${buildLinkedInRestliList(uniqueIds)} (packages/api/src/server/distribution/linkedinHelpers.ts:58)"}, "fullDescription": {"text": "`packages/api/src/server/distribution/linkedinHelpers.ts:58` calls `GET https://api.linkedin.com/rest/organizations?ids=${buildLinkedInRestliList(uniqueIds)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.linkedin.com/rest/organizations`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d9a19ace47f57750", "name": "Dangling fetch: GET https://api.linkedin.com/rest/organizations/${encodeURIComponent(organizationId)} (packages/api/src/", "shortDescription": {"text": "Dangling fetch: GET https://api.linkedin.com/rest/organizations/${encodeURIComponent(organizationId)} (packages/api/src/server/distribution/linkedinHelpers.ts:77)"}, "fullDescription": {"text": "`packages/api/src/server/distribution/linkedinHelpers.ts:77` calls `GET https://api.linkedin.com/rest/organizations/${encodeURIComponent(organizationId)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.linkedin.com/rest/organizations/<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-8c1b312dd90f81a8", "name": "Dangling fetch: GET https://api.linkedin.com/rest/networkSizes/${encodeURIComponent(organizationUrn)} (packages/api/src/", "shortDescription": {"text": "Dangling fetch: GET https://api.linkedin.com/rest/networkSizes/${encodeURIComponent(organizationUrn)} (packages/api/src/server/distribution/linkedinHelpers.ts:88)"}, "fullDescription": {"text": "`packages/api/src/server/distribution/linkedinHelpers.ts:88` calls `GET https://api.linkedin.com/rest/networkSizes/${encodeURIComponent(organizationUrn)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.linkedin.com/rest/networksizes/<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-8f451e731f0106df", "name": "Dangling fetch: GET https://api.linkedin.com/rest/posts (packages/api/src/server/distribution/linkedinHelpers.ts:102)", "shortDescription": {"text": "Dangling fetch: GET https://api.linkedin.com/rest/posts (packages/api/src/server/distribution/linkedinHelpers.ts:102)"}, "fullDescription": {"text": "`packages/api/src/server/distribution/linkedinHelpers.ts:102` calls `GET https://api.linkedin.com/rest/posts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.linkedin.com/rest/posts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8797edbe865a0c85", "name": "Dangling fetch: GET https://api.linkedin.com/rest/socialMetadata?ids=${buildLinkedInRestliList(uniqueUrns)} (packages/ap", "shortDescription": {"text": "Dangling fetch: GET https://api.linkedin.com/rest/socialMetadata?ids=${buildLinkedInRestliList(uniqueUrns)} (packages/api/src/server/distribution/linkedinHelpers.ts:122)"}, "fullDescription": {"text": "`packages/api/src/server/distribution/linkedinHelpers.ts:122` calls `GET https://api.linkedin.com/rest/socialMetadata?ids=${buildLinkedInRestliList(uniqueUrns)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.linkedin.com/rest/socialmetadata`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b2ffdb690de7b0e9", "name": "Dangling fetch: GET https://api.linkedin.com/rest/organizationalEntityShareStatistics?${params.toString()} (packages/api", "shortDescription": {"text": "Dangling fetch: GET https://api.linkedin.com/rest/organizationalEntityShareStatistics?${params.toString()} (packages/api/src/server/distribution/linkedinHelpers.ts:151)"}, "fullDescription": {"text": "`packages/api/src/server/distribution/linkedinHelpers.ts:151` calls `GET https://api.linkedin.com/rest/organizationalEntityShareStatistics?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.linkedin.com/rest/organizationalentitysharestatistics`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1cda3c091db645c1", "name": "Dangling fetch: GET https://api.linkedin.com/v2/me (packages/api/src/server/distribution/linkedinHelpers.ts:224)", "shortDescription": {"text": "Dangling fetch: GET https://api.linkedin.com/v2/me (packages/api/src/server/distribution/linkedinHelpers.ts:224)"}, "fullDescription": {"text": "`packages/api/src/server/distribution/linkedinHelpers.ts:224` calls `GET https://api.linkedin.com/v2/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.linkedin.com/v2/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f34b9e2ae3f1c461", "name": "Dangling fetch: GET https://api.linkedin.com/v2/userinfo (packages/api/src/server/distribution/linkedinHelpers.ts:231)", "shortDescription": {"text": "Dangling fetch: GET https://api.linkedin.com/v2/userinfo (packages/api/src/server/distribution/linkedinHelpers.ts:231)"}, "fullDescription": {"text": "`packages/api/src/server/distribution/linkedinHelpers.ts:231` calls `GET https://api.linkedin.com/v2/userinfo` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.linkedin.com/v2/userinfo`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-83e1432c718e31e2", "name": "Dangling fetch: GET https://api.pinterest.com/v5/user_account (packages/api/src/server/analytics/syncHelpers.ts:454)", "shortDescription": {"text": "Dangling fetch: GET https://api.pinterest.com/v5/user_account (packages/api/src/server/analytics/syncHelpers.ts:454)"}, "fullDescription": {"text": "`packages/api/src/server/analytics/syncHelpers.ts:454` calls `GET https://api.pinterest.com/v5/user_account` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.pinterest.com/v5/user_account`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e173b945b01426c3", "name": "Dangling fetch: GET https://api.pinterest.com/v5/pins (packages/api/src/server/analytics/syncHelpers.ts:500)", "shortDescription": {"text": "Dangling fetch: GET https://api.pinterest.com/v5/pins (packages/api/src/server/analytics/syncHelpers.ts:500)"}, "fullDescription": {"text": "`packages/api/src/server/analytics/syncHelpers.ts:500` calls `GET https://api.pinterest.com/v5/pins` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.pinterest.com/v5/pins`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-68f5a5f7ab389d51", "name": "Dangling fetch: GET https://open.tiktokapis.com/v2/user/info/ (packages/api/src/server/analytics/helpers.ts:84)", "shortDescription": {"text": "Dangling fetch: GET https://open.tiktokapis.com/v2/user/info/ (packages/api/src/server/analytics/helpers.ts:84)"}, "fullDescription": {"text": "`packages/api/src/server/analytics/helpers.ts:84` calls `GET https://open.tiktokapis.com/v2/user/info/` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/open.tiktokapis.com/v2/user/info`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9dc53442d901ca66", "name": "Dangling fetch: GET https://graph.threads.net/debug_token (packages/api/src/server/analytics/threadsRoutes.ts:174)", "shortDescription": {"text": "Dangling fetch: GET https://graph.threads.net/debug_token (packages/api/src/server/analytics/threadsRoutes.ts:174)"}, "fullDescription": {"text": "`packages/api/src/server/analytics/threadsRoutes.ts:174` calls `GET https://graph.threads.net/debug_token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/graph.threads.net/debug_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-8809afab786acfa9", "name": "Dangling fetch: GET https://graph.threads.net/location_search (packages/api/src/server/analytics/threadsRoutes.ts:303)", "shortDescription": {"text": "Dangling fetch: GET https://graph.threads.net/location_search (packages/api/src/server/analytics/threadsRoutes.ts:303)"}, "fullDescription": {"text": "`packages/api/src/server/analytics/threadsRoutes.ts:303` calls `GET https://graph.threads.net/location_search` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/graph.threads.net/location_search`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4df629d80996c5d5", "name": "Dangling fetch: GET https://graph.threads.net/${encodeURIComponent(locationId)} (packages/api/src/server/analytics/threa", "shortDescription": {"text": "Dangling fetch: GET https://graph.threads.net/${encodeURIComponent(locationId)} (packages/api/src/server/analytics/threadsRoutes.ts:328)"}, "fullDescription": {"text": "`packages/api/src/server/analytics/threadsRoutes.ts:328` calls `GET https://graph.threads.net/${encodeURIComponent(locationId)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/graph.threads.net/<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-d6bc6982593216a4", "name": "Dangling fetch: GET https://api.linkedin.com/v2/me (packages/api/src/server/analytics/linkedinAnalyticsRoutes.ts:63)", "shortDescription": {"text": "Dangling fetch: GET https://api.linkedin.com/v2/me (packages/api/src/server/analytics/linkedinAnalyticsRoutes.ts:63)"}, "fullDescription": {"text": "`packages/api/src/server/analytics/linkedinAnalyticsRoutes.ts:63` calls `GET https://api.linkedin.com/v2/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.linkedin.com/v2/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-84664dec8b30eb8d", "name": "Dangling fetch: GET https://api.linkedin.com/v2/ugcPosts (packages/api/src/server/analytics/linkedinAnalyticsRoutes.ts:8", "shortDescription": {"text": "Dangling fetch: GET https://api.linkedin.com/v2/ugcPosts (packages/api/src/server/analytics/linkedinAnalyticsRoutes.ts:85)"}, "fullDescription": {"text": "`packages/api/src/server/analytics/linkedinAnalyticsRoutes.ts:85` calls `GET https://api.linkedin.com/v2/ugcPosts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.linkedin.com/v2/ugcposts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cc692e6cd5320c2f", "name": "Dangling fetch: GET https://api.linkedin.com/rest/organizationPageStatistics (packages/api/src/server/analytics/linkedin", "shortDescription": {"text": "Dangling fetch: GET https://api.linkedin.com/rest/organizationPageStatistics (packages/api/src/server/analytics/linkedinAnalyticsRoutes.ts:201)"}, "fullDescription": {"text": "`packages/api/src/server/analytics/linkedinAnalyticsRoutes.ts:201` calls `GET https://api.linkedin.com/rest/organizationPageStatistics` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.linkedin.com/rest/organizationpagestatistics`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5be4d91ed7313cee", "name": "Dangling fetch: GET https://api.linkedin.com/rest/organizationalEntityShareStatistics (packages/api/src/server/analytics", "shortDescription": {"text": "Dangling fetch: GET https://api.linkedin.com/rest/organizationalEntityShareStatistics (packages/api/src/server/analytics/linkedinAnalyticsRoutes.ts:202)"}, "fullDescription": {"text": "`packages/api/src/server/analytics/linkedinAnalyticsRoutes.ts:202` calls `GET https://api.linkedin.com/rest/organizationalEntityShareStatistics` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/api.linkedin.com/rest/organizationalentitysharestatistics`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-73cffa0a1cc2f3a7", "name": "Dangling fetch: POST https://open.tiktokapis.com/v2/video/list/ (packages/api/src/server/analytics/tiktokRoutes.ts:81)", "shortDescription": {"text": "Dangling fetch: POST https://open.tiktokapis.com/v2/video/list/ (packages/api/src/server/analytics/tiktokRoutes.ts:81)"}, "fullDescription": {"text": "`packages/api/src/server/analytics/tiktokRoutes.ts:81` calls `POST https://open.tiktokapis.com/v2/video/list/` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/open.tiktokapis.com/v2/video/list`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d6cdabd339d0b814", "name": "Dangling fetch: GET /api/crm/activities/${note.id}/comments (packages/web/src/pages/CRMCompanies.tsx:271)", "shortDescription": {"text": "Dangling fetch: GET /api/crm/activities/${note.id}/comments (packages/web/src/pages/CRMCompanies.tsx:271)"}, "fullDescription": {"text": "`packages/web/src/pages/CRMCompanies.tsx:271` calls `GET /api/crm/activities/${note.id}/comments` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/crm/activities/<p>/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-34715dcb9e170666", "name": "Dangling fetch: PATCH /api/crm/activities/${note.id} (packages/web/src/pages/CRMCompanies.tsx:282)", "shortDescription": {"text": "Dangling fetch: PATCH /api/crm/activities/${note.id} (packages/web/src/pages/CRMCompanies.tsx:282)"}, "fullDescription": {"text": "`packages/web/src/pages/CRMCompanies.tsx:282` calls `PATCH /api/crm/activities/${note.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/crm/activities/<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-296aa5b5c5aaced6", "name": "Dangling fetch: POST /api/crm/activities/${note.id}/comments (packages/web/src/pages/CRMCompanies.tsx:293)", "shortDescription": {"text": "Dangling fetch: POST /api/crm/activities/${note.id}/comments (packages/web/src/pages/CRMCompanies.tsx:293)"}, "fullDescription": {"text": "`packages/web/src/pages/CRMCompanies.tsx:293` calls `POST /api/crm/activities/${note.id}/comments` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/crm/activities/<p>/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-93bfe170884385c2", "name": "Dangling fetch: DELETE /api/crm/activities/${note.id}/comments/${cid} (packages/web/src/pages/CRMCompanies.tsx:301)", "shortDescription": {"text": "Dangling fetch: DELETE /api/crm/activities/${note.id}/comments/${cid} (packages/web/src/pages/CRMCompanies.tsx:301)"}, "fullDescription": {"text": "`packages/web/src/pages/CRMCompanies.tsx:301` calls `DELETE /api/crm/activities/${note.id}/comments/${cid}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/crm/activities/<p>/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-b7e460334ea35855", "name": "Dangling fetch: POST /api/crm/activities (packages/web/src/pages/CRMCompanies.tsx:431)", "shortDescription": {"text": "Dangling fetch: POST /api/crm/activities (packages/web/src/pages/CRMCompanies.tsx:431)"}, "fullDescription": {"text": "`packages/web/src/pages/CRMCompanies.tsx:431` calls `POST /api/crm/activities` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/crm/activities`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-586dc7ad2969617f", "name": "Dangling fetch: GET /api/mailing/contacts?search=${encodeURIComponent(q)} (packages/web/src/pages/CRMCompanies.tsx:594)", "shortDescription": {"text": "Dangling fetch: GET /api/mailing/contacts?search=${encodeURIComponent(q)} (packages/web/src/pages/CRMCompanies.tsx:594)"}, "fullDescription": {"text": "`packages/web/src/pages/CRMCompanies.tsx:594` calls `GET /api/mailing/contacts?search=${encodeURIComponent(q)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/mailing/contacts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6d0f345cc473631d", "name": "Dangling fetch: POST /api/crm/companies/${companyId}/contacts (packages/web/src/pages/CRMCompanies.tsx:604)", "shortDescription": {"text": "Dangling fetch: POST /api/crm/companies/${companyId}/contacts (packages/web/src/pages/CRMCompanies.tsx:604)"}, "fullDescription": {"text": "`packages/web/src/pages/CRMCompanies.tsx:604` calls `POST /api/crm/companies/${companyId}/contacts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/crm/companies/<p>/contacts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4e0d3aa81e6e97bd", "name": "Dangling fetch: DELETE /api/crm/activities/${id} (packages/web/src/pages/CRMCompanies.tsx:1187)", "shortDescription": {"text": "Dangling fetch: DELETE /api/crm/activities/${id} (packages/web/src/pages/CRMCompanies.tsx:1187)"}, "fullDescription": {"text": "`packages/web/src/pages/CRMCompanies.tsx:1187` calls `DELETE /api/crm/activities/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/crm/activities/<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-e1b1aa27972822f4", "name": "Dangling fetch: POST /api/calendar/google/connect-url (packages/web/src/pages/Integrations.tsx:523)", "shortDescription": {"text": "Dangling fetch: POST /api/calendar/google/connect-url (packages/web/src/pages/Integrations.tsx:523)"}, "fullDescription": {"text": "`packages/web/src/pages/Integrations.tsx:523` calls `POST /api/calendar/google/connect-url` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/calendar/google/connect-url`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9bb7954259718fd1", "name": "Dangling fetch: DELETE /api/calendar/google/disconnect (packages/web/src/pages/Integrations.tsx:564)", "shortDescription": {"text": "Dangling fetch: DELETE /api/calendar/google/disconnect (packages/web/src/pages/Integrations.tsx:564)"}, "fullDescription": {"text": "`packages/web/src/pages/Integrations.tsx:564` calls `DELETE /api/calendar/google/disconnect` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/calendar/google/disconnect`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-69da92107ce3fdce", "name": "Dangling fetch: GET /api/crm/activities?contact_id=${contact.id}&limit=30 (packages/web/src/pages/MarketingContacts.tsx:", "shortDescription": {"text": "Dangling fetch: GET /api/crm/activities?contact_id=${contact.id}&limit=30 (packages/web/src/pages/MarketingContacts.tsx:83)"}, "fullDescription": {"text": "`packages/web/src/pages/MarketingContacts.tsx:83` calls `GET /api/crm/activities?contact_id=${contact.id}&limit=30` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/crm/activities`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5864af3296b83452", "name": "Dangling fetch: POST /api/crm/activities (packages/web/src/pages/MarketingContacts.tsx:92)", "shortDescription": {"text": "Dangling fetch: POST /api/crm/activities (packages/web/src/pages/MarketingContacts.tsx:92)"}, "fullDescription": {"text": "`packages/web/src/pages/MarketingContacts.tsx:92` calls `POST /api/crm/activities` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/crm/activities`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-21fdd4ee115eb877", "name": "Dangling fetch: GET /api/data (.claude/skills/remotion-to-hyperframes/scripts/tests/fixtures/blocker.tsx:22)", "shortDescription": {"text": "Dangling fetch: GET /api/data (.claude/skills/remotion-to-hyperframes/scripts/tests/fixtures/blocker.tsx:22)"}, "fullDescription": {"text": "`.claude/skills/remotion-to-hyperframes/scripts/tests/fixtures/blocker.tsx:22` calls `GET /api/data` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/data`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8f3075a72770566b", "name": "Dangling fetch: GET /api/heartbeat (.claude/skills/remotion-to-hyperframes/scripts/tests/fixtures/blocker.tsx:35)", "shortDescription": {"text": "Dangling fetch: GET /api/heartbeat (.claude/skills/remotion-to-hyperframes/scripts/tests/fixtures/blocker.tsx:35)"}, "fullDescription": {"text": "`.claude/skills/remotion-to-hyperframes/scripts/tests/fixtures/blocker.tsx:35` calls `GET /api/heartbeat` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/heartbeat`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d897bf5050cba7ed", "name": "Dangling fetch: GET /api/duration (.claude/skills/remotion-to-hyperframes/scripts/tests/fixtures/blocker.tsx:47)", "shortDescription": {"text": "Dangling fetch: GET /api/duration (.claude/skills/remotion-to-hyperframes/scripts/tests/fixtures/blocker.tsx:47)"}, "fullDescription": {"text": "`.claude/skills/remotion-to-hyperframes/scripts/tests/fixtures/blocker.tsx:47` calls `GET /api/duration` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/duration`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-81c7b6f07b4b191f", "name": "Dangling fetch: GET /api/items (.claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/08-m", "shortDescription": {"text": "Dangling fetch: GET /api/items (.claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/08-mixed.tsx:25)"}, "fullDescription": {"text": "`.claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/08-mixed.tsx:25` calls `GET /api/items` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/items`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1dfcc9529630142e", "name": "Unused endpoint: POST /webhooks/stripe", "shortDescription": {"text": "Unused endpoint: POST /webhooks/stripe"}, "fullDescription": {"text": "`scripts/archive/wire-webhook-routes.mjs` declares `POST /webhooks/stripe` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a87fc399d210a8b7", "name": "Unused endpoint: POST /api/v1/social/facebook/webhook-subscribe", "shortDescription": {"text": "Unused endpoint: POST /api/v1/social/facebook/webhook-subscribe"}, "fullDescription": {"text": "`scripts/archive/wire-webhook-routes.mjs` declares `POST /api/v1/social/facebook/webhook-subscribe` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-250594e51a099069", "name": "Unused endpoint: POST /api/wordpress/connect", "shortDescription": {"text": "Unused endpoint: POST /api/wordpress/connect"}, "fullDescription": {"text": "`scripts/archive/wire-new-modules.mjs` declares `POST /api/wordpress/connect` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d9200bb7931c1895", "name": "Unused endpoint: GET /api/pricing/plans", "shortDescription": {"text": "Unused endpoint: GET /api/pricing/plans"}, "fullDescription": {"text": "`scripts/archive/wire-new-modules.mjs` declares `GET /api/pricing/plans` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3bcb769b8c5ef124", "name": "Unused endpoint: GET /api/card-templates", "shortDescription": {"text": "Unused endpoint: GET /api/card-templates"}, "fullDescription": {"text": "`scripts/archive/wire-new-modules.mjs` declares `GET /api/card-templates` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6eb452fbfb454d20", "name": "Unused endpoint: USE /api/auth", "shortDescription": {"text": "Unused endpoint: USE /api/auth"}, "fullDescription": {"text": "`packages/api/backend/src/index.ts` declares `USE /api/auth` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b93c1ed754cfdc30", "name": "Unused endpoint: USE /api/oauth", "shortDescription": {"text": "Unused endpoint: USE /api/oauth"}, "fullDescription": {"text": "`packages/api/backend/src/index.ts` declares `USE /api/oauth` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1be44d2cc9b65154", "name": "Unused endpoint: USE /api/posts", "shortDescription": {"text": "Unused endpoint: USE /api/posts"}, "fullDescription": {"text": "`packages/api/backend/src/index.ts` declares `USE /api/posts` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-698c960074629f96", "name": "Unused endpoint: USE /api/integrations", "shortDescription": {"text": "Unused endpoint: USE /api/integrations"}, "fullDescription": {"text": "`packages/api/backend/src/index.ts` declares `USE /api/integrations` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2922dfb7a09f04de", "name": "Unused endpoint: USE /api/my-integrations", "shortDescription": {"text": "Unused endpoint: USE /api/my-integrations"}, "fullDescription": {"text": "`packages/api/backend/src/index.ts` declares `USE /api/my-integrations` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ac5cb450e971f993", "name": "Unused endpoint: USE /api/automation", "shortDescription": {"text": "Unused endpoint: USE /api/automation"}, "fullDescription": {"text": "`packages/api/backend/src/index.ts` declares `USE /api/automation` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d803e7e5650befd4", "name": "Unused endpoint: USE /api/analytics", "shortDescription": {"text": "Unused endpoint: USE /api/analytics"}, "fullDescription": {"text": "`packages/api/backend/src/index.ts` declares `USE /api/analytics` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4756b4c4da7d2088", "name": "Unused endpoint: GET /api/health", "shortDescription": {"text": "Unused endpoint: GET /api/health"}, "fullDescription": {"text": "`packages/api/backend/src/index.ts` declares `GET /api/health` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7a009b1a56794f45", "name": "Unused endpoint: POST /", "shortDescription": {"text": "Unused endpoint: POST /"}, "fullDescription": {"text": "`packages/api/backend/src/routes/posts.routes.ts` declares `POST /` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5baa8971ebe192a1", "name": "Unused endpoint: GET /", "shortDescription": {"text": "Unused endpoint: GET /"}, "fullDescription": {"text": "`packages/api/backend/src/routes/posts.routes.ts` declares `GET /` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dfef8c6751e1e00b", "name": "Unused endpoint: GET /:id/with-platforms", "shortDescription": {"text": "Unused endpoint: GET /:id/with-platforms"}, "fullDescription": {"text": "`packages/api/backend/src/routes/posts.routes.ts` declares `GET /:id/with-platforms` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ca5756175765b49d", "name": "Unused endpoint: GET /:id", "shortDescription": {"text": "Unused endpoint: GET /:id"}, "fullDescription": {"text": "`packages/api/backend/src/routes/posts.routes.ts` declares `GET /:id` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8d5b2b188d08ca82", "name": "Unused endpoint: PUT /:id", "shortDescription": {"text": "Unused endpoint: PUT /:id"}, "fullDescription": {"text": "`packages/api/backend/src/routes/posts.routes.ts` declares `PUT /:id` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e5d2797229565e60", "name": "Unused endpoint: PUT /:id/platform-selection", "shortDescription": {"text": "Unused endpoint: PUT /:id/platform-selection"}, "fullDescription": {"text": "`packages/api/backend/src/routes/posts.routes.ts` declares `PUT /:id/platform-selection` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cad92e35dab4a69c", "name": "Unused endpoint: POST /:id/reschedule", "shortDescription": {"text": "Unused endpoint: POST /:id/reschedule"}, "fullDescription": {"text": "`packages/api/backend/src/routes/posts.routes.ts` declares `POST /:id/reschedule` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cd1fe2a32ddf5ab8", "name": "Unused endpoint: GET /:id/reschedule-options", "shortDescription": {"text": "Unused endpoint: GET /:id/reschedule-options"}, "fullDescription": {"text": "`packages/api/backend/src/routes/posts.routes.ts` declares `GET /:id/reschedule-options` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e7631b7eb6caaf48", "name": "Unused endpoint: POST /:id/post-now", "shortDescription": {"text": "Unused endpoint: POST /:id/post-now"}, "fullDescription": {"text": "`packages/api/backend/src/routes/posts.routes.ts` declares `POST /:id/post-now` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0ff6430ab8f60ee7", "name": "Unused endpoint: POST /:id/schedule", "shortDescription": {"text": "Unused endpoint: POST /:id/schedule"}, "fullDescription": {"text": "`packages/api/backend/src/routes/posts.routes.ts` declares `POST /:id/schedule` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0cb78db4e7bafb1c", "name": "Unused endpoint: POST /:id/cancel", "shortDescription": {"text": "Unused endpoint: POST /:id/cancel"}, "fullDescription": {"text": "`packages/api/backend/src/routes/posts.routes.ts` declares `POST /:id/cancel` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7a61c112b611f4bb", "name": "Unused endpoint: DELETE /:id", "shortDescription": {"text": "Unused endpoint: DELETE /:id"}, "fullDescription": {"text": "`packages/api/backend/src/routes/posts.routes.ts` declares `DELETE /:id` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-86272cbb5b6da0b3", "name": "Unused endpoint: POST /:id/retry", "shortDescription": {"text": "Unused endpoint: POST /:id/retry"}, "fullDescription": {"text": "`packages/api/backend/src/routes/posts.routes.ts` declares `POST /:id/retry` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9946668bc655784c", "name": "Unused endpoint: GET /:id/status", "shortDescription": {"text": "Unused endpoint: GET /:id/status"}, "fullDescription": {"text": "`packages/api/backend/src/routes/posts.routes.ts` declares `GET /:id/status` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-01b064324cf0ccbe", "name": "Unused endpoint: GET /integrations", "shortDescription": {"text": "Unused endpoint: GET /integrations"}, "fullDescription": {"text": "`packages/api/backend/src/routes/automation.routes.ts` declares `GET /integrations` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-650a327404b12c5e", "name": "Unused endpoint: POST /posts/:id/schedule", "shortDescription": {"text": "Unused endpoint: POST /posts/:id/schedule"}, "fullDescription": {"text": "`packages/api/backend/src/routes/automation.routes.ts` declares `POST /posts/:id/schedule` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c9b846d34541db5e", "name": "Unused endpoint: POST /posts/:id/recurring", "shortDescription": {"text": "Unused endpoint: POST /posts/:id/recurring"}, "fullDescription": {"text": "`packages/api/backend/src/routes/automation.routes.ts` declares `POST /posts/:id/recurring` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7b8431cee3e46db7", "name": "Unused endpoint: GET /posts/:id/upcoming-instances", "shortDescription": {"text": "Unused endpoint: GET /posts/:id/upcoming-instances"}, "fullDescription": {"text": "`packages/api/backend/src/routes/automation.routes.ts` declares `GET /posts/:id/upcoming-instances` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3b067a5c4e1f5863", "name": "Unused endpoint: GET /posts/:id/status", "shortDescription": {"text": "Unused endpoint: GET /posts/:id/status"}, "fullDescription": {"text": "`packages/api/backend/src/routes/automation.routes.ts` declares `GET /posts/:id/status` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d5654000a0e34628", "name": "Unused endpoint: POST /posts/:id/pause", "shortDescription": {"text": "Unused endpoint: POST /posts/:id/pause"}, "fullDescription": {"text": "`packages/api/backend/src/routes/automation.routes.ts` declares `POST /posts/:id/pause` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e06caeb2b8448b7a", "name": "Unused endpoint: POST /posts/:id/resume", "shortDescription": {"text": "Unused endpoint: POST /posts/:id/resume"}, "fullDescription": {"text": "`packages/api/backend/src/routes/automation.routes.ts` declares `POST /posts/:id/resume` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f117a2b493d34d20", "name": "Unused endpoint: DELETE /posts/:id/cancel-recurring", "shortDescription": {"text": "Unused endpoint: DELETE /posts/:id/cancel-recurring"}, "fullDescription": {"text": "`packages/api/backend/src/routes/automation.routes.ts` declares `DELETE /posts/:id/cancel-recurring` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-69a887dade4ae83a", "name": "Unused endpoint: POST /posts/:id/optimize-timing", "shortDescription": {"text": "Unused endpoint: POST /posts/:id/optimize-timing"}, "fullDescription": {"text": "`packages/api/backend/src/routes/automation.routes.ts` declares `POST /posts/:id/optimize-timing` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-26bf5f94d883f709", "name": "Unused endpoint: GET /rules", "shortDescription": {"text": "Unused endpoint: GET /rules"}, "fullDescription": {"text": "`packages/api/backend/src/routes/automation.routes.ts` declares `GET /rules` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d91a7845c35d0f8f", "name": "Unused endpoint: POST /rules", "shortDescription": {"text": "Unused endpoint: POST /rules"}, "fullDescription": {"text": "`packages/api/backend/src/routes/automation.routes.ts` declares `POST /rules` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b1c09705df786432", "name": "Unused endpoint: POST /posts/:id/apply-rule", "shortDescription": {"text": "Unused endpoint: POST /posts/:id/apply-rule"}, "fullDescription": {"text": "`packages/api/backend/src/routes/automation.routes.ts` declares `POST /posts/:id/apply-rule` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0ec5fd978c205afd", "name": "Unused endpoint: GET /logs/:postId", "shortDescription": {"text": "Unused endpoint: GET /logs/:postId"}, "fullDescription": {"text": "`packages/api/backend/src/routes/automation.routes.ts` declares `GET /logs/:postId` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cb9411a1a1dab06e", "name": "Unused endpoint: POST /batch-schedule", "shortDescription": {"text": "Unused endpoint: POST /batch-schedule"}, "fullDescription": {"text": "`packages/api/backend/src/routes/automation.routes.ts` declares `POST /batch-schedule` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dd71dfa1d0356c5b", "name": "Unused endpoint: GET /:slug", "shortDescription": {"text": "Unused endpoint: GET /:slug"}, "fullDescription": {"text": "`packages/api/backend/src/routes/integrations.routes.ts` declares `GET /:slug` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fb2629e36ca10190", "name": "Unused endpoint: GET /:slug/auth-url", "shortDescription": {"text": "Unused endpoint: GET /:slug/auth-url"}, "fullDescription": {"text": "`packages/api/backend/src/routes/integrations.routes.ts` declares `GET /:slug/auth-url` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-98b4d10c816039b1", "name": "Unused endpoint: GET /:slug/callback", "shortDescription": {"text": "Unused endpoint: GET /:slug/callback"}, "fullDescription": {"text": "`packages/api/backend/src/routes/integrations.routes.ts` declares `GET /:slug/callback` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3261e6ff40613136", "name": "Unused endpoint: POST /:slug/callback", "shortDescription": {"text": "Unused endpoint: POST /:slug/callback"}, "fullDescription": {"text": "`packages/api/backend/src/routes/integrations.routes.ts` declares `POST /:slug/callback` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ea0c84d0c2fa8d0c", "name": "Unused endpoint: POST /:integrationId/disconnect", "shortDescription": {"text": "Unused endpoint: POST /:integrationId/disconnect"}, "fullDescription": {"text": "`packages/api/backend/src/routes/integrations.routes.ts` declares `POST /:integrationId/disconnect` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a2e5add6ce53e205", "name": "Unused endpoint: GET /:integrationId/accounts", "shortDescription": {"text": "Unused endpoint: GET /:integrationId/accounts"}, "fullDescription": {"text": "`packages/api/backend/src/routes/integrations.routes.ts` declares `GET /:integrationId/accounts` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-66ef1fa55f5634a8", "name": "Unused endpoint: POST /:integrationId/validate", "shortDescription": {"text": "Unused endpoint: POST /:integrationId/validate"}, "fullDescription": {"text": "`packages/api/backend/src/routes/integrations.routes.ts` declares `POST /:integrationId/validate` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-05753ae3e265cd12", "name": "Unused endpoint: GET /logs/:integrationId", "shortDescription": {"text": "Unused endpoint: GET /logs/:integrationId"}, "fullDescription": {"text": "`packages/api/backend/src/routes/integrations.routes.ts` declares `GET /logs/:integrationId` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8d16b1bb2723f51e", "name": "Unused endpoint: POST /signup", "shortDescription": {"text": "Unused endpoint: POST /signup"}, "fullDescription": {"text": "`packages/api/backend/src/routes/auth.routes.ts` declares `POST /signup` 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/25194"}, "properties": {"repository": "Daky0000/Saas", "repoUrl": "https://github.com/Daky0000/Saas", "branch": "main"}, "results": [{"ruleId": "scanner-915e441c51be35f4", "level": "note", "message": {"text": "Possibly dead Python function: compare_approaches"}, "properties": {"repobilityId": "5705bf2477bf1e6d", "scanner": "scanner-primary", "fingerprint": "915e441c51be35f4", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/token-guardian-skill/scripts/token_estimator.py:111"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-05b269e6a9e3eead", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/api/backend/scripts/seed-users.js:58"}, "properties": {"repobilityId": "798980f81fd8476b", "scanner": "scanner-primary", "fingerprint": "05b269e6a9e3eead", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5a63da94eadbf422", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/api/backend/utils/notify.js:13"}, "properties": {"repobilityId": "422afac5bef62e7b", "scanner": "scanner-primary", "fingerprint": "5a63da94eadbf422", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-63cec3fb3badd44c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/api/backend/src/index.ts:69"}, "properties": {"repobilityId": "737d44f09fdb7924", "scanner": "scanner-primary", "fingerprint": "63cec3fb3badd44c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1ea3725630f25569", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/api/backend/src/utils/seed-default-users.ts:110"}, "properties": {"repobilityId": "c83fb8baabeaec46", "scanner": "scanner-primary", "fingerprint": "1ea3725630f25569", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b2ade723957dfb7c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/api/backend/controllers/webhooks.js:14"}, "properties": {"repobilityId": "1b8aee4112004db7", "scanner": "scanner-primary", "fingerprint": "b2ade723957dfb7c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ea3d5497ce0fdbb5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/api/backend/platforms/twitter_x.ts:392"}, "properties": {"repobilityId": "710ab3988932b896", "scanner": "scanner-primary", "fingerprint": "ea3d5497ce0fdbb5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fe875c3dd2efc94e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/api/backend/scheduler/scheduler.js:123"}, "properties": {"repobilityId": "290230ee48c3a61b", "scanner": "scanner-primary", "fingerprint": "fe875c3dd2efc94e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d294cf1add92e228", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/App.tsx:388"}, "properties": {"repobilityId": "16aa56f0bf0033ba", "scanner": "scanner-primary", "fingerprint": "d294cf1add92e228", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-35b352ed96dbaf7d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/FileUploadDropzone.tsx:185"}, "properties": {"repobilityId": "55374b0c2232ba48", "scanner": "scanner-primary", "fingerprint": "35b352ed96dbaf7d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-dd2aeef7752494be", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/ChatWidget.tsx:415"}, "properties": {"repobilityId": "c23c92519450032f", "scanner": "scanner-primary", "fingerprint": "dd2aeef7752494be", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3ca7d53e61f802f4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/automation/SocialTemplatePreview.tsx:131"}, "properties": {"repobilityId": "25a085b757b1d07c", "scanner": "scanner-primary", "fingerprint": "3ca7d53e61f802f4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e0d2489b9ec35f9f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/automation/SocialTemplateNetworkTabs.tsx:41"}, "properties": {"repobilityId": "9b34c52556452800", "scanner": "scanner-primary", "fingerprint": "e0d2489b9ec35f9f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4fbf30f1c2b00872", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/cards/ColorPickerField.tsx:92"}, "properties": {"repobilityId": "cefda748e3ab41e3", "scanner": "scanner-primary", "fingerprint": "4fbf30f1c2b00872", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8891faa013c3b630", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/cards/builder/LayersPanel.tsx:84"}, "properties": {"repobilityId": "9f4e31fc80f57e25", "scanner": "scanner-primary", "fingerprint": "8891faa013c3b630", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c0eb6524aaf216d8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/cards/builder/PropertiesPanel.tsx:108"}, "properties": {"repobilityId": "f0537a68f7a0326e", "scanner": "scanner-primary", "fingerprint": "c0eb6524aaf216d8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d80c591430019c44", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/cards/builder/ElementsPanel.tsx:112"}, "properties": {"repobilityId": "dee5d08aaa1493d7", "scanner": "scanner-primary", "fingerprint": "d80c591430019c44", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9671e001669a1804", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/cards/builder/ImageUploadModal.tsx:209"}, "properties": {"repobilityId": "0f3aae04ab99f5dd", "scanner": "scanner-primary", "fingerprint": "9671e001669a1804", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bf27f3b405b2eda4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/admin/AdminLearn.tsx:349"}, "properties": {"repobilityId": "3b703200250c0f2c", "scanner": "scanner-primary", "fingerprint": "bf27f3b405b2eda4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-514c9e7e02c3afa7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/admin/CardBuilder.tsx:334"}, "properties": {"repobilityId": "11767941c90d5960", "scanner": "scanner-primary", "fingerprint": "514c9e7e02c3afa7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ded44d20b0e9735d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/admin/AdminAgents.tsx:750"}, "properties": {"repobilityId": "53ea2d074875c58b", "scanner": "scanner-primary", "fingerprint": "ded44d20b0e9735d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-442f93223e75fd22", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/admin/AdminCardsManagement.tsx:357"}, "properties": {"repobilityId": "ee1eda1b34f40d37", "scanner": "scanner-primary", "fingerprint": "442f93223e75fd22", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b950a1c107c664b6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/admin/AdminOpenAI.tsx:252"}, "properties": {"repobilityId": "12be60ec568cea7d", "scanner": "scanner-primary", "fingerprint": "b950a1c107c664b6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0b7574b681c59e84", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/admin/AdminMediaManagement.tsx:177"}, "properties": {"repobilityId": "be49055f1226d713", "scanner": "scanner-primary", "fingerprint": "0b7574b681c59e84", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-58caae81b4acbbae", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/admin/AdminMagnific.tsx:328"}, "properties": {"repobilityId": "10e5debbeb818ebe", "scanner": "scanner-primary", "fingerprint": "58caae81b4acbbae", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-931321eaf3c5c430", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/admin/AdminFabricBuilder.tsx:625"}, "properties": {"repobilityId": "e8220a55750eca79", "scanner": "scanner-primary", "fingerprint": "931321eaf3c5c430", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-65bc7589ca9ee12c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/admin/AdminHiggsfield.tsx:640"}, "properties": {"repobilityId": "12f4b70ab2e7c79b", "scanner": "scanner-primary", "fingerprint": "65bc7589ca9ee12c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-65577e46923117bd", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/admin/AdminKling.tsx:231"}, "properties": {"repobilityId": "2d8bccbc0810d104", "scanner": "scanner-primary", "fingerprint": "65577e46923117bd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-60ef4e9403bdb103", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/admin/AdminApify.tsx:353"}, "properties": {"repobilityId": "0b31be960fe21573", "scanner": "scanner-primary", "fingerprint": "60ef4e9403bdb103", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9f3c404e0986c847", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/admin/AdminGoogle.tsx:258"}, "properties": {"repobilityId": "312f687b7971530f", "scanner": "scanner-primary", "fingerprint": "9f3c404e0986c847", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-aebf8f040aa8cb9f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/media/MediaLibraryModal.tsx:370"}, "properties": {"repobilityId": "25df94c100bfac02", "scanner": "scanner-primary", "fingerprint": "aebf8f040aa8cb9f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-86712996b96d289c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/email/EmailBuilder.tsx:918"}, "properties": {"repobilityId": "4036ec79bd6f08b4", "scanner": "scanner-primary", "fingerprint": "86712996b96d289c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-350dc8161cb75a52", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 packages/web/src/components/email/EmailBuilder.tsx:376"}, "properties": {"repobilityId": "8ddd19d8e27a5ab7", "scanner": "scanner-primary", "fingerprint": "350dc8161cb75a52", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-0ab2e9a7e9db2776", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/analytics/AccountDashboard.tsx:226"}, "properties": {"repobilityId": "e72432ad8e2a550e", "scanner": "scanner-primary", "fingerprint": "0ab2e9a7e9db2776", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e2e6350fdd4100f1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/analytics/LinkedInAnalytics.tsx:285"}, "properties": {"repobilityId": "743c0144d4919f91", "scanner": "scanner-primary", "fingerprint": "e2e6350fdd4100f1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ad0ee4b7f72abb6e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/analytics/ComparisonView.tsx:51"}, "properties": {"repobilityId": "00224f7323818070", "scanner": "scanner-primary", "fingerprint": "ad0ee4b7f72abb6e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-09da27a3c8391efe", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/analytics/SocialAccountsOverview.tsx:160"}, "properties": {"repobilityId": "a380806ae6a6316a", "scanner": "scanner-primary", "fingerprint": "09da27a3c8391efe", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-53d808d932465926", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/analytics/PinterestAnalytics.tsx:507"}, "properties": {"repobilityId": "909ba43ca2132df2", "scanner": "scanner-primary", "fingerprint": "53d808d932465926", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ea01dbcc80b74216", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/calendar/ScheduleCalendar.tsx:404"}, "properties": {"repobilityId": "bb7e54e6ee808780", "scanner": "scanner-primary", "fingerprint": "ea01dbcc80b74216", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1454215f82f12ab9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/tasks/tabs/TaskMembers.tsx:47"}, "properties": {"repobilityId": "40d6851757fdd58a", "scanner": "scanner-primary", "fingerprint": "1454215f82f12ab9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-afdeec2b1255047c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/tasks/tabs/TaskFiles.tsx:57"}, "properties": {"repobilityId": "77165668f80dc5ff", "scanner": "scanner-primary", "fingerprint": "afdeec2b1255047c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-55406f3eeeadfdc9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/tasks/tabs/TaskOverview.tsx:116"}, "properties": {"repobilityId": "0cebc732bec6bfbf", "scanner": "scanner-primary", "fingerprint": "55406f3eeeadfdc9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-88bc5226d7bfcdc1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/tasks/detail/TaskDetailPanel.tsx:524"}, "properties": {"repobilityId": "0dfac528eadd66fe", "scanner": "scanner-primary", "fingerprint": "88bc5226d7bfcdc1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fc2909c0a3382f0f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/posts/batch/PlatformsModal.tsx:57"}, "properties": {"repobilityId": "47eb69ec94be16a8", "scanner": "scanner-primary", "fingerprint": "fc2909c0a3382f0f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-96d009d4beac8045", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/components/crm/ScheduleMeetingModal.tsx:273"}, "properties": {"repobilityId": "6ec017e713afcbd3", "scanner": "scanner-primary", "fingerprint": "96d009d4beac8045", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a064834a3bb13502", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/pages/Discover.tsx:108"}, "properties": {"repobilityId": "58caf8cc38e22122", "scanner": "scanner-primary", "fingerprint": "a064834a3bb13502", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5f48b256b6211a31", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/pages/GmailInbox.tsx:169"}, "properties": {"repobilityId": "920d11559d4da84f", "scanner": "scanner-primary", "fingerprint": "5f48b256b6211a31", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8b3e725a92ea040b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/pages/Posts.tsx:292"}, "properties": {"repobilityId": "6bd42f1029444a40", "scanner": "scanner-primary", "fingerprint": "8b3e725a92ea040b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cf8cfca91b733d2c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/pages/Workflow.tsx:431"}, "properties": {"repobilityId": "c8c71442f0de0929", "scanner": "scanner-primary", "fingerprint": "cf8cfca91b733d2c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a0529d26d0968d72", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/pages/GmailAgent.tsx:303"}, "properties": {"repobilityId": "b7d9cb6f326ab1a7", "scanner": "scanner-primary", "fingerprint": "a0529d26d0968d72", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4ca59cfe20cbdb38", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/pages/CRMCompanies.tsx:643"}, "properties": {"repobilityId": "4a89e6de4426b3e0", "scanner": "scanner-primary", "fingerprint": "4ca59cfe20cbdb38", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-45e8c8c249a540b0", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 packages/web/src/pages/CRMCompanies.tsx:212"}, "properties": {"repobilityId": "950e5dde93c8a6dc", "scanner": "scanner-primary", "fingerprint": "45e8c8c249a540b0", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-33c1f57ebfa1143f", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 packages/web/src/pages/PublicSurvey.tsx:113"}, "properties": {"repobilityId": "de98e3e1c688c584", "scanner": "scanner-primary", "fingerprint": "33c1f57ebfa1143f", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-f0bc0f77231b90f0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/pages/MarketingAutomations.tsx:604"}, "properties": {"repobilityId": "66e45888d3f117f4", "scanner": "scanner-primary", "fingerprint": "f0bc0f77231b90f0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5ac3a8f6ca87da45", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/pages/MarketingCampaigns.tsx:693"}, "properties": {"repobilityId": "aabd584ea24201b8", "scanner": "scanner-primary", "fingerprint": "5ac3a8f6ca87da45", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b5fdeed1b521e239", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/pages/Cards.tsx:468"}, "properties": {"repobilityId": "79b14496beace1e5", "scanner": "scanner-primary", "fingerprint": "b5fdeed1b521e239", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e65caaa161d867e2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/pages/MarketingEmail.tsx:299"}, "properties": {"repobilityId": "588f5dfb9b9b35da", "scanner": "scanner-primary", "fingerprint": "e65caaa161d867e2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1004672081bace7e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/pages/ConnectorProviderSetup.tsx:153"}, "properties": {"repobilityId": "7a0372d6d0fc88af", "scanner": "scanner-primary", "fingerprint": "1004672081bace7e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3940433590c19f67", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/pages/PostAutomation.tsx:109"}, "properties": {"repobilityId": "20bd3220cab19876", "scanner": "scanner-primary", "fingerprint": "3940433590c19f67", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-263d322dd0914cb3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/pages/MarketingSurveys.tsx:579"}, "properties": {"repobilityId": "393b12dc17462d51", "scanner": "scanner-primary", "fingerprint": "263d322dd0914cb3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5bcd27d9e4be355d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/pages/AITeam.tsx:643"}, "properties": {"repobilityId": "7ef5e02fb1af9532", "scanner": "scanner-primary", "fingerprint": "5bcd27d9e4be355d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-782835f442b982cc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/pages/Integrations.tsx:1418"}, "properties": {"repobilityId": "b8aa86d22fc2d21f", "scanner": "scanner-primary", "fingerprint": "782835f442b982cc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ef14061b58719339", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/pages/MarketingContacts.tsx:1279"}, "properties": {"repobilityId": "6cbb97f3d517abfd", "scanner": "scanner-primary", "fingerprint": "ef14061b58719339", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cbe82c48c550c399", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/pages/MarketingOverview.tsx:155"}, "properties": {"repobilityId": "93437c571b6bbf85", "scanner": "scanner-primary", "fingerprint": "cbe82c48c550c399", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7930d0f3d4d6cb66", "level": "note", "message": {"text": "\"active\" state uses light bg in a dark theme \u2014 packages/web/src/pages/Admin.tsx:186"}, "properties": {"repobilityId": "e73aeb6303048e39", "scanner": "scanner-primary", "fingerprint": "7930d0f3d4d6cb66", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.active-light-bg"]}}, {"ruleId": "scanner-835c43307f1e59d6", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 packages/web/src/pages/Auth.tsx:492"}, "properties": {"repobilityId": "ff114e3e4d9f1f00", "scanner": "scanner-primary", "fingerprint": "835c43307f1e59d6", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-7e8e7894e7511b97", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/pages/Media.tsx:397"}, "properties": {"repobilityId": "7869b687df9c4e63", "scanner": "scanner-primary", "fingerprint": "7e8e7894e7511b97", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ac564edd6d408c5f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/pages/Workspace.tsx:107"}, "properties": {"repobilityId": "6f7c917f304bb83d", "scanner": "scanner-primary", "fingerprint": "ac564edd6d408c5f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-35342ff7de01a36f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/pages/CRMPipeline.tsx:181"}, "properties": {"repobilityId": "5fc73db840e2bf50", "scanner": "scanner-primary", "fingerprint": "35342ff7de01a36f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-304cec3a956d210b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/pages/ConnectorSyncDashboard.tsx:404"}, "properties": {"repobilityId": "c5bd864d179daca6", "scanner": "scanner-primary", "fingerprint": "304cec3a956d210b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-788cf4eb25d49e4a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/pages/Dashboard.tsx:692"}, "properties": {"repobilityId": "d09e4d222baff358", "scanner": "scanner-primary", "fingerprint": "788cf4eb25d49e4a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-838ea99a91187a2f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/web/src/pages/ProjectSettings.tsx:373"}, "properties": {"repobilityId": "e618a5dc64303964", "scanner": "scanner-primary", "fingerprint": "838ea99a91187a2f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7f018748821f0664", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 .claude/skills/remotion-to-hyperframes/scripts/tests/fixtures/clean.tsx:26"}, "properties": {"repobilityId": "21e6c6ee7b70a095", "scanner": "scanner-primary", "fingerprint": "7f018748821f0664", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d63da3583b14afc0", "level": "warning", "message": {"text": "Dockerfile runs as root: Dockerfile"}, "properties": {"repobilityId": "a2ed1bd120e507db", "scanner": "scanner-primary", "fingerprint": "d63da3583b14afc0", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-8987d6d1c30c7202", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-alpine"}, "properties": {"repobilityId": "89d03469db48fa6a", "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": 2}}}]}, {"ruleId": "scanner-8987d6d1c30c7202", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-alpine"}, "properties": {"repobilityId": "7ce8517f284f2230", "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": 31}}}]}, {"ruleId": "scanner-8987d6d1c30c7202", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-alpine"}, "properties": {"repobilityId": "436ebeee97a0748f", "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": 45}}}]}, {"ruleId": "scanner-8a8afc8ce2ef5600", "level": "error", "message": {"text": "Possible secret in packages/api/src/user-auth.ts"}, "properties": {"repobilityId": "cc6f6fcf0fc2e3a2", "scanner": "scanner-primary", "fingerprint": "8a8afc8ce2ef5600", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/api/src/user-auth.ts"}, "region": {"startLine": 146}}}]}, {"ruleId": "scanner-8a8afc8ce2ef5600", "level": "error", "message": {"text": "Possible secret in packages/api/src/user-auth.ts"}, "properties": {"repobilityId": "cc6f6fcf0fc2e3a2", "scanner": "scanner-primary", "fingerprint": "8a8afc8ce2ef5600", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/api/src/user-auth.ts"}, "region": {"startLine": 347}}}]}, {"ruleId": "scanner-7b37cf326d20c0ce", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in packages/web/src/App.tsx:1023"}, "properties": {"repobilityId": "e473acfdfebd496d", "scanner": "scanner-primary", "fingerprint": "7b37cf326d20c0ce", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/web/src/App.tsx"}, "region": {"startLine": 1023}}}]}, {"ruleId": "scanner-436d44f5b2183456", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in packages/web/src/components/email/EmailBuilder.tsx:376"}, "properties": {"repobilityId": "b01aaf6a411070b5", "scanner": "scanner-primary", "fingerprint": "436d44f5b2183456", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/web/src/components/email/EmailBuilder.tsx"}, "region": {"startLine": 376}}}]}, {"ruleId": "scanner-d0b5fb8103d7399b", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in packages/web/src/pages/CRMCompanies.tsx:212"}, "properties": {"repobilityId": "535bdc718c619c4b", "scanner": "scanner-primary", "fingerprint": "d0b5fb8103d7399b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/web/src/pages/CRMCompanies.tsx"}, "region": {"startLine": 212}}}]}, {"ruleId": "scanner-99fedd03bacfcb8b", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in packages/web/src/pages/PublicSurvey.tsx:113"}, "properties": {"repobilityId": "55338bfc70d85308", "scanner": "scanner-primary", "fingerprint": "99fedd03bacfcb8b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/web/src/pages/PublicSurvey.tsx"}, "region": {"startLine": 113}}}]}, {"ruleId": "scanner-70f047568758b33e", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in packages/web/src/pages/MarketingSurveys.tsx:127"}, "properties": {"repobilityId": "167693184d3479ba", "scanner": "scanner-primary", "fingerprint": "70f047568758b33e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/web/src/pages/MarketingSurveys.tsx"}, "region": {"startLine": 127}}}]}, {"ruleId": "scanner-116b8b53563d81f5", "level": "error", "message": {"text": "Insecure pattern 'exec_used' in packages/web/src/pages/MarketingContacts.tsx:1857"}, "properties": {"repobilityId": "dc23dfb82e23554e", "scanner": "scanner-primary", "fingerprint": "116b8b53563d81f5", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "exec_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/web/src/pages/MarketingContacts.tsx"}, "region": {"startLine": 1857}}}]}, {"ruleId": "scanner-505711b2d813b4c8", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in packages/web/src/pages/Auth.tsx:492"}, "properties": {"repobilityId": "bc8d8e30666d184e", "scanner": "scanner-primary", "fingerprint": "505711b2d813b4c8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/web/src/pages/Auth.tsx"}, "region": {"startLine": 492}}}]}, {"ruleId": "scanner-130a418be00238b2", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in packages/web/src/pages/Auth.tsx:355"}, "properties": {"repobilityId": "b77fcfd357a7a8d5", "scanner": "scanner-primary", "fingerprint": "130a418be00238b2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/web/src/pages/Auth.tsx"}, "region": {"startLine": 355}}}]}, {"ruleId": "scanner-a37eefe655a49c3b", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/dev.mjs:1"}, "properties": {"repobilityId": "ccf61f89afbd7b7b", "scanner": "scanner-primary", "fingerprint": "a37eefe655a49c3b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/dev.mjs"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-594e9038ce7231e8", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/set-production-api.mjs:9"}, "properties": {"repobilityId": "c1c2476b581836ce", "scanner": "scanner-primary", "fingerprint": "594e9038ce7231e8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/set-production-api.mjs"}, "region": {"startLine": 9}}}]}, {"ruleId": "scanner-c157671f40832885", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in frontend/src/utils/api.ts:34"}, "properties": {"repobilityId": "29717206bb89a92a", "scanner": "scanner-primary", "fingerprint": "c157671f40832885", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/src/utils/api.ts"}, "region": {"startLine": 34}}}]}, {"ruleId": "scanner-971ef6728bdbcac3", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in frontend/src/store/authStore.ts:53"}, "properties": {"repobilityId": "5b44e7f02a305ab4", "scanner": "scanner-primary", "fingerprint": "971ef6728bdbcac3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/src/store/authStore.ts"}, "region": {"startLine": 53}}}]}, {"ruleId": "scanner-e9c68d8653565e05", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in .claude/skills/hyperframes/scripts/package-loader.mjs:1"}, "properties": {"repobilityId": "698312c9a0a7dca5", "scanner": "scanner-primary", "fingerprint": "e9c68d8653565e05", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/hyperframes/scripts/package-loader.mjs"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d1b928f8f8d158f1", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "b9e62e7c5defbc51", "scanner": "scanner-primary", "fingerprint": "d1b928f8f8d158f1", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/gitleaks.yml"}, "region": {"startLine": 16}}}]}, {"ruleId": "scanner-d1b928f8f8d158f1", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "34edd0dfff920fcf", "scanner": "scanner-primary", "fingerprint": "d1b928f8f8d158f1", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/gitleaks.yml"}, "region": {"startLine": 21}}}]}, {"ruleId": "scanner-d6eb6f61f39a295c", "level": "note", "message": {"text": "Very large file: packages/api/backend/src/services/analytics.service.ts (10922 lines)"}, "properties": {"repobilityId": "6e44213f970581cf", "scanner": "scanner-primary", "fingerprint": "d6eb6f61f39a295c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-838717c25e1c8f43", "level": "note", "message": {"text": "Very large file: packages/api/src/db-migrations.ts (3996 lines)"}, "properties": {"repobilityId": "50d3ca7360664dff", "scanner": "scanner-primary", "fingerprint": "838717c25e1c8f43", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-54321af1c3b85155", "level": "note", "message": {"text": "Very large file: packages/api/src/server/orgRoutes.ts (992 lines)"}, "properties": {"repobilityId": "1c35757ffe7cc948", "scanner": "scanner-primary", "fingerprint": "54321af1c3b85155", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e2e75759bf3525f2", "level": "note", "message": {"text": "Very large file: packages/api/src/server/novaRoutes.ts (1823 lines)"}, "properties": {"repobilityId": "45416359977f5e48", "scanner": "scanner-primary", "fingerprint": "e2e75759bf3525f2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-84b6d9966b49feb9", "level": "note", "message": {"text": "Very large file: packages/api/src/server/aiChatRoutes.ts (1085 lines)"}, "properties": {"repobilityId": "55223798f1263b91", "scanner": "scanner-primary", "fingerprint": "84b6d9966b49feb9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-9176f9d581a2bfdf", "level": "note", "message": {"text": "Very large file: packages/api/src/server/distributionRoutes.ts (2804 lines)"}, "properties": {"repobilityId": "cc67fa49ac108182", "scanner": "scanner-primary", "fingerprint": "9176f9d581a2bfdf", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ded4663d8945107a", "level": "note", "message": {"text": "Very large file: packages/api/src/server/socialRoutes.ts (1428 lines)"}, "properties": {"repobilityId": "86552f8ed8fc8d07", "scanner": "scanner-primary", "fingerprint": "ded4663d8945107a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-5c84bc11e2cd411a", "level": "note", "message": {"text": "Very large file: packages/api/src/server/socialConnectRoutes.ts (1643 lines)"}, "properties": {"repobilityId": "277e26c0041f0da9", "scanner": "scanner-primary", "fingerprint": "5c84bc11e2cd411a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3a1b4078d89f46f5", "level": "note", "message": {"text": "Very large file: packages/web/src/App.tsx (1241 lines)"}, "properties": {"repobilityId": "491d14d2811d1e2f", "scanner": "scanner-primary", "fingerprint": "3a1b4078d89f46f5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-2fa86e34cece1b21", "level": "note", "message": {"text": "Very large file: packages/web/src/components/ChatWidget.tsx (1367 lines)"}, "properties": {"repobilityId": "71f24cef1b15659a", "scanner": "scanner-primary", "fingerprint": "2fa86e34cece1b21", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-98b9afe80d382da6", "level": "note", "message": {"text": "Very large file: packages/web/src/components/cards/builder/PropertiesPanel.tsx (1073 lines)"}, "properties": {"repobilityId": "4942cb1aa8bd242f", "scanner": "scanner-primary", "fingerprint": "98b9afe80d382da6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b2ea9a6aeede9e85", "level": "note", "message": {"text": "Very large file: packages/web/src/components/admin/AdminAgents.tsx (1449 lines)"}, "properties": {"repobilityId": "42ac5477472a310f", "scanner": "scanner-primary", "fingerprint": "b2ea9a6aeede9e85", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-7e3a64376f167a8a", "level": "note", "message": {"text": "Very large file: packages/web/src/components/email/EmailBuilder.tsx (1446 lines)"}, "properties": {"repobilityId": "d8e9c6c5324f33f2", "scanner": "scanner-primary", "fingerprint": "7e3a64376f167a8a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-876b00b4c7eaa1ef", "level": "note", "message": {"text": "Very large file: packages/web/src/pages/Posts.tsx (2198 lines)"}, "properties": {"repobilityId": "ea9a521f0c7a33c4", "scanner": "scanner-primary", "fingerprint": "876b00b4c7eaa1ef", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b4bd0527fcf0d80f", "level": "note", "message": {"text": "Very large file: packages/web/src/pages/Workflow.tsx (1175 lines)"}, "properties": {"repobilityId": "6c50c6dcde3b4268", "scanner": "scanner-primary", "fingerprint": "b4bd0527fcf0d80f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-8a08bcedb8fb7975", "level": "note", "message": {"text": "Very large file: packages/web/src/pages/Landing.tsx (1217 lines)"}, "properties": {"repobilityId": "799a5753b6244ed8", "scanner": "scanner-primary", "fingerprint": "8a08bcedb8fb7975", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a6f809c83890a0de", "level": "note", "message": {"text": "Very large file: packages/web/src/pages/CRMCompanies.tsx (1525 lines)"}, "properties": {"repobilityId": "bc80449400db5e2d", "scanner": "scanner-primary", "fingerprint": "a6f809c83890a0de", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-2f5a4cf17e5c7a59", "level": "note", "message": {"text": "Very large file: packages/web/src/pages/MarketingAutomations.tsx (1503 lines)"}, "properties": {"repobilityId": "945e3b4301192647", "scanner": "scanner-primary", "fingerprint": "2f5a4cf17e5c7a59", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-667d1112d79fa6ca", "level": "note", "message": {"text": "Very large file: packages/web/src/pages/MarketingCampaigns.tsx (2012 lines)"}, "properties": {"repobilityId": "9aa4a4e54233b843", "scanner": "scanner-primary", "fingerprint": "667d1112d79fa6ca", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-0ef8dfaac124fbd3", "level": "note", "message": {"text": "Very large file: packages/web/src/pages/Cards.tsx (1790 lines)"}, "properties": {"repobilityId": "f5652b706296ebfd", "scanner": "scanner-primary", "fingerprint": "0ef8dfaac124fbd3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-de3c325ea9a094d5", "level": "note", "message": {"text": "Very large file: packages/web/src/pages/MarketingSurveys.tsx (998 lines)"}, "properties": {"repobilityId": "22ed30367005c97b", "scanner": "scanner-primary", "fingerprint": "de3c325ea9a094d5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f038781bdb9b3637", "level": "note", "message": {"text": "Very large file: packages/web/src/pages/AITeam.tsx (1742 lines)"}, "properties": {"repobilityId": "b0d8ca37742c442d", "scanner": "scanner-primary", "fingerprint": "f038781bdb9b3637", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-1eb14a47cb259522", "level": "note", "message": {"text": "Very large file: packages/web/src/pages/Integrations.tsx (1746 lines)"}, "properties": {"repobilityId": "3ddb0987a6fd1e24", "scanner": "scanner-primary", "fingerprint": "1eb14a47cb259522", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-507225bddfbefa3b", "level": "note", "message": {"text": "Very large file: packages/web/src/pages/MarketingContacts.tsx (2561 lines)"}, "properties": {"repobilityId": "57daa9bcace37b74", "scanner": "scanner-primary", "fingerprint": "507225bddfbefa3b", "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": "f5ca020a1e825afb", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-0a0634ffe3eb1107", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/api/package.json"}, "properties": {"repobilityId": "61aa8b13d545e157", "scanner": "scanner-primary", "fingerprint": "0a0634ffe3eb1107", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/api/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a28850983a0b02d5", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/web/package.json"}, "properties": {"repobilityId": "8f313f0fe526a925", "scanner": "scanner-primary", "fingerprint": "a28850983a0b02d5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/web/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-47e453b6d91595b1", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/package.json"}, "properties": {"repobilityId": "c790ea5a6162b1f5", "scanner": "scanner-primary", "fingerprint": "47e453b6d91595b1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1829447bc11c6a6a", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/package.json"}, "properties": {"repobilityId": "dec330c16d729e93", "scanner": "scanner-primary", "fingerprint": "1829447bc11c6a6a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-86362ad75f6024fd", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/package.json"}, "properties": {"repobilityId": "0d6a1e28d0e7266c", "scanner": "scanner-primary", "fingerprint": "86362ad75f6024fd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "438e06febee3cd84", "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": "29fe7046a0803154", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-9d79c4077342a7d0", "level": "warning", "message": {"text": "Runtime service client appears to use placeholder configuration"}, "properties": {"repobilityId": "20ae39330f0bf1a9", "scanner": "scanner-primary", "fingerprint": "9d79c4077342a7d0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "runtime-config", "service-client", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "2bc9e721276fec0e", "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": "3eb206bd8be3fe7a", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "d075c7bf6312a447", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-122f91b7f2906dc4", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/settings.json"}, "properties": {"repobilityId": "a2967269048b6a9d", "scanner": "scanner-primary", "fingerprint": "122f91b7f2906dc4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/settings.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c2c8044344fb49db", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/tailwind/SKILL.md"}, "properties": {"repobilityId": "455ed4c2e8d6d47c", "scanner": "scanner-primary", "fingerprint": "c2c8044344fb49db", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/tailwind/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3912a1a57c52d6f6", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/hyperframes/SKILL.md"}, "properties": {"repobilityId": "565111f358eeac45", "scanner": "scanner-primary", "fingerprint": "3912a1a57c52d6f6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/hyperframes/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4a60e968f01ab124", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/hyperframes/references/techniques.md"}, "properties": {"repobilityId": "e4cd5c81936260fb", "scanner": "scanner-primary", "fingerprint": "4a60e968f01ab124", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/hyperframes/references/techniques.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0a94a522c7aac872", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/hyperframes/references/typography.md"}, "properties": {"repobilityId": "18a034c77c1ad558", "scanner": "scanner-primary", "fingerprint": "0a94a522c7aac872", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/hyperframes/references/typography.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d016aace36b42213", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/hyperframes/references/transcript-guide.md"}, "properties": {"repobilityId": "0da97d6b857984f3", "scanner": "scanner-primary", "fingerprint": "d016aace36b42213", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/hyperframes/references/transcript-guide.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ec2a3edfadbee5ed", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/hyperframes/references/motion-principles.md"}, "properties": {"repobilityId": "f54cffee2d85adec", "scanner": "scanner-primary", "fingerprint": "ec2a3edfadbee5ed", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/hyperframes/references/motion-principles.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-41428002df7d07c7", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/hyperframes-registry/SKILL.md"}, "properties": {"repobilityId": "92dbbc385a785704", "scanner": "scanner-primary", "fingerprint": "41428002df7d07c7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/hyperframes-registry/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5cbfa57d7b11abea", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/hyperframes-registry/references/install-locations.md"}, "properties": {"repobilityId": "114e1a5d085e56ce", "scanner": "scanner-primary", "fingerprint": "5cbfa57d7b11abea", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/hyperframes-registry/references/install-locations.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f266c5d72e112fb7", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/hyperframes-registry/references/discovery.md"}, "properties": {"repobilityId": "f5f7e5ac7a958a3a", "scanner": "scanner-primary", "fingerprint": "f266c5d72e112fb7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/hyperframes-registry/references/discovery.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f218ac5c3674a3c7", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/website-to-hyperframes/references/step-5-vo.md"}, "properties": {"repobilityId": "1f9f67f2166bfe26", "scanner": "scanner-primary", "fingerprint": "f218ac5c3674a3c7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/website-to-hyperframes/references/step-5-vo.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-49ffd286dcbd1bf4", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/website-to-hyperframes/references/step-2-design.md"}, "properties": {"repobilityId": "87cc43af286e64f1", "scanner": "scanner-primary", "fingerprint": "49ffd286dcbd1bf4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/website-to-hyperframes/references/step-2-design.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9c2d5eef7893959a", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/website-to-hyperframes/references/step-6-build.md"}, "properties": {"repobilityId": "60269c49eff4716f", "scanner": "scanner-primary", "fingerprint": "9c2d5eef7893959a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/website-to-hyperframes/references/step-6-build.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-65d7cf56ce6c6927", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/remotion-to-hyperframes/SKILL.md"}, "properties": {"repobilityId": "b0e13888b0abfba5", "scanner": "scanner-primary", "fingerprint": "65d7cf56ce6c6927", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/remotion-to-hyperframes/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-848cf9ddfbb8a287", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/remotion-to-hyperframes/references/limitations.md"}, "properties": {"repobilityId": "4159ad7a500ed288", "scanner": "scanner-primary", "fingerprint": "848cf9ddfbb8a287", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/remotion-to-hyperframes/references/limitations.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-891ebfefa106dd50", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/remotion-to-hyperframes/references/media.md"}, "properties": {"repobilityId": "96b3d35acbbfd493", "scanner": "scanner-primary", "fingerprint": "891ebfefa106dd50", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/remotion-to-hyperframes/references/media.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ecaad27c656ba42a", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/remotion-to-hyperframes/references/fonts.md"}, "properties": {"repobilityId": "705a8a8b30fe0c93", "scanner": "scanner-primary", "fingerprint": "ecaad27c656ba42a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/remotion-to-hyperframes/references/fonts.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-653cf5e502a52d87", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/expected.json"}, "properties": {"repobilityId": "cc2a1272ff45722a", "scanner": "scanner-primary", "fingerprint": "653cf5e502a52d87", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/expected.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a5a86f28e9937cd7", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/README.md"}, "properties": {"repobilityId": "d8bb5958da97af2a", "scanner": "scanner-primary", "fingerprint": "a5a86f28e9937cd7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/README.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-2bc9e25b3016bc49", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/README.md"}, "properties": {"repobilityId": "7460b4862a571620", "scanner": "scanner-primary", "fingerprint": "2bc9e25b3016bc49", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/README.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b0624263bb5c31ff", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/expected.json"}, "properties": {"repobilityId": "21badbf77ab71489", "scanner": "scanner-primary", "fingerprint": "b0624263bb5c31ff", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/expected.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6be6b1b08b9ece5c", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/README.md"}, "properties": {"repobilityId": "59e43b06a224711b", "scanner": "scanner-primary", "fingerprint": "6be6b1b08b9ece5c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/README.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d226b3425d099648", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare-proxy.js:17"}, "properties": {"repobilityId": "f61f4122902e459f", "scanner": "scanner-primary", "fingerprint": "d226b3425d099648", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-74784cfd3e47d43e", "level": "note", "message": {"text": "Legacy-named symbol `ad_copy` in packages/api/src/agent-helpers.ts:16"}, "properties": {"repobilityId": "c2f59d9bffc79557", "scanner": "scanner-primary", "fingerprint": "74784cfd3e47d43e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-bc2f8d3f1af0f63d", "level": "note", "message": {"text": "Legacy-named symbol `ad_copy` in packages/api/src/db-migrations.ts:2788"}, "properties": {"repobilityId": "7906f4645b1c6380", "scanner": "scanner-primary", "fingerprint": "bc2f8d3f1af0f63d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-4e2cc699e15cf545", "level": "none", "message": {"text": "Commented-code block (7 lines) in packages/api/src/db-migrations.ts:845"}, "properties": {"repobilityId": "d0eb0e8902ab694e", "scanner": "scanner-primary", "fingerprint": "4e2cc699e15cf545", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8675391966dea5dc", "level": "note", "message": {"text": "Legacy-named symbol `ad_copy` in packages/api/src/server/novaRoutes.ts:97"}, "properties": {"repobilityId": "7095b11f31653d7e", "scanner": "scanner-primary", "fingerprint": "8675391966dea5dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-a8e50772ce626c7a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/api/src/server/leadsRoutes.ts:26"}, "properties": {"repobilityId": "b523242d2ca059cd", "scanner": "scanner-primary", "fingerprint": "a8e50772ce626c7a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8001275cb5e55c65", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/api/src/server/distributionRoutes.ts:859"}, "properties": {"repobilityId": "988e581f2347c172", "scanner": "scanner-primary", "fingerprint": "8001275cb5e55c65", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-69081d4a44600f91", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/components/admin/AdminBillingDashboard.tsx:8"}, "properties": {"repobilityId": "5e617cb5587a7384", "scanner": "scanner-primary", "fingerprint": "69081d4a44600f91", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-037f87221ca19174", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/components/admin/AdminLearn.tsx:125"}, "properties": {"repobilityId": "8447107c55225187", "scanner": "scanner-primary", "fingerprint": "037f87221ca19174", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6fe444d23bff5573", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/components/admin/AdminAgents.tsx:267"}, "properties": {"repobilityId": "99178d78ac2907ef", "scanner": "scanner-primary", "fingerprint": "6fe444d23bff5573", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c6b64aea714c3b9f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/components/admin/AdminAIConfig.tsx:70"}, "properties": {"repobilityId": "0e7c5e8d02120e65", "scanner": "scanner-primary", "fingerprint": "c6b64aea714c3b9f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cd66f5ebee3d58ff", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/components/admin/AdminHiggsfield.tsx:215"}, "properties": {"repobilityId": "e5348e8eeed1043b", "scanner": "scanner-primary", "fingerprint": "cd66f5ebee3d58ff", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bac3ae430ae5b9d8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/components/admin/AdminAISkills.tsx:127"}, "properties": {"repobilityId": "a79266ac54a21f42", "scanner": "scanner-primary", "fingerprint": "bac3ae430ae5b9d8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-89d6fa7ff95ecedd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/components/admin/AdminPlatformSettings.tsx:159"}, "properties": {"repobilityId": "3182e07562e49b2a", "scanner": "scanner-primary", "fingerprint": "89d6fa7ff95ecedd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b4bf6d914726ceb0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/components/crm/ScheduleMeetingModal.tsx:345"}, "properties": {"repobilityId": "981bc4b58b1132fb", "scanner": "scanner-primary", "fingerprint": "b4bf6d914726ceb0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-06849c3acb30cd52", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/pages/GmailInbox.tsx:416"}, "properties": {"repobilityId": "0d2249cbf5f7345f", "scanner": "scanner-primary", "fingerprint": "06849c3acb30cd52", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b915f91604197baf", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/pages/Workflow.tsx:13"}, "properties": {"repobilityId": "b4b8e2301a703781", "scanner": "scanner-primary", "fingerprint": "b915f91604197baf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-59416b54f413a0c1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/pages/CRMLeadScoring.tsx:119"}, "properties": {"repobilityId": "43123ab71335feff", "scanner": "scanner-primary", "fingerprint": "59416b54f413a0c1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ece8c0ee827e156c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/pages/CRMCompanies.tsx:888"}, "properties": {"repobilityId": "c2fb52e6d95349e5", "scanner": "scanner-primary", "fingerprint": "ece8c0ee827e156c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-286395b5a8e10703", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/pages/VerifyEmail.tsx:18"}, "properties": {"repobilityId": "7204ff4791aed075", "scanner": "scanner-primary", "fingerprint": "286395b5a8e10703", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b5a2b7c92ee7ea41", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/pages/MarketingAutomations.tsx:151"}, "properties": {"repobilityId": "7329556d6f632d06", "scanner": "scanner-primary", "fingerprint": "b5a2b7c92ee7ea41", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b9ed64aa97ccce44", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/pages/Cards.tsx:236"}, "properties": {"repobilityId": "35971e8864e5c03a", "scanner": "scanner-primary", "fingerprint": "b9ed64aa97ccce44", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e929d53316692576", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/pages/ConnectorProviderSetup.tsx:212"}, "properties": {"repobilityId": "4a9dcb1b91a45841", "scanner": "scanner-primary", "fingerprint": "e929d53316692576", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-24333d52760dbe82", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/pages/Notifications.tsx:85"}, "properties": {"repobilityId": "1d41c7ded4c40fde", "scanner": "scanner-primary", "fingerprint": "24333d52760dbe82", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-87e8e33e54db71d2", "level": "note", "message": {"text": "Legacy-named symbol `ad_copy` in packages/web/src/pages/AITeam.tsx:121"}, "properties": {"repobilityId": "eabc52b668c839cc", "scanner": "scanner-primary", "fingerprint": "87e8e33e54db71d2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-eb6df56e8a602877", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/pages/AITeam.tsx:1304"}, "properties": {"repobilityId": "36752749b69147b9", "scanner": "scanner-primary", "fingerprint": "eb6df56e8a602877", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cfbe33dd5615d4d9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/pages/Settings.tsx:263"}, "properties": {"repobilityId": "2654da25af3358f3", "scanner": "scanner-primary", "fingerprint": "cfbe33dd5615d4d9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ac89ffdc0f4514b4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/pages/Auth.tsx:348"}, "properties": {"repobilityId": "af346216e5ff3d3b", "scanner": "scanner-primary", "fingerprint": "ac89ffdc0f4514b4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1c3d319ad80edb20", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/pages/CRMPipeline.tsx:336"}, "properties": {"repobilityId": "c0513c1a50f28fe3", "scanner": "scanner-primary", "fingerprint": "1c3d319ad80edb20", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-098e93cb85ede165", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/pages/ConnectorSyncDashboard.tsx:184"}, "properties": {"repobilityId": "2a9dff1bb8bb51df", "scanner": "scanner-primary", "fingerprint": "098e93cb85ede165", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8d7a2d0f6465d6a7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/pages/ProjectSettings.tsx:95"}, "properties": {"repobilityId": "54ef58df9838a486", "scanner": "scanner-primary", "fingerprint": "8d7a2d0f6465d6a7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0c78f37b11a5e842", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/services/leadService.ts:38"}, "properties": {"repobilityId": "215dcd5f2c8edc8e", "scanner": "scanner-primary", "fingerprint": "0c78f37b11a5e842", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6f90ad028acb07c1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/services/calendarService.ts:62"}, "properties": {"repobilityId": "e2332965c78538c5", "scanner": "scanner-primary", "fingerprint": "6f90ad028acb07c1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9448af408eef400f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/services/pricingService.ts:31"}, "properties": {"repobilityId": "b841e89bc0ed23df", "scanner": "scanner-primary", "fingerprint": "9448af408eef400f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-91072353ec485143", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/services/campaignService.ts:166"}, "properties": {"repobilityId": "3623286f2e35aa0e", "scanner": "scanner-primary", "fingerprint": "91072353ec485143", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-41c0ca24244cb7d9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/services/socialTemplateService.ts:62"}, "properties": {"repobilityId": "e745934320cf04b8", "scanner": "scanner-primary", "fingerprint": "41c0ca24244cb7d9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-dec588aa34d268ae", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/services/cardTemplateService.ts:32"}, "properties": {"repobilityId": "dad95a1924b9a628", "scanner": "scanner-primary", "fingerprint": "dec588aa34d268ae", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4007f645c2d39371", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/services/mediaService.ts:67"}, "properties": {"repobilityId": "892903dccb4ba449", "scanner": "scanner-primary", "fingerprint": "4007f645c2d39371", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-dbcb0a41fac58ed1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/services/designService.ts:22"}, "properties": {"repobilityId": "7e9b18040aaa9ed5", "scanner": "scanner-primary", "fingerprint": "dbcb0a41fac58ed1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a810d20064fb7710", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/services/blogService.ts:96"}, "properties": {"repobilityId": "41222bb39320cc21", "scanner": "scanner-primary", "fingerprint": "a810d20064fb7710", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-255b5d80496d7867", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/services/socialPostService.ts:66"}, "properties": {"repobilityId": "fe9f1b1b460a79da", "scanner": "scanner-primary", "fingerprint": "255b5d80496d7867", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f80a5c97d7ee794e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/services/adminUserService.ts:43"}, "properties": {"repobilityId": "08775802f1dd9e71", "scanner": "scanner-primary", "fingerprint": "f80a5c97d7ee794e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c2023fc0faeb61e8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/services/surveysService.ts:66"}, "properties": {"repobilityId": "4818c2ff5c95cfc1", "scanner": "scanner-primary", "fingerprint": "c2023fc0faeb61e8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8a48a4e321cf613a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/web/src/services/mailingService.ts:98"}, "properties": {"repobilityId": "3c977dd74f23cc4c", "scanner": "scanner-primary", "fingerprint": "8a48a4e321cf613a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c9b22dc019b43aa8", "level": "none", "message": {"text": "Commented-code block (15 lines) in scripts/archive/extract-db-migrations.mjs:38"}, "properties": {"repobilityId": "2419795d928aecbe", "scanner": "scanner-primary", "fingerprint": "c9b22dc019b43aa8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-77209cf20e3fb795", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/archive/wire-social-connect-routes.mjs:13"}, "properties": {"repobilityId": "14b826a1dbba2f0b", "scanner": "scanner-primary", "fingerprint": "77209cf20e3fb795", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-265905645531af56", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 .claude/skills/gsap/scripts/extract-audio-data.py:52"}, "properties": {"repobilityId": "9914f03062713fad", "scanner": "scanner-primary", "fingerprint": "265905645531af56", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a7339f870dd831a9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/08-mixed.tsx:25"}, "properties": {"repobilityId": "eedf0b0d16192533", "scanner": "scanner-primary", "fingerprint": "a7339f870dd831a9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f502845f2fd35815", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/03-async-metadata.tsx:31"}, "properties": {"repobilityId": "934fd48b820a358e", "scanner": "scanner-primary", "fingerprint": "f502845f2fd35815", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-30beb4d95741b6b4", "level": "none", "message": {"text": "Commented-code block (6 lines) in .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/04-third-party-react.tsx:6"}, "properties": {"repobilityId": "c317daa044ff3e2c", "scanner": "scanner-primary", "fingerprint": "30beb4d95741b6b4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b7553d121a6a04c6", "level": "none", "message": {"text": "Commented-code block (6 lines) in .claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/05-lambda-config.tsx:7"}, "properties": {"repobilityId": "eecdbdd11b63c566", "scanner": "scanner-primary", "fingerprint": "b7553d121a6a04c6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-226522e03cfab62d", "level": "note", "message": {"text": "45 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "147ecc9c5b87abb5", "scanner": "scanner-primary", "fingerprint": "226522e03cfab62d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-6f9c8fbc479e98e0", "level": "warning", "message": {"text": "Frontend route `/posts/:id` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "6e71a479f03d29e6", "scanner": "scanner-primary", "fingerprint": "6f9c8fbc479e98e0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-c46488f8312cc04d", "level": "warning", "message": {"text": "Frontend route `/analytics` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "4c70d75e26a2878c", "scanner": "scanner-primary", "fingerprint": "c46488f8312cc04d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-09126f544c751aa8", "level": "error", "message": {"text": "Dangling fetch: POST https://api.twitter.com/2/oauth2/token (packages/api/backend/src/services/integration.service.ts:261)"}, "properties": {"repobilityId": "bee1ed12011e9e23", "scanner": "scanner-primary", "fingerprint": "09126f544c751aa8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-1d41162434474955", "level": "error", "message": {"text": "Dangling fetch: POST https://www.linkedin.com/oauth/v2/accessToken (packages/api/backend/src/services/integration.service.ts:285)"}, "properties": {"repobilityId": "b8be7f2daff52058", "scanner": "scanner-primary", "fingerprint": "1d41162434474955", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-551e48d6715c826b", "level": "error", "message": {"text": "Dangling fetch: POST https://api.pinterest.com/v5/oauth/token (packages/api/backend/src/services/integration.service.ts:304)"}, "properties": {"repobilityId": "1c39a8a329f1f5f2", "scanner": "scanner-primary", "fingerprint": "551e48d6715c826b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-24440dbbb4466c99", "level": "error", "message": {"text": "Dangling fetch: GET https://graph.facebook.com/v18.0/oauth/access_token (packages/api/backend/src/services/integration.service.ts:322)"}, "properties": {"repobilityId": "5f8b67c95341da2a", "scanner": "scanner-primary", "fingerprint": "24440dbbb4466c99", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-70418b6a97da049f", "level": "error", "message": {"text": "Dangling fetch: POST https://api.twitter.com/2/oauth2/token (packages/api/backend/src/services/integration.service.ts:367)"}, "properties": {"repobilityId": "2bc7e675c2bdad5e", "scanner": "scanner-primary", "fingerprint": "70418b6a97da049f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-c865f3e8cec8e02a", "level": "error", "message": {"text": "Dangling fetch: POST https://www.linkedin.com/oauth/v2/accessToken (packages/api/backend/src/services/integration.service.ts:384)"}, "properties": {"repobilityId": "b59aaf26cba51c1e", "scanner": "scanner-primary", "fingerprint": "c865f3e8cec8e02a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-618e4ee2966938b7", "level": "error", "message": {"text": "Dangling fetch: POST https://api.pinterest.com/v5/oauth/token (packages/api/backend/src/services/integration.service.ts:400)"}, "properties": {"repobilityId": "e8e3d3fd0cd8b52a", "scanner": "scanner-primary", "fingerprint": "618e4ee2966938b7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-3be78701c1459018", "level": "error", "message": {"text": "Dangling fetch: GET https://graph.facebook.com/v18.0/oauth/access_token (packages/api/backend/src/services/integration.service.ts:416)"}, "properties": {"repobilityId": "0325c9dea1b11356", "scanner": "scanner-primary", "fingerprint": "3be78701c1459018", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-f44ad333763a9f6e", "level": "error", "message": {"text": "Dangling fetch: GET https://open.tiktokapis.com/v2/video/list/ (packages/api/backend/src/services/analytics.service.ts:10022)"}, "properties": {"repobilityId": "756ce6f8d12abe81", "scanner": "scanner-primary", "fingerprint": "f44ad333763a9f6e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-c9190bd88e669b02", "level": "error", "message": {"text": "Dangling fetch: POST https://api.pinterest.com/v5/pins (packages/api/backend/src/services/platform-adapters/pinterest.adapter.ts:15)"}, "properties": {"repobilityId": "d6a780899e784b28", "scanner": "scanner-primary", "fingerprint": "c9190bd88e669b02", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-2147a57b637ea277", "level": "error", "message": {"text": "Dangling fetch: GET https://api.pinterest.com/v5/user_account (packages/api/backend/src/services/platform-adapters/pinterest.adapter.ts:48)"}, "properties": {"repobilityId": "7f6a27be9d4a01ce", "scanner": "scanner-primary", "fingerprint": "2147a57b637ea277", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-6792b2718577bfda", "level": "error", "message": {"text": "Dangling fetch: GET https://api.pinterest.com/v5/user_account (packages/api/backend/src/services/platform-adapters/pinterest.adapter.ts:59)"}, "properties": {"repobilityId": "7f1218a6889beb1c", "scanner": "scanner-primary", "fingerprint": "6792b2718577bfda", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-02d1d0275dbfb370", "level": "error", "message": {"text": "Dangling fetch: GET https://api.pinterest.com/v5/boards (packages/api/backend/src/services/platform-adapters/pinterest.adapter.ts:84)"}, "properties": {"repobilityId": "8014cc44eca50e4e", "scanner": "scanner-primary", "fingerprint": "02d1d0275dbfb370", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-2cea0177cd953733", "level": "error", "message": {"text": "Dangling fetch: POST https://api.linkedin.com/v2/ugcPosts (packages/api/backend/src/services/platform-adapters/linkedin.adapter.ts:33)"}, "properties": {"repobilityId": "ca5b4b44af3ae7b5", "scanner": "scanner-primary", "fingerprint": "2cea0177cd953733", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-15a0817e5395da03", "level": "error", "message": {"text": "Dangling fetch: GET https://api.linkedin.com/v2/me (packages/api/backend/src/services/platform-adapters/linkedin.adapter.ts:62)"}, "properties": {"repobilityId": "7d190b63fb412f9e", "scanner": "scanner-primary", "fingerprint": "15a0817e5395da03", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-91545d37f191643e", "level": "error", "message": {"text": "Dangling fetch: GET https://api.linkedin.com/v2/organizations/${encodeURIComponent(organizationId)}?projection=(id,localizedName,followerCount,description,website) (packages/api/backend/src/services/platform-adapters/linkedin.adapter.ts:73)"}, "properties": {"repobilityId": "1d14ed17d0a97a25", "scanner": "scanner-primary", "fingerprint": "91545d37f191643e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-6e440b85d998308a", "level": "error", "message": {"text": "Dangling fetch: GET https://api.linkedin.com/v2/me (packages/api/backend/src/services/platform-adapters/linkedin.adapter.ts:95)"}, "properties": {"repobilityId": "2aa5500338006cc8", "scanner": "scanner-primary", "fingerprint": "6e440b85d998308a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-768aa424a87f8107", "level": "error", "message": {"text": "Dangling fetch: GET https://api.linkedin.com/v2/emailAddress?q=members&projection=(elements*(handle~)) (packages/api/backend/src/services/platform-adapters/linkedin.adapter.ts:98)"}, "properties": {"repobilityId": "edfe51d6b466a6d2", "scanner": "scanner-primary", "fingerprint": "768aa424a87f8107", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-27fefa07ad20992e", "level": "error", "message": {"text": "Dangling fetch: GET https://api.linkedin.com/v2/organizationalEntityShareStatistics (packages/api/backend/src/services/platform-adapters/linkedin.adapter.ts:123)"}, "properties": {"repobilityId": "fbfb9b00e6e20f93", "scanner": "scanner-primary", "fingerprint": "27fefa07ad20992e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-416438c1d30012ba", "level": "error", "message": {"text": "Dangling fetch: GET https://api.twitter.com/2/users/${encodeURIComponent(userId)} (packages/api/backend/src/services/platform-adapters/twitter.adapter.ts:328)"}, "properties": {"repobilityId": "9ef14aedb1ae0cb5", "scanner": "scanner-primary", "fingerprint": "416438c1d30012ba", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-b8ee2471e1b6f750", "level": "error", "message": {"text": "Dangling fetch: GET https://api.twitter.com/2/tweets/${encodeURIComponent(tweetId)} (packages/api/backend/src/services/platform-adapters/twitter.adapter.ts:368)"}, "properties": {"repobilityId": "13d2100bc2507389", "scanner": "scanner-primary", "fingerprint": "b8ee2471e1b6f750", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-ce21862e29174927", "level": "error", "message": {"text": "Dangling fetch: GET https://api.twitter.com/2/users/${encodeURIComponent(userId)}/tweets (packages/api/backend/src/services/platform-adapters/twitter.adapter.ts:400)"}, "properties": {"repobilityId": "6f3dd6c793f3ec49", "scanner": "scanner-primary", "fingerprint": "ce21862e29174927", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-5a2321163ea7a449", "level": "error", "message": {"text": "Dangling fetch: GET https://open.tiktokapis.com/v2/video/list/ (packages/api/backend/src/routes/analytics.routes.ts:1112)"}, "properties": {"repobilityId": "3324ddc7d94a75c1", "scanner": "scanner-primary", "fingerprint": "5a2321163ea7a449", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-273ccbf1fe543ee3", "level": "error", "message": {"text": "Dangling fetch: GET https://api.linkedin.com/rest/socialMetadata/${encodeURIComponent(postId)} (packages/api/backend/platforms/linkedin.ts:469)"}, "properties": {"repobilityId": "18915a6a507690d3", "scanner": "scanner-primary", "fingerprint": "273ccbf1fe543ee3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-2bad1bed13190945", "level": "error", "message": {"text": "Dangling fetch: POST https://www.linkedin.com/oauth/v2/accessToken (packages/api/backend/platforms/linkedin.ts:500)"}, "properties": {"repobilityId": "df964fb373218954", "scanner": "scanner-primary", "fingerprint": "2bad1bed13190945", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-0b34d30f7c28bd53", "level": "error", "message": {"text": "Dangling fetch: POST https://api.imgbb.com/1/upload (packages/api/src/server/openaiRoutes.ts:60)"}, "properties": {"repobilityId": "40c173b0a0bdd5da", "scanner": "scanner-primary", "fingerprint": "0b34d30f7c28bd53", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-62f8a2e829870360", "level": "error", "message": {"text": "Dangling fetch: GET https://date.nager.at/api/v3/publicholidays/${yr}/${cc} (packages/api/src/server/calendarRoutes.ts:296)"}, "properties": {"repobilityId": "fb9b2ce670c31e93", "scanner": "scanner-primary", "fingerprint": "62f8a2e829870360", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-f4741c0fe4c3d4ad", "level": "error", "message": {"text": "Dangling fetch: GET https://${serverPrefix}.api.mailchimp.com/3.0/ (packages/api/src/server/platformConfigRoutes.ts:243)"}, "properties": {"repobilityId": "b3efe102ea433279", "scanner": "scanner-primary", "fingerprint": "f4741c0fe4c3d4ad", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-7f57a0a7771aa26a", "level": "error", "message": {"text": "Dangling fetch: GET https://api.openai.com/v1/models (packages/api/src/server/platformConfigRoutes.ts:251)"}, "properties": {"repobilityId": "6676c0ffb6f9be75", "scanner": "scanner-primary", "fingerprint": "7f57a0a7771aa26a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-447b431d29e4c9f1", "level": "error", "message": {"text": "Dangling fetch: GET https://api.webflow.com/v2/sites (packages/api/src/server/platformConfigRoutes.ts:259)"}, "properties": {"repobilityId": "0d07c8d4e7dd2112", "scanner": "scanner-primary", "fingerprint": "447b431d29e4c9f1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-ba12a416734f3eb9", "level": "error", "message": {"text": "Dangling fetch: GET https://api.stripe.com/v1/account (packages/api/src/server/platformConfigRoutes.ts:267)"}, "properties": {"repobilityId": "77ab6b44df55378a", "scanner": "scanner-primary", "fingerprint": "ba12a416734f3eb9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-083185e2b01c817c", "level": "error", "message": {"text": "Dangling fetch: POST https://api.linear.app/graphql (packages/api/src/server/platformConfigRoutes.ts:275)"}, "properties": {"repobilityId": "074c4d6cec8a174a", "scanner": "scanner-primary", "fingerprint": "083185e2b01c817c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-1ae936ad5f750ff2", "level": "error", "message": {"text": "Dangling fetch: GET https://connect.squareup.com/v2/locations (packages/api/src/server/platformConfigRoutes.ts:285)"}, "properties": {"repobilityId": "75cd544c75aa2d1b", "scanner": "scanner-primary", "fingerprint": "1ae936ad5f750ff2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-e06b8a4f253f04cf", "level": "error", "message": {"text": "Dangling fetch: GET https://api.apify.com/v2/users/me (packages/api/src/server/platformConfigRoutes.ts:302)"}, "properties": {"repobilityId": "2a2ac4e66a5141db", "scanner": "scanner-primary", "fingerprint": "e06b8a4f253f04cf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-83f2b61c7daba49c", "level": "error", "message": {"text": "Dangling fetch: GET https://api.apify.com/v2/users/me (packages/api/src/server/apifyRoutes.ts:33)"}, "properties": {"repobilityId": "44e945a6db9c87b2", "scanner": "scanner-primary", "fingerprint": "83f2b61c7daba49c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-2800c959f0682f19", "level": "error", "message": {"text": "Dangling fetch: POST https://api.apify.com/v2/acts/${apifyActorId}/runs (packages/api/src/server/apifyRoutes.ts:111)"}, "properties": {"repobilityId": "8c86687db267fb71", "scanner": "scanner-primary", "fingerprint": "2800c959f0682f19", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-47993beabde11471", "level": "error", "message": {"text": "Dangling fetch: GET https://api.apify.com/v2/actor-runs/${run.apify_run_id} (packages/api/src/server/apifyRoutes.ts:148)"}, "properties": {"repobilityId": "6ea524e82226948f", "scanner": "scanner-primary", "fingerprint": "47993beabde11471", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-1fca8818b806baf6", "level": "error", "message": {"text": "Dangling fetch: GET https://api.linkedin.com/v2/me (packages/api/src/server/linkedinRoutes.ts:95)"}, "properties": {"repobilityId": "de1f838076ff82c6", "scanner": "scanner-primary", "fingerprint": "1fca8818b806baf6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-0a735de9b75d1b9e", "level": "error", "message": {"text": "Dangling fetch: GET https://api.linkedin.com/v2/userinfo (packages/api/src/server/linkedinRoutes.ts:106)"}, "properties": {"repobilityId": "4048e75aab88ff89", "scanner": "scanner-primary", "fingerprint": "0a735de9b75d1b9e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-a2d608da13f90d78", "level": "error", "message": {"text": "Dangling fetch: GET https://api.linkedin.com/rest/organizationalEntityFollowerStatistics (packages/api/src/server/linkedinRoutes.ts:263)"}, "properties": {"repobilityId": "8287ca805a947ba0", "scanner": "scanner-primary", "fingerprint": "a2d608da13f90d78", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-b44cd4398c81cc1f", "level": "error", "message": {"text": "Dangling fetch: GET https://api.linkedin.com/rest/organizationPageStatistics (packages/api/src/server/linkedinRoutes.ts:264)"}, "properties": {"repobilityId": "7c777d45e96b99cd", "scanner": "scanner-primary", "fingerprint": "b44cd4398c81cc1f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-42b8410d0ac69c91", "level": "error", "message": {"text": "Dangling fetch: GET https://api.linkedin.com/rest/organizationalEntityShareStatistics (packages/api/src/server/linkedinRoutes.ts:268)"}, "properties": {"repobilityId": "de82e4ce8d3c8c29", "scanner": "scanner-primary", "fingerprint": "42b8410d0ac69c91", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-6a8c2f466604ed9e", "level": "error", "message": {"text": "Dangling fetch: POST https://oauth2.googleapis.com/token (packages/api/src/server/leadsRoutes.ts:26)"}, "properties": {"repobilityId": "ec0d934eaa53add9", "scanner": "scanner-primary", "fingerprint": "6a8c2f466604ed9e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-58d1674ecd2c9307", "level": "error", "message": {"text": "Dangling fetch: POST https://oauth2.googleapis.com/token (packages/api/src/server/leadsRoutes.ts:245)"}, "properties": {"repobilityId": "69e4e92ff06d8286", "scanner": "scanner-primary", "fingerprint": "58d1674ecd2c9307", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-20e0af8127a6dede", "level": "error", "message": {"text": "Dangling fetch: GET https://www.googleapis.com/oauth2/v3/userinfo (packages/api/src/server/leadsRoutes.ts:252)"}, "properties": {"repobilityId": "0535f878a4235c60", "scanner": "scanner-primary", "fingerprint": "20e0af8127a6dede", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e8e9db2276ad5ed1", "level": "error", "message": {"text": "Dangling fetch: GET https://sheets.googleapis.com/v4/spreadsheets/${req.params.fileId}?fields=sheets.properties(sheetId,title) (packages/api/src/server/leadsRoutes.ts:300)"}, "properties": {"repobilityId": "857cb4e3db752656", "scanner": "scanner-primary", "fingerprint": "e8e9db2276ad5ed1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f293175b094b22bb", "level": "error", "message": {"text": "Dangling fetch: GET https://sheets.googleapis.com/v4/spreadsheets/${grp.linked_sheet_id}/values/${range} (packages/api/src/server/leadsRoutes.ts:329)"}, "properties": {"repobilityId": "03f64a5674ade2cb", "scanner": "scanner-primary", "fingerprint": "f293175b094b22bb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4060c5019b30864c", "level": "error", "message": {"text": "Dangling fetch: POST https://oauth2.googleapis.com/token (packages/api/src/server/leadsRoutes.ts:402)"}, "properties": {"repobilityId": "b5b39641da5df28f", "scanner": "scanner-primary", "fingerprint": "4060c5019b30864c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a97361c426248689", "level": "error", "message": {"text": "Dangling fetch: GET https://www.googleapis.com/oauth2/v3/userinfo (packages/api/src/server/leadsRoutes.ts:409)"}, "properties": {"repobilityId": "eafc7c0f4b9de05d", "scanner": "scanner-primary", "fingerprint": "a97361c426248689", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-225f5dcd5f8438ed", "level": "error", "message": {"text": "Dangling fetch: GET https://sheets.googleapis.com/v4/spreadsheets/${req.params.fileId}?fields=sheets.properties(sheetId,title) (packages/api/src/server/leadsRoutes.ts:453)"}, "properties": {"repobilityId": "a5a7cbab41592f69", "scanner": "scanner-primary", "fingerprint": "225f5dcd5f8438ed", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-57b9418717a4c6d1", "level": "error", "message": {"text": "Dangling fetch: POST https://api.apify.com/v2/acts/${apifyActorId}/runs (packages/api/src/server/memoryAgentRoutes.ts:338)"}, "properties": {"repobilityId": "d56896fb4e02c28a", "scanner": "scanner-primary", "fingerprint": "57b9418717a4c6d1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-c4f86e3a886cdfba", "level": "error", "message": {"text": "Dangling fetch: GET https://api.apify.com/v2/datasets/${run.defaultDatasetId}/items (packages/api/src/server/memoryAgentRoutes.ts:347)"}, "properties": {"repobilityId": "c54f4e77f80a6d2b", "scanner": "scanner-primary", "fingerprint": "c4f86e3a886cdfba", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-5fffc486dc1ca129", "level": "error", "message": {"text": "Dangling fetch: GET https://api.linkedin.com/v2/me (packages/api/src/server/distributionRoutes.ts:647)"}, "properties": {"repobilityId": "d8c8d5d29b6f9e69", "scanner": "scanner-primary", "fingerprint": "5fffc486dc1ca129", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-e2ed1b27b0c09037", "level": "error", "message": {"text": "Dangling fetch: GET https://api.linkedin.com/v2/userinfo (packages/api/src/server/distributionRoutes.ts:658)"}, "properties": {"repobilityId": "3dad292ff2b22822", "scanner": "scanner-primary", "fingerprint": "e2ed1b27b0c09037", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-202caf13e887eb52", "level": "error", "message": {"text": "Dangling fetch: POST https://open.tiktokapis.com/v2/oauth/token/ (packages/api/src/server/distributionRoutes.ts:823)"}, "properties": {"repobilityId": "325a51463bacee2c", "scanner": "scanner-primary", "fingerprint": "202caf13e887eb52", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-6097028f64ca6ff5", "level": "error", "message": {"text": "Dangling fetch: GET https://graph.threads.net/refresh_access_token (packages/api/src/server/distributionRoutes.ts:836)"}, "properties": {"repobilityId": "0c266ef9a018d970", "scanner": "scanner-primary", "fingerprint": "6097028f64ca6ff5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-919cf4d8b8df6dbb", "level": "error", "message": {"text": "Dangling fetch: GET https://api.pinterest.com/v5/boards (packages/api/src/server/distributionRoutes.ts:2018)"}, "properties": {"repobilityId": "81cd580ce6b05c3f", "scanner": "scanner-primary", "fingerprint": "919cf4d8b8df6dbb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-b13998efb27c1bd6", "level": "error", "message": {"text": "Dangling fetch: POST https://api.pinterest.com/v5/pins (packages/api/src/server/distributionRoutes.ts:2066)"}, "properties": {"repobilityId": "3991e0f47776bad8", "scanner": "scanner-primary", "fingerprint": "b13998efb27c1bd6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-35ca8205f29ca22e", "level": "error", "message": {"text": "Dangling fetch: GET https://open.tiktokapis.com/v2/post/publish/creator_info/query/ (packages/api/src/server/distributionRoutes.ts:2309)"}, "properties": {"repobilityId": "484c80ddc25ed51c", "scanner": "scanner-primary", "fingerprint": "35ca8205f29ca22e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-e8cddf69c25c3fca", "level": "error", "message": {"text": "Dangling fetch: POST https://open.tiktokapis.com/v2/post/publish/content/init/ (packages/api/src/server/distributionRoutes.ts:2355)"}, "properties": {"repobilityId": "55ab89be681aa1ab", "scanner": "scanner-primary", "fingerprint": "e8cddf69c25c3fca", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-ee33ef2225a2aa6e", "level": "error", "message": {"text": "Dangling fetch: POST https://open.tiktokapis.com/v2/post/publish/inbox/video/init/ (packages/api/src/server/distributionRoutes.ts:2388)"}, "properties": {"repobilityId": "b29ce82e33907abd", "scanner": "scanner-primary", "fingerprint": "ee33ef2225a2aa6e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-5d608ca8254f8694", "level": "error", "message": {"text": "Dangling fetch: GET https://graph.facebook.com/v19.0/oauth/access_token (packages/api/src/server/socialRoutes.ts:185)"}, "properties": {"repobilityId": "d9044d54e710dbb7", "scanner": "scanner-primary", "fingerprint": "5d608ca8254f8694", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-e465e827d081d601", "level": "error", "message": {"text": "Dangling fetch: GET https://graph.facebook.com/v19.0/oauth/access_token (packages/api/src/server/socialRoutes.ts:568)"}, "properties": {"repobilityId": "530f6072746d4173", "scanner": "scanner-primary", "fingerprint": "e465e827d081d601", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-aabef6403dd21035", "level": "error", "message": {"text": "Dangling fetch: GET https://${serverPrefix}.api.mailchimp.com/3.0/ (packages/api/src/server/socialRoutes.ts:1339)"}, "properties": {"repobilityId": "80ef29d96a09175d", "scanner": "scanner-primary", "fingerprint": "aabef6403dd21035", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-22e1555b3d99cb29", "level": "error", "message": {"text": "Dangling fetch: GET https://api.openai.com/v1/models (packages/api/src/server/socialRoutes.ts:1350)"}, "properties": {"repobilityId": "5877916671b953e4", "scanner": "scanner-primary", "fingerprint": "22e1555b3d99cb29", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-18347a3066780b9c", "level": "error", "message": {"text": "Dangling fetch: GET https://api.webflow.com/v2/sites (packages/api/src/server/socialRoutes.ts:1361)"}, "properties": {"repobilityId": "7c0e39880b8c34d8", "scanner": "scanner-primary", "fingerprint": "18347a3066780b9c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-d9f09e1fc565c32f", "level": "error", "message": {"text": "Dangling fetch: GET https://api.stripe.com/v1/balance (packages/api/src/server/socialRoutes.ts:1372)"}, "properties": {"repobilityId": "802c953afe3ae50b", "scanner": "scanner-primary", "fingerprint": "d9f09e1fc565c32f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-6148904a844d0cbd", "level": "error", "message": {"text": "Dangling fetch: POST https://api.linear.app/graphql (packages/api/src/server/socialRoutes.ts:1383)"}, "properties": {"repobilityId": "b76f48e292c762a8", "scanner": "scanner-primary", "fingerprint": "6148904a844d0cbd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-1fa83cc3c9a0b078", "level": "error", "message": {"text": "Dangling fetch: GET https://api.resend.com/domains (packages/api/src/server/socialRoutes.ts:1394)"}, "properties": {"repobilityId": "cd1a5d00a2635c70", "scanner": "scanner-primary", "fingerprint": "1fa83cc3c9a0b078", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-455963f210785625", "level": "error", "message": {"text": "Dangling fetch: GET https://r.jina.ai/${url} (packages/api/src/server/dakyLearnRoutes.ts:103)"}, "properties": {"repobilityId": "f51f4ba51b5cbf95", "scanner": "scanner-primary", "fingerprint": "455963f210785625", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6d95c16d69eb2a68", "level": "error", "message": {"text": "Dangling fetch: GET https://r.jina.ai/${item.url} (packages/api/src/server/dakyLearnRoutes.ts:231)"}, "properties": {"repobilityId": "a5906b435c88a3d0", "scanner": "scanner-primary", "fingerprint": "6d95c16d69eb2a68", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-302520854f82eb56", "level": "error", "message": {"text": "Dangling fetch: POST https://api.imgbb.com/1/upload (packages/api/src/server/googleRoutes.ts:55)"}, "properties": {"repobilityId": "3d203c11be5c0949", "scanner": "scanner-primary", "fingerprint": "302520854f82eb56", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-e47e8a11133bc9f4", "level": "error", "message": {"text": "Dangling fetch: POST https://graph.facebook.com/v19.0/${encodeURIComponent(pageId)}/subscribed_apps (packages/api/src/server/webhookRoutes.ts:323)"}, "properties": {"repobilityId": "1b861b3ae3404c78", "scanner": "scanner-primary", "fingerprint": "e47e8a11133bc9f4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-cc9e232ac84f81b9", "level": "error", "message": {"text": "Dangling fetch: POST https://www.linkedin.com/oauth/v2/accessToken (packages/api/src/server/socialConnectRoutes.ts:342)"}, "properties": {"repobilityId": "2b2f36fcad9c6c13", "scanner": "scanner-primary", "fingerprint": "cc9e232ac84f81b9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-a9562695da7c4b23", "level": "error", "message": {"text": "Dangling fetch: POST https://www.linkedin.com/oauth/v2/introspectToken (packages/api/src/server/socialConnectRoutes.ts:378)"}, "properties": {"repobilityId": "c05c494dc1c3fb6e", "scanner": "scanner-primary", "fingerprint": "a9562695da7c4b23", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-4d5035db4c244a43", "level": "error", "message": {"text": "Dangling fetch: GET https://api.linkedin.com/v2/me (packages/api/src/server/socialConnectRoutes.ts:446)"}, "properties": {"repobilityId": "ca6fbbd8f9f12a22", "scanner": "scanner-primary", "fingerprint": "4d5035db4c244a43", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-5c15b6ab354c9d5d", "level": "error", "message": {"text": "Dangling fetch: GET https://api.linkedin.com/v2/userinfo (packages/api/src/server/socialConnectRoutes.ts:457)"}, "properties": {"repobilityId": "4c187f618ed45214", "scanner": "scanner-primary", "fingerprint": "5c15b6ab354c9d5d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-e634f7bda4cbb2d0", "level": "error", "message": {"text": "Dangling fetch: POST https://api.pinterest.com/v5/oauth/token (packages/api/src/server/socialConnectRoutes.ts:503)"}, "properties": {"repobilityId": "c847e4ca3b566159", "scanner": "scanner-primary", "fingerprint": "e634f7bda4cbb2d0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-15c6c0e87b22a873", "level": "error", "message": {"text": "Dangling fetch: GET https://api.pinterest.com/v5/user_account (packages/api/src/server/socialConnectRoutes.ts:518)"}, "properties": {"repobilityId": "773890a04dfdd2e1", "scanner": "scanner-primary", "fingerprint": "15c6c0e87b22a873", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-8d852c3f936eddfb", "level": "error", "message": {"text": "Dangling fetch: POST https://api.instagram.com/oauth/access_token (packages/api/src/server/socialConnectRoutes.ts:558)"}, "properties": {"repobilityId": "d640c6d2bc842236", "scanner": "scanner-primary", "fingerprint": "8d852c3f936eddfb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-3bc8d9483f499c35", "level": "error", "message": {"text": "Dangling fetch: GET https://graph.facebook.com/v18.0/oauth/access_token (packages/api/src/server/socialConnectRoutes.ts:655)"}, "properties": {"repobilityId": "bf8cbf6ee6d7121b", "scanner": "scanner-primary", "fingerprint": "3bc8d9483f499c35", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-25abda7d9218ccd5", "level": "error", "message": {"text": "Dangling fetch: GET https://graph.facebook.com/v19.0/me (packages/api/src/server/socialConnectRoutes.ts:668)"}, "properties": {"repobilityId": "cee07b42011d58e6", "scanner": "scanner-primary", "fingerprint": "25abda7d9218ccd5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-1f743d944cc2f5d0", "level": "error", "message": {"text": "Dangling fetch: POST https://graph.threads.net/oauth/access_token (packages/api/src/server/socialConnectRoutes.ts:702)"}, "properties": {"repobilityId": "73c342afbbeee6c1", "scanner": "scanner-primary", "fingerprint": "1f743d944cc2f5d0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-2ec4a56d323225b2", "level": "error", "message": {"text": "Dangling fetch: GET https://graph.threads.net/access_token (packages/api/src/server/socialConnectRoutes.ts:717)"}, "properties": {"repobilityId": "0c55e2481f652e9b", "scanner": "scanner-primary", "fingerprint": "2ec4a56d323225b2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-4f2d835398a0e18c", "level": "error", "message": {"text": "Dangling fetch: GET https://graph.threads.net/v1.0/me (packages/api/src/server/socialConnectRoutes.ts:734)"}, "properties": {"repobilityId": "087521b0955965e0", "scanner": "scanner-primary", "fingerprint": "4f2d835398a0e18c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-3f767f307cc7999f", "level": "error", "message": {"text": "Dangling fetch: POST https://open.tiktokapis.com/v2/oauth/token/ (packages/api/src/server/socialConnectRoutes.ts:770)"}, "properties": {"repobilityId": "f8270a86515e7bb5", "scanner": "scanner-primary", "fingerprint": "3f767f307cc7999f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-d95cc2e49eb505c1", "level": "error", "message": {"text": "Dangling fetch: GET https://open.tiktokapis.com/v2/user/info/ (packages/api/src/server/socialConnectRoutes.ts:786)"}, "properties": {"repobilityId": "b243bf71fa90b73c", "scanner": "scanner-primary", "fingerprint": "d95cc2e49eb505c1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-889bb1e879ae7133", "level": "error", "message": {"text": "Dangling fetch: GET https://open.tiktokapis.com/v2/user/info/ (packages/api/src/server/socialConnectRoutes.ts:795)"}, "properties": {"repobilityId": "afbbab10cac42513", "scanner": "scanner-primary", "fingerprint": "889bb1e879ae7133", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-b8683525be7747ab", "level": "error", "message": {"text": "Dangling fetch: POST https://oauth2.googleapis.com/token (packages/api/src/server/socialConnectRoutes.ts:828)"}, "properties": {"repobilityId": "c4c2885a76c3f1cd", "scanner": "scanner-primary", "fingerprint": "b8683525be7747ab", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-169cb16ad75e71bf", "level": "error", "message": {"text": "Dangling fetch: GET https://www.googleapis.com/oauth2/v2/userinfo (packages/api/src/server/socialConnectRoutes.ts:842)"}, "properties": {"repobilityId": "e0d63d5348f0588a", "scanner": "scanner-primary", "fingerprint": "169cb16ad75e71bf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-fcb39585e8ceb4e1", "level": "error", "message": {"text": "Dangling fetch: POST https://slack.com/api/oauth.v2.access (packages/api/src/server/socialConnectRoutes.ts:876)"}, "properties": {"repobilityId": "9d1ca0e223ed6358", "scanner": "scanner-primary", "fingerprint": "fcb39585e8ceb4e1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-bd51b64fe58698d1", "level": "error", "message": {"text": "Dangling fetch: POST https://zoom.us/oauth/token (packages/api/src/server/socialConnectRoutes.ts:912)"}, "properties": {"repobilityId": "fcff6aa2710dfe88", "scanner": "scanner-primary", "fingerprint": "bd51b64fe58698d1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-5f11e720495be5da", "level": "error", "message": {"text": "Dangling fetch: GET https://api.zoom.us/v2/users/me (packages/api/src/server/socialConnectRoutes.ts:926)"}, "properties": {"repobilityId": "b0e8e74ff09e1250", "scanner": "scanner-primary", "fingerprint": "5f11e720495be5da", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-8afb3d4f803e9574", "level": "error", "message": {"text": "Dangling fetch: GET https://api.pinterest.com/v5/boards?page_size=100 (packages/api/src/server/socialConnectRoutes.ts:1427)"}, "properties": {"repobilityId": "df86b27fbe6bbdd7", "scanner": "scanner-primary", "fingerprint": "8afb3d4f803e9574", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-da67875d42899a80", "level": "error", "message": {"text": "Dangling fetch: POST https://api.pinterest.com/v5/boards (packages/api/src/server/socialConnectRoutes.ts:1467)"}, "properties": {"repobilityId": "03aaa112345e205a", "scanner": "scanner-primary", "fingerprint": "da67875d42899a80", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-c94be5339b517846", "level": "error", "message": {"text": "Dangling fetch: GET https://${prefix}.api.mailchimp.com/3.0/ (packages/api/src/server/socialConnectRoutes.ts:1502)"}, "properties": {"repobilityId": "9c37cb7a1181bc42", "scanner": "scanner-primary", "fingerprint": "c94be5339b517846", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-99159a020c979a46", "level": "error", "message": {"text": "Dangling fetch: GET https://graph.facebook.com/v19.0/${pid}?fields=id,display_phone_number,verified_name (packages/api/src/server/socialConnectRoutes.ts:1550)"}, "properties": {"repobilityId": "6debc097a923021c", "scanner": "scanner-primary", "fingerprint": "99159a020c979a46", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-6c9514d807b88fbc", "level": "error", "message": {"text": "Dangling fetch: POST https://oauth2.googleapis.com/token (packages/api/src/server/gmailInboxRoutes.ts:140)"}, "properties": {"repobilityId": "12ffa058f95a98f8", "scanner": "scanner-primary", "fingerprint": "6c9514d807b88fbc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-b84afb825c532d77", "level": "error", "message": {"text": "Dangling fetch: GET https://gmail.googleapis.com/gmail/v1/users/me/messages/${encodeURIComponent(gmailMessageId)} (packages/api/src/server/gmailInboxRoutes.ts:704)"}, "properties": {"repobilityId": "14e28fb7b67769eb", "scanner": "scanner-primary", "fingerprint": "b84afb825c532d77", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-879208695b49c807", "level": "error", "message": {"text": "Dangling fetch: GET https://gmail.googleapis.com/gmail/v1/users/me/messages/${encodeURIComponent(req.params.id)} (packages/api/src/server/gmailInboxRoutes.ts:878)"}, "properties": {"repobilityId": "d2827d2dbaa11a63", "scanner": "scanner-primary", "fingerprint": "879208695b49c807", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-48c9467040b90524", "level": "error", "message": {"text": "Dangling fetch: GET https://gmail.googleapis.com/gmail/v1/users/me/messages/${encodeURIComponent(req.params.id)}/attachments/${encodeURIComponent(req.params.attId)} (packages/api/src/server/gmailInboxRoutes.ts:907)"}, "properties": {"repobilityId": "31e92cc8962aca7e", "scanner": "scanner-primary", "fingerprint": "48c9467040b90524", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-1c39489622344260", "level": "error", "message": {"text": "Dangling fetch: POST https://payproxyapi.hubtel.com/items/initiate (packages/api/src/server/hubtelRoutes.ts:61)"}, "properties": {"repobilityId": "b923af0d316c442d", "scanner": "scanner-primary", "fingerprint": "1c39489622344260", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-648b9c0d59042868", "level": "error", "message": {"text": "Dangling fetch: GET https://api.hubtel.com/checkout/v1.1/merchant/transactions/status?clientReference=${clientReference} (packages/api/src/server/hubtelRoutes.ts:124)"}, "properties": {"repobilityId": "5dc256c4aca7cb23", "scanner": "scanner-primary", "fingerprint": "648b9c0d59042868", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-6eb9a309a111203b", "level": "error", "message": {"text": "Dangling fetch: GET https://api.linkedin.com/rest/organizations?ids=${buildLinkedInRestliList(uniqueIds)} (packages/api/src/server/distribution/linkedinHelpers.ts:58)"}, "properties": {"repobilityId": "214181472d7516e3", "scanner": "scanner-primary", "fingerprint": "6eb9a309a111203b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-d9a19ace47f57750", "level": "error", "message": {"text": "Dangling fetch: GET https://api.linkedin.com/rest/organizations/${encodeURIComponent(organizationId)} (packages/api/src/server/distribution/linkedinHelpers.ts:77)"}, "properties": {"repobilityId": "9b2815fa120e1ac2", "scanner": "scanner-primary", "fingerprint": "d9a19ace47f57750", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-8c1b312dd90f81a8", "level": "error", "message": {"text": "Dangling fetch: GET https://api.linkedin.com/rest/networkSizes/${encodeURIComponent(organizationUrn)} (packages/api/src/server/distribution/linkedinHelpers.ts:88)"}, "properties": {"repobilityId": "9a1297f5613c5769", "scanner": "scanner-primary", "fingerprint": "8c1b312dd90f81a8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-8f451e731f0106df", "level": "error", "message": {"text": "Dangling fetch: GET https://api.linkedin.com/rest/posts (packages/api/src/server/distribution/linkedinHelpers.ts:102)"}, "properties": {"repobilityId": "0b61a5cb4d579b32", "scanner": "scanner-primary", "fingerprint": "8f451e731f0106df", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-8797edbe865a0c85", "level": "error", "message": {"text": "Dangling fetch: GET https://api.linkedin.com/rest/socialMetadata?ids=${buildLinkedInRestliList(uniqueUrns)} (packages/api/src/server/distribution/linkedinHelpers.ts:122)"}, "properties": {"repobilityId": "5cc18fd6790007f7", "scanner": "scanner-primary", "fingerprint": "8797edbe865a0c85", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-b2ffdb690de7b0e9", "level": "error", "message": {"text": "Dangling fetch: GET https://api.linkedin.com/rest/organizationalEntityShareStatistics?${params.toString()} (packages/api/src/server/distribution/linkedinHelpers.ts:151)"}, "properties": {"repobilityId": "ca4dd16479cd01d3", "scanner": "scanner-primary", "fingerprint": "b2ffdb690de7b0e9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-1cda3c091db645c1", "level": "error", "message": {"text": "Dangling fetch: GET https://api.linkedin.com/v2/me (packages/api/src/server/distribution/linkedinHelpers.ts:224)"}, "properties": {"repobilityId": "7bf05545442a69bf", "scanner": "scanner-primary", "fingerprint": "1cda3c091db645c1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-f34b9e2ae3f1c461", "level": "error", "message": {"text": "Dangling fetch: GET https://api.linkedin.com/v2/userinfo (packages/api/src/server/distribution/linkedinHelpers.ts:231)"}, "properties": {"repobilityId": "e16ba6b8737a9034", "scanner": "scanner-primary", "fingerprint": "f34b9e2ae3f1c461", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-83e1432c718e31e2", "level": "error", "message": {"text": "Dangling fetch: GET https://api.pinterest.com/v5/user_account (packages/api/src/server/analytics/syncHelpers.ts:454)"}, "properties": {"repobilityId": "4ac2c28edb579c1c", "scanner": "scanner-primary", "fingerprint": "83e1432c718e31e2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-e173b945b01426c3", "level": "error", "message": {"text": "Dangling fetch: GET https://api.pinterest.com/v5/pins (packages/api/src/server/analytics/syncHelpers.ts:500)"}, "properties": {"repobilityId": "648b38c5cb553ff6", "scanner": "scanner-primary", "fingerprint": "e173b945b01426c3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-68f5a5f7ab389d51", "level": "error", "message": {"text": "Dangling fetch: GET https://open.tiktokapis.com/v2/user/info/ (packages/api/src/server/analytics/helpers.ts:84)"}, "properties": {"repobilityId": "01073ea064f428e6", "scanner": "scanner-primary", "fingerprint": "68f5a5f7ab389d51", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-9dc53442d901ca66", "level": "error", "message": {"text": "Dangling fetch: GET https://graph.threads.net/debug_token (packages/api/src/server/analytics/threadsRoutes.ts:174)"}, "properties": {"repobilityId": "b1a2fa80a7c361a9", "scanner": "scanner-primary", "fingerprint": "9dc53442d901ca66", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-8809afab786acfa9", "level": "error", "message": {"text": "Dangling fetch: GET https://graph.threads.net/location_search (packages/api/src/server/analytics/threadsRoutes.ts:303)"}, "properties": {"repobilityId": "d4d4330a77f275dc", "scanner": "scanner-primary", "fingerprint": "8809afab786acfa9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-4df629d80996c5d5", "level": "error", "message": {"text": "Dangling fetch: GET https://graph.threads.net/${encodeURIComponent(locationId)} (packages/api/src/server/analytics/threadsRoutes.ts:328)"}, "properties": {"repobilityId": "843b24401413ecf6", "scanner": "scanner-primary", "fingerprint": "4df629d80996c5d5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-d6bc6982593216a4", "level": "error", "message": {"text": "Dangling fetch: GET https://api.linkedin.com/v2/me (packages/api/src/server/analytics/linkedinAnalyticsRoutes.ts:63)"}, "properties": {"repobilityId": "99aaab4ee7fe7e28", "scanner": "scanner-primary", "fingerprint": "d6bc6982593216a4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-84664dec8b30eb8d", "level": "error", "message": {"text": "Dangling fetch: GET https://api.linkedin.com/v2/ugcPosts (packages/api/src/server/analytics/linkedinAnalyticsRoutes.ts:85)"}, "properties": {"repobilityId": "6082b1d100bfe9d1", "scanner": "scanner-primary", "fingerprint": "84664dec8b30eb8d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-cc692e6cd5320c2f", "level": "error", "message": {"text": "Dangling fetch: GET https://api.linkedin.com/rest/organizationPageStatistics (packages/api/src/server/analytics/linkedinAnalyticsRoutes.ts:201)"}, "properties": {"repobilityId": "6e936ed25173e55e", "scanner": "scanner-primary", "fingerprint": "cc692e6cd5320c2f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-5be4d91ed7313cee", "level": "error", "message": {"text": "Dangling fetch: GET https://api.linkedin.com/rest/organizationalEntityShareStatistics (packages/api/src/server/analytics/linkedinAnalyticsRoutes.ts:202)"}, "properties": {"repobilityId": "297f2744639a05af", "scanner": "scanner-primary", "fingerprint": "5be4d91ed7313cee", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-73cffa0a1cc2f3a7", "level": "error", "message": {"text": "Dangling fetch: POST https://open.tiktokapis.com/v2/video/list/ (packages/api/src/server/analytics/tiktokRoutes.ts:81)"}, "properties": {"repobilityId": "af4f5921112de016", "scanner": "scanner-primary", "fingerprint": "73cffa0a1cc2f3a7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-d6cdabd339d0b814", "level": "error", "message": {"text": "Dangling fetch: GET /api/crm/activities/${note.id}/comments (packages/web/src/pages/CRMCompanies.tsx:271)"}, "properties": {"repobilityId": "438d4c824657f898", "scanner": "scanner-primary", "fingerprint": "d6cdabd339d0b814", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-34715dcb9e170666", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/crm/activities/${note.id} (packages/web/src/pages/CRMCompanies.tsx:282)"}, "properties": {"repobilityId": "b5985c7e181d2de5", "scanner": "scanner-primary", "fingerprint": "34715dcb9e170666", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-296aa5b5c5aaced6", "level": "error", "message": {"text": "Dangling fetch: POST /api/crm/activities/${note.id}/comments (packages/web/src/pages/CRMCompanies.tsx:293)"}, "properties": {"repobilityId": "11bf513bb85143a7", "scanner": "scanner-primary", "fingerprint": "296aa5b5c5aaced6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-93bfe170884385c2", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/crm/activities/${note.id}/comments/${cid} (packages/web/src/pages/CRMCompanies.tsx:301)"}, "properties": {"repobilityId": "ee8fa4e4c292a9cc", "scanner": "scanner-primary", "fingerprint": "93bfe170884385c2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b7e460334ea35855", "level": "error", "message": {"text": "Dangling fetch: POST /api/crm/activities (packages/web/src/pages/CRMCompanies.tsx:431)"}, "properties": {"repobilityId": "dc79a6fdd661d6b6", "scanner": "scanner-primary", "fingerprint": "b7e460334ea35855", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-586dc7ad2969617f", "level": "error", "message": {"text": "Dangling fetch: GET /api/mailing/contacts?search=${encodeURIComponent(q)} (packages/web/src/pages/CRMCompanies.tsx:594)"}, "properties": {"repobilityId": "316245087bd565e3", "scanner": "scanner-primary", "fingerprint": "586dc7ad2969617f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6d0f345cc473631d", "level": "error", "message": {"text": "Dangling fetch: POST /api/crm/companies/${companyId}/contacts (packages/web/src/pages/CRMCompanies.tsx:604)"}, "properties": {"repobilityId": "aa39e46d2cf76e31", "scanner": "scanner-primary", "fingerprint": "6d0f345cc473631d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4e0d3aa81e6e97bd", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/crm/activities/${id} (packages/web/src/pages/CRMCompanies.tsx:1187)"}, "properties": {"repobilityId": "c34a3b00005f88bf", "scanner": "scanner-primary", "fingerprint": "4e0d3aa81e6e97bd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e1b1aa27972822f4", "level": "error", "message": {"text": "Dangling fetch: POST /api/calendar/google/connect-url (packages/web/src/pages/Integrations.tsx:523)"}, "properties": {"repobilityId": "bb2da724f6b20fe4", "scanner": "scanner-primary", "fingerprint": "e1b1aa27972822f4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9bb7954259718fd1", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/calendar/google/disconnect (packages/web/src/pages/Integrations.tsx:564)"}, "properties": {"repobilityId": "7454970bf3f1cbdb", "scanner": "scanner-primary", "fingerprint": "9bb7954259718fd1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-69da92107ce3fdce", "level": "error", "message": {"text": "Dangling fetch: GET /api/crm/activities?contact_id=${contact.id}&limit=30 (packages/web/src/pages/MarketingContacts.tsx:83)"}, "properties": {"repobilityId": "b7603804270b0677", "scanner": "scanner-primary", "fingerprint": "69da92107ce3fdce", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5864af3296b83452", "level": "error", "message": {"text": "Dangling fetch: POST /api/crm/activities (packages/web/src/pages/MarketingContacts.tsx:92)"}, "properties": {"repobilityId": "761770d8a4d46926", "scanner": "scanner-primary", "fingerprint": "5864af3296b83452", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-21fdd4ee115eb877", "level": "error", "message": {"text": "Dangling fetch: GET /api/data (.claude/skills/remotion-to-hyperframes/scripts/tests/fixtures/blocker.tsx:22)"}, "properties": {"repobilityId": "dce8ea20dab598c9", "scanner": "scanner-primary", "fingerprint": "21fdd4ee115eb877", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8f3075a72770566b", "level": "error", "message": {"text": "Dangling fetch: GET /api/heartbeat (.claude/skills/remotion-to-hyperframes/scripts/tests/fixtures/blocker.tsx:35)"}, "properties": {"repobilityId": "1743a5ca363589ff", "scanner": "scanner-primary", "fingerprint": "8f3075a72770566b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d897bf5050cba7ed", "level": "error", "message": {"text": "Dangling fetch: GET /api/duration (.claude/skills/remotion-to-hyperframes/scripts/tests/fixtures/blocker.tsx:47)"}, "properties": {"repobilityId": "84e451497cb1a627", "scanner": "scanner-primary", "fingerprint": "d897bf5050cba7ed", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-81c7b6f07b4b191f", "level": "error", "message": {"text": "Dangling fetch: GET /api/items (.claude/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/cases/08-mixed.tsx:25)"}, "properties": {"repobilityId": "44da9b9b8643112d", "scanner": "scanner-primary", "fingerprint": "81c7b6f07b4b191f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1dfcc9529630142e", "level": "note", "message": {"text": "Unused endpoint: POST /webhooks/stripe"}, "properties": {"repobilityId": "f332a9e224fcc5ae", "scanner": "scanner-primary", "fingerprint": "1dfcc9529630142e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a87fc399d210a8b7", "level": "note", "message": {"text": "Unused endpoint: POST /api/v1/social/facebook/webhook-subscribe"}, "properties": {"repobilityId": "f81f558534a55018", "scanner": "scanner-primary", "fingerprint": "a87fc399d210a8b7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-250594e51a099069", "level": "note", "message": {"text": "Unused endpoint: POST /api/wordpress/connect"}, "properties": {"repobilityId": "ac639edc7411b19e", "scanner": "scanner-primary", "fingerprint": "250594e51a099069", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d9200bb7931c1895", "level": "note", "message": {"text": "Unused endpoint: GET /api/pricing/plans"}, "properties": {"repobilityId": "332d26b0722ffd41", "scanner": "scanner-primary", "fingerprint": "d9200bb7931c1895", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3bcb769b8c5ef124", "level": "note", "message": {"text": "Unused endpoint: GET /api/card-templates"}, "properties": {"repobilityId": "d1155e4a602059f4", "scanner": "scanner-primary", "fingerprint": "3bcb769b8c5ef124", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6eb452fbfb454d20", "level": "note", "message": {"text": "Unused endpoint: USE /api/auth"}, "properties": {"repobilityId": "277653dd7f5ebdec", "scanner": "scanner-primary", "fingerprint": "6eb452fbfb454d20", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b93c1ed754cfdc30", "level": "note", "message": {"text": "Unused endpoint: USE /api/oauth"}, "properties": {"repobilityId": "8ddf03c5bc0c7bd3", "scanner": "scanner-primary", "fingerprint": "b93c1ed754cfdc30", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1be44d2cc9b65154", "level": "note", "message": {"text": "Unused endpoint: USE /api/posts"}, "properties": {"repobilityId": "31e35afb3012f774", "scanner": "scanner-primary", "fingerprint": "1be44d2cc9b65154", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-698c960074629f96", "level": "note", "message": {"text": "Unused endpoint: USE /api/integrations"}, "properties": {"repobilityId": "2dd614889262b827", "scanner": "scanner-primary", "fingerprint": "698c960074629f96", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2922dfb7a09f04de", "level": "note", "message": {"text": "Unused endpoint: USE /api/my-integrations"}, "properties": {"repobilityId": "5484df6c27f3fa1e", "scanner": "scanner-primary", "fingerprint": "2922dfb7a09f04de", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ac5cb450e971f993", "level": "note", "message": {"text": "Unused endpoint: USE /api/automation"}, "properties": {"repobilityId": "cc472525c7d9354c", "scanner": "scanner-primary", "fingerprint": "ac5cb450e971f993", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d803e7e5650befd4", "level": "note", "message": {"text": "Unused endpoint: USE /api/analytics"}, "properties": {"repobilityId": "bdce394fc672020a", "scanner": "scanner-primary", "fingerprint": "d803e7e5650befd4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4756b4c4da7d2088", "level": "note", "message": {"text": "Unused endpoint: GET /api/health"}, "properties": {"repobilityId": "6261c5db4b08acc2", "scanner": "scanner-primary", "fingerprint": "4756b4c4da7d2088", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7a009b1a56794f45", "level": "note", "message": {"text": "Unused endpoint: POST /"}, "properties": {"repobilityId": "26323a2f8f0d359b", "scanner": "scanner-primary", "fingerprint": "7a009b1a56794f45", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5baa8971ebe192a1", "level": "note", "message": {"text": "Unused endpoint: GET /"}, "properties": {"repobilityId": "2b4d1e0f0ea3a06f", "scanner": "scanner-primary", "fingerprint": "5baa8971ebe192a1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-dfef8c6751e1e00b", "level": "note", "message": {"text": "Unused endpoint: GET /:id/with-platforms"}, "properties": {"repobilityId": "1ab6edfc756f307e", "scanner": "scanner-primary", "fingerprint": "dfef8c6751e1e00b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ca5756175765b49d", "level": "note", "message": {"text": "Unused endpoint: GET /:id"}, "properties": {"repobilityId": "3c801e35249a4638", "scanner": "scanner-primary", "fingerprint": "ca5756175765b49d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8d5b2b188d08ca82", "level": "note", "message": {"text": "Unused endpoint: PUT /:id"}, "properties": {"repobilityId": "7c03e1f419cae32d", "scanner": "scanner-primary", "fingerprint": "8d5b2b188d08ca82", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e5d2797229565e60", "level": "note", "message": {"text": "Unused endpoint: PUT /:id/platform-selection"}, "properties": {"repobilityId": "98bda08b31f84079", "scanner": "scanner-primary", "fingerprint": "e5d2797229565e60", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cad92e35dab4a69c", "level": "note", "message": {"text": "Unused endpoint: POST /:id/reschedule"}, "properties": {"repobilityId": "4543b36c9db5d1fc", "scanner": "scanner-primary", "fingerprint": "cad92e35dab4a69c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cd1fe2a32ddf5ab8", "level": "note", "message": {"text": "Unused endpoint: GET /:id/reschedule-options"}, "properties": {"repobilityId": "5e71371dd150c0e7", "scanner": "scanner-primary", "fingerprint": "cd1fe2a32ddf5ab8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e7631b7eb6caaf48", "level": "note", "message": {"text": "Unused endpoint: POST /:id/post-now"}, "properties": {"repobilityId": "02fe2a7bbcff2c0b", "scanner": "scanner-primary", "fingerprint": "e7631b7eb6caaf48", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0ff6430ab8f60ee7", "level": "note", "message": {"text": "Unused endpoint: POST /:id/schedule"}, "properties": {"repobilityId": "94e63816920fb4b6", "scanner": "scanner-primary", "fingerprint": "0ff6430ab8f60ee7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0cb78db4e7bafb1c", "level": "note", "message": {"text": "Unused endpoint: POST /:id/cancel"}, "properties": {"repobilityId": "46b58332c8452a50", "scanner": "scanner-primary", "fingerprint": "0cb78db4e7bafb1c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7a61c112b611f4bb", "level": "note", "message": {"text": "Unused endpoint: DELETE /:id"}, "properties": {"repobilityId": "f0dd49e464888aa1", "scanner": "scanner-primary", "fingerprint": "7a61c112b611f4bb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-86272cbb5b6da0b3", "level": "note", "message": {"text": "Unused endpoint: POST /:id/retry"}, "properties": {"repobilityId": "198533d42dde895b", "scanner": "scanner-primary", "fingerprint": "86272cbb5b6da0b3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9946668bc655784c", "level": "note", "message": {"text": "Unused endpoint: GET /:id/status"}, "properties": {"repobilityId": "138ee67f9c2b6f09", "scanner": "scanner-primary", "fingerprint": "9946668bc655784c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-01b064324cf0ccbe", "level": "note", "message": {"text": "Unused endpoint: GET /integrations"}, "properties": {"repobilityId": "79d1a896c616c3de", "scanner": "scanner-primary", "fingerprint": "01b064324cf0ccbe", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-650a327404b12c5e", "level": "note", "message": {"text": "Unused endpoint: POST /posts/:id/schedule"}, "properties": {"repobilityId": "3b41eaa5dd4d2de5", "scanner": "scanner-primary", "fingerprint": "650a327404b12c5e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c9b846d34541db5e", "level": "note", "message": {"text": "Unused endpoint: POST /posts/:id/recurring"}, "properties": {"repobilityId": "5fb87d038bd96f54", "scanner": "scanner-primary", "fingerprint": "c9b846d34541db5e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7b8431cee3e46db7", "level": "note", "message": {"text": "Unused endpoint: GET /posts/:id/upcoming-instances"}, "properties": {"repobilityId": "02e9d0565e0b1846", "scanner": "scanner-primary", "fingerprint": "7b8431cee3e46db7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3b067a5c4e1f5863", "level": "note", "message": {"text": "Unused endpoint: GET /posts/:id/status"}, "properties": {"repobilityId": "378e963fd089cea3", "scanner": "scanner-primary", "fingerprint": "3b067a5c4e1f5863", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d5654000a0e34628", "level": "note", "message": {"text": "Unused endpoint: POST /posts/:id/pause"}, "properties": {"repobilityId": "efaef7229f4a4aca", "scanner": "scanner-primary", "fingerprint": "d5654000a0e34628", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e06caeb2b8448b7a", "level": "note", "message": {"text": "Unused endpoint: POST /posts/:id/resume"}, "properties": {"repobilityId": "650d2464268dd726", "scanner": "scanner-primary", "fingerprint": "e06caeb2b8448b7a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f117a2b493d34d20", "level": "note", "message": {"text": "Unused endpoint: DELETE /posts/:id/cancel-recurring"}, "properties": {"repobilityId": "f4386a81270df7b3", "scanner": "scanner-primary", "fingerprint": "f117a2b493d34d20", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-69a887dade4ae83a", "level": "note", "message": {"text": "Unused endpoint: POST /posts/:id/optimize-timing"}, "properties": {"repobilityId": "1705496aaa1b76cd", "scanner": "scanner-primary", "fingerprint": "69a887dade4ae83a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-26bf5f94d883f709", "level": "note", "message": {"text": "Unused endpoint: GET /rules"}, "properties": {"repobilityId": "17cde34ac8791a76", "scanner": "scanner-primary", "fingerprint": "26bf5f94d883f709", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d91a7845c35d0f8f", "level": "note", "message": {"text": "Unused endpoint: POST /rules"}, "properties": {"repobilityId": "e86b609e4e5bb792", "scanner": "scanner-primary", "fingerprint": "d91a7845c35d0f8f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b1c09705df786432", "level": "note", "message": {"text": "Unused endpoint: POST /posts/:id/apply-rule"}, "properties": {"repobilityId": "f5fbb7d34551fb1d", "scanner": "scanner-primary", "fingerprint": "b1c09705df786432", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0ec5fd978c205afd", "level": "note", "message": {"text": "Unused endpoint: GET /logs/:postId"}, "properties": {"repobilityId": "9c718b65023edce0", "scanner": "scanner-primary", "fingerprint": "0ec5fd978c205afd", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cb9411a1a1dab06e", "level": "note", "message": {"text": "Unused endpoint: POST /batch-schedule"}, "properties": {"repobilityId": "754563542d61f1fd", "scanner": "scanner-primary", "fingerprint": "cb9411a1a1dab06e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-dd71dfa1d0356c5b", "level": "note", "message": {"text": "Unused endpoint: GET /:slug"}, "properties": {"repobilityId": "9750145f47d150e6", "scanner": "scanner-primary", "fingerprint": "dd71dfa1d0356c5b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fb2629e36ca10190", "level": "note", "message": {"text": "Unused endpoint: GET /:slug/auth-url"}, "properties": {"repobilityId": "ca6268f8f734ca4d", "scanner": "scanner-primary", "fingerprint": "fb2629e36ca10190", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-98b4d10c816039b1", "level": "note", "message": {"text": "Unused endpoint: GET /:slug/callback"}, "properties": {"repobilityId": "fb348c57f4f3e21d", "scanner": "scanner-primary", "fingerprint": "98b4d10c816039b1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3261e6ff40613136", "level": "note", "message": {"text": "Unused endpoint: POST /:slug/callback"}, "properties": {"repobilityId": "3e138fab4cf9c7b3", "scanner": "scanner-primary", "fingerprint": "3261e6ff40613136", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ea0c84d0c2fa8d0c", "level": "note", "message": {"text": "Unused endpoint: POST /:integrationId/disconnect"}, "properties": {"repobilityId": "1b8729248e5d748b", "scanner": "scanner-primary", "fingerprint": "ea0c84d0c2fa8d0c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a2e5add6ce53e205", "level": "note", "message": {"text": "Unused endpoint: GET /:integrationId/accounts"}, "properties": {"repobilityId": "c3730dec7ef0bb09", "scanner": "scanner-primary", "fingerprint": "a2e5add6ce53e205", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-66ef1fa55f5634a8", "level": "note", "message": {"text": "Unused endpoint: POST /:integrationId/validate"}, "properties": {"repobilityId": "c9206ecd621e247c", "scanner": "scanner-primary", "fingerprint": "66ef1fa55f5634a8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-05753ae3e265cd12", "level": "note", "message": {"text": "Unused endpoint: GET /logs/:integrationId"}, "properties": {"repobilityId": "94a0c22c0417d65d", "scanner": "scanner-primary", "fingerprint": "05753ae3e265cd12", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8d16b1bb2723f51e", "level": "note", "message": {"text": "Unused endpoint: POST /signup"}, "properties": {"repobilityId": "80260a6b3d64e17e", "scanner": "scanner-primary", "fingerprint": "8d16b1bb2723f51e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}