{"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-c6373c51e1d0a6c6", "name": "Possibly dead Python function: call_claude", "shortDescription": {"text": "Possibly dead Python function: call_claude"}, "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-39b423487eb42312", "name": "Possibly dead Python function: call_openai", "shortDescription": {"text": "Possibly dead Python function: call_openai"}, "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-527654b2a47916f9", "name": "Possibly dead Python function: call_openrouter", "shortDescription": {"text": "Possibly dead Python function: call_openrouter"}, "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-7de1b6f313cd3e74", "name": "Stray `console.log` in TS/JS \u2014 frontend/src/App.js:4578", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/src/App.js:4578"}, "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-14b0fb22e16cd1a3", "name": "Stray `console.log` in TS/JS \u2014 frontend/src/components/PlasmaField.jsx:355", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/src/components/PlasmaField.jsx:355"}, "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-fc451b8c1157a288", "name": "Icon-only button without accessible name \u2014 frontend/src/components/DuoModeDashboard.js:726", "shortDescription": {"text": "Icon-only button without accessible name \u2014 frontend/src/components/DuoModeDashboard.js:726"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b317165de2b2ddbb", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 frontend/src/components/DuoModeDashboard.js:535", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 frontend/src/components/DuoModeDashboard.js:535"}, "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-9636df043e4cf997", "name": "Icon-only button without accessible name \u2014 frontend/src/components/JobPipeline.js:403", "shortDescription": {"text": "Icon-only button without accessible name \u2014 frontend/src/components/JobPipeline.js:403"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2f89fc32b83e2274", "name": "Stray `console.log` in TS/JS \u2014 frontend/plugins/health-check/health-endpoints.js:24", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/plugins/health-check/health-endpoints.js:24"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c6d7a5cb68779cf8", "name": "Stray `console.log` in TS/JS \u2014 frontend/plugins/visual-edits/dev-server-setup.js:426", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/plugins/visual-edits/dev-server-setup.js:426"}, "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-8731324a5e3a09f7", "name": "Stray `console.log` in TS/JS \u2014 cubiqo-plasma-export/components/PlasmaField.jsx:353", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 cubiqo-plasma-export/components/PlasmaField.jsx:353"}, "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-f90d2958fd6950b0", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/connectors/ConnectorCard.tsx:84", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/connectors/ConnectorCard.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-c3d4e94a165089c0", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/duo/ArtifactPane.tsx:101", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/duo/ArtifactPane.tsx:101"}, "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-03cf5b0f819edd53", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/layout.tsx:40", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/layout.tsx:40"}, "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-d15414a1b0cb3b1d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(app)/settings/page.tsx:165", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(app)/settings/page.tsx:165"}, "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-b7f700ca96bd4eba", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(app)/duo/page.tsx:150", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(app)/duo/page.tsx:150"}, "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-c720524d1468fd50", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(app)/duo/[id]/page.tsx:486", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(app)/duo/[id]/page.tsx:486"}, "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-a0ad09a55794a076", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(app)/_components/AppShell.tsx:248", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(app)/_components/AppShell.tsx:248"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-15e73e0feed60d5c", "name": "\"active\" state uses light bg in a dark theme \u2014 src/app/(app)/_components/AppShell.tsx:81", "shortDescription": {"text": "\"active\" state uses light bg in a dark theme \u2014 src/app/(app)/_components/AppShell.tsx:81"}, "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-047a13b3fc23a879", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(app)/_components/RightPanel.tsx:119", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(app)/_components/RightPanel.tsx:119"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ce7db403b042ad65", "name": "Stray `console.log` in TS/JS \u2014 src/lib/comms/sms.ts:28", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/comms/sms.ts:28"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-05f8f8afecbe91f1", "name": "Stray `console.log` in TS/JS \u2014 src/lib/email/send.ts:37", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/email/send.ts:37"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-811a0231bc4b64d0", "name": "Stray `console.log` in TS/JS \u2014 src/lib/crypto/generate-keys.ts:8", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/crypto/generate-keys.ts:8"}, "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-8b88237c8a94e6b6", "name": "Insecure pattern 'local_storage_auth_token' in frontend/src/App.js:1000", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in frontend/src/App.js:1000"}, "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-6c51d9ea157db5a4", "name": "Insecure pattern 'dangerous_innerhtml' in frontend/src/components/DuoModeDashboard.js:535", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in frontend/src/components/DuoModeDashboard.js:535"}, "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-8e74dc0961251881", "name": "Insecure pattern 'node_child_process' in frontend/plugins/visual-edits/dev-server-setup.js:6", "shortDescription": {"text": "Insecure pattern 'node_child_process' in frontend/plugins/visual-edits/dev-server-setup.js:6"}, "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-2bc0d3be99b15fd9", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/layout.tsx:40", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/layout.tsx:40"}, "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-a495ac15a71b55af", "name": "Insecure pattern 'private_key_in_repo' in src/app/api/admin/analytics/google/route.ts:49", "shortDescription": {"text": "Insecure pattern 'private_key_in_repo' in src/app/api/admin/analytics/google/route.ts:49"}, "fullDescription": {"text": "Found a known-risky pattern (private_key_in_repo). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-9529b2974fde5996", "name": "Insecure pattern 'local_storage_auth_token' in src/lib/surfaces/heartbeat-client.ts:34", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in src/lib/surfaces/heartbeat-client.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-179f34bc9d709f26", "name": "Insecure pattern 'cors_wildcard' in src/server/legacy/converse.cjs:588", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in src/server/legacy/converse.cjs:588"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4601e3ad3bb28677", "name": "No CI/CD pipelines detected", "shortDescription": {"text": "No CI/CD pipelines detected"}, "fullDescription": {"text": "No GitHub Actions, GitLab CI, or CircleCI configs found. Without CI you can't gate deploys on tests/lints."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ba3fda6ba0c745dd", "name": "Very large file: frontend/src/App.js (6600 lines)", "shortDescription": {"text": "Very large file: frontend/src/App.js (6600 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-4a6411f2715a2a4e", "name": "Very large file: frontend/plugins/visual-edits/babel-metadata-plugin.js (2159 lines)", "shortDescription": {"text": "Very large file: frontend/plugins/visual-edits/babel-metadata-plugin.js (2159 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-81fb75fd93a4ddd1", "name": "Very large file: scripts/run-phase-ab-migrations.mjs (1447 lines)", "shortDescription": {"text": "Very large file: scripts/run-phase-ab-migrations.mjs (1447 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-172dd331b04edd71", "name": "Very large file: scripts/verify-cqai-e2e.mjs (2476 lines)", "shortDescription": {"text": "Very large file: scripts/verify-cqai-e2e.mjs (2476 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-5f6f4ff73ddf6fa7", "name": "Very large file: src/app/api/actions/execute/route.ts (1223 lines)", "shortDescription": {"text": "Very large file: src/app/api/actions/execute/route.ts (1223 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-69200fd845603efd", "name": "Very large file: src/app/api/_lib/shopify-pod-operations.ts (1218 lines)", "shortDescription": {"text": "Very large file: src/app/api/_lib/shopify-pod-operations.ts (1218 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": "8 test file(s) for 491 source file(s) (ratio 0.02). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 40 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 102 placeholder/mock markers across 37 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9d79c4077342a7d0", "name": "Runtime service client appears to use placeholder configuration", "shortDescription": {"text": "Runtime service client appears to use placeholder configuration"}, "fullDescription": {"text": "A runtime source file appears to wire Supabase/Firebase/AI/payment-style clients to placeholder URLs, keys, or fallback values. In the Fable corpus this often means the UI/API shape is present while the backend service is not actually configured."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, ci. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-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, ci. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d857d228eed10ada", "name": "Legacy-named symbol `cubiqo_visit_memory_v1` in frontend/src/App.js:48", "shortDescription": {"text": "Legacy-named symbol `cubiqo_visit_memory_v1` in frontend/src/App.js:48"}, "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-730524115fe03d09", "name": "Commented-code block (5 lines) in frontend/src/App.js:5183", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/App.js:5183"}, "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-e0bf31aef3d5d686", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/App.js:321", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/App.js:321"}, "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-e85cb2a23f2c156c", "name": "Commented-code block (6 lines) in frontend/src/components/DuoModeDashboard.js:568", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/src/components/DuoModeDashboard.js:568"}, "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-b6b91f96088ac50a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/components/DuoModeDashboard.js:295", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/components/DuoModeDashboard.js:295"}, "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-a145ed9f32788819", "name": "Legacy-named symbol `eleven_monolingual_v1` in backend/server.py:171", "shortDescription": {"text": "Legacy-named symbol `eleven_monolingual_v1` in backend/server.py:171"}, "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-eac41b01fba0b6e9", "name": "Commented-code block (6 lines) in src/middleware.ts:28", "shortDescription": {"text": "Commented-code block (6 lines) in src/middleware.ts:28"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-27d0a689f5a92183", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/comms/CommsDashboard.tsx:53", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/comms/CommsDashboard.tsx:53"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d89a92fcb0a1b087", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/notifications/NotificationBell.tsx:44", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/notifications/NotificationBell.tsx:44"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-121c172b27c9619d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/connectors/ConnectorCard.tsx:55", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/connectors/ConnectorCard.tsx:55"}, "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-fa97acd743aa662e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/profile/VerifyContact.tsx:17", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/profile/VerifyContact.tsx: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-b0712becfe728d49", "name": "Commented-code block (6 lines) in src/app/api/push/send/route.ts:74", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/push/send/route.ts:74"}, "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-8cbba6e232b14ad4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/tts/transcribe/route.ts:24", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/tts/transcribe/route.ts:24"}, "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-e829e351ae5e5ba8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/connectors/google/callback/route.ts:64", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/connectors/google/callback/route.ts:64"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5e7ee2d5c87f9582", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/connectors/google/gmail/route.ts:29", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/connectors/google/gmail/route.ts:29"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c6e9f8bcd2d73d8b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/connectors/google/calendar/route.ts:28", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/connectors/google/calendar/route.ts:28"}, "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-82dab8a8c9f97cab", "name": "Commented-code block (5 lines) in src/app/api/image/route.ts:31", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/image/route.ts:31"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-724c870bf7a00413", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/image/route.ts:96", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/image/route.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-331660fe9df0c077", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/agent/suggest/route.ts:48", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/agent/suggest/route.ts:48"}, "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-f41d31d9efc50bf7", "name": "Commented-code block (5 lines) in src/app/api/agent/background/route.ts:34", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/agent/background/route.ts:34"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6046571aa244dea2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/agent/background/route.ts:264", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/agent/background/route.ts:264"}, "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-f4f208e46004caf1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/duo/connectors/[platform]/callback/route.ts:49", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/duo/connectors/[platform]/callback/route.ts:49"}, "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-9dc008fdfdbe0f25", "name": "Commented-code block (6 lines) in src/app/api/duo/approvals/[id]/approve/route.ts:34", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/duo/approvals/[id]/approve/route.ts:34"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-528ca257d6e6ab47", "name": "Commented-code block (6 lines) in src/app/api/chat/route.ts:103", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/chat/route.ts:103"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-11121bc26c3082c6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/voice/route.ts:41", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/voice/route.ts:41"}, "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-d813837fa4f9be52", "name": "Commented-code block (5 lines) in src/app/api/billing/webhook/route.ts:48", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/billing/webhook/route.ts:48"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2153d9fc7563af87", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/self-heal/route.ts:54", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/self-heal/route.ts:54"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f58f7cc07e259518", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/analytics/google/route.ts:63", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/analytics/google/route.ts:63"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cc7fd6163c8f8f5e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/vercel-logs/route.ts:36", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/vercel-logs/route.ts:36"}, "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-975eea10f369128b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/cron/market-watch/route.ts:123", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/cron/market-watch/route.ts:123"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b743a531dc159893", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/cron/job-scan/route.ts:124", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/cron/job-scan/route.ts:124"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3776fb8fbc2b9a17", "name": "Legacy-named symbol `cubiqo_visit_memory_v1` in src/app/api/user/account/route.ts:27", "shortDescription": {"text": "Legacy-named symbol `cubiqo_visit_memory_v1` in src/app/api/user/account/route.ts:27"}, "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-a0a14e40c3d361e7", "name": "Commented-code block (5 lines) in src/app/api/actions/social-post-queue/publish/route.ts:274", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/actions/social-post-queue/publish/route.ts:274"}, "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-fc4959745b83e25b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/actions/social-post-queue/platforms/tiktok.ts:21", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/actions/social-post-queue/platforms/tiktok.ts:21"}, "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-4794ed9780fb28d5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/_lib/content-scraper.ts:55", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/_lib/content-scraper.ts:55"}, "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-838e2ac3506af92d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/_lib/web-search.ts:21", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/_lib/web-search.ts:21"}, "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-3bceb33717b61e49", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/_lib/social-api-client.ts:151", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/_lib/social-api-client.ts: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-82e25bf14d34b245", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/_lib/shopify-pod-operations.ts:301", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/_lib/shopify-pod-operations.ts:301"}, "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-1bcff654f2070ec9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/_lib/printify-client.ts:77", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/_lib/printify-client.ts:77"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7e136716bfe9fb56", "name": "Legacy-named symbol `cubiqo_v2` in src/app/api/_lib/v2-actions.ts:19", "shortDescription": {"text": "Legacy-named symbol `cubiqo_v2` in src/app/api/_lib/v2-actions.ts:19"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-473272c3d92b35ce", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/_lib/shopify-client.ts:85", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/_lib/shopify-client.ts: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-5c9f6fa8f72b5196", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/compare/route.ts:123", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/compare/route.ts:123"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f181ead8cd4e4242", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/perception/vision/route.ts:205", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/perception/vision/route.ts:205"}, "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-9d347187eb30bd2d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/composio.ts:88", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/composio.ts:88"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-fdd8fd9dababe11a", "name": "Legacy-named symbol `eleven_multilingual_v2` in src/lib/models.ts:28", "shortDescription": {"text": "Legacy-named symbol `eleven_multilingual_v2` in src/lib/models.ts:28"}, "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-c55bf064555f50ea", "name": "Commented-code block (5 lines) in src/lib/ai/prompt-loader.ts:11", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/ai/prompt-loader.ts:11"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2a7d3a5c70449b9a", "name": "Legacy-named symbol `agent_v1` in src/lib/ai/user-context-tools.ts:293", "shortDescription": {"text": "Legacy-named symbol `agent_v1` in src/lib/ai/user-context-tools.ts:293"}, "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-f901831bc83111ce", "name": "Commented-code block (5 lines) in src/lib/config/llm.ts:49", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/config/llm.ts:49"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e3b71abf6b5cb30e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/analytics/funnel-tracker.ts:59", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/analytics/funnel-tracker.ts:59"}, "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-ab28ae056f43d7d8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/connectors/adapters/oauth2-adapter.ts:228", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/connectors/adapters/oauth2-adapter.ts:228"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-53d2524a9b550c76", "name": "Legacy-named symbol `eleven_multilingual_v2` in src/lib/media/model-router.ts:45", "shortDescription": {"text": "Legacy-named symbol `eleven_multilingual_v2` in src/lib/media/model-router.ts:45"}, "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-7ff8d688640b0ec1", "name": "Commented-code block (6 lines) in src/lib/agent/llm-planner.ts:110", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/agent/llm-planner.ts:110"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3b02265244c60698", "name": "Commented-code block (5 lines) in src/lib/agent/capsule-engine.ts:446", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/agent/capsule-engine.ts:446"}, "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-6e9ee56c1b8d8d6a", "name": "Commented-code block (5 lines) in src/lib/agent/entry-gate.ts:123", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/agent/entry-gate.ts:123"}, "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-e9d425786d1bfe10", "name": "Commented-code block (5 lines) in src/lib/agent/common.ts:112", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/agent/common.ts:112"}, "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-349d70fe51dbbfaa", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/connectors/useOAuthPopup.ts:51", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/connectors/useOAuthPopup.ts:51"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e915c69e5812feb4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/connectors/useConnectors.ts:21", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/connectors/useConnectors.ts:21"}, "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-9ff9d998e215f2c9", "name": "Frontend route `/auth/callback` has no Link/navigate to it \u2014 frontend/src/App.js", "shortDescription": {"text": "Frontend route `/auth/callback` has no Link/navigate to it \u2014 frontend/src/App.js"}, "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-c99555f72b6ce050", "name": "Dangling fetch: GET /api/journal?limit=5 (frontend/src/App.js:321)", "shortDescription": {"text": "Dangling fetch: GET /api/journal?limit=5 (frontend/src/App.js:321)"}, "fullDescription": {"text": "`frontend/src/App.js:321` calls `GET /api/journal?limit=5` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/journal`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-df95bf88fbea31cc", "name": "Dangling fetch: POST /api/journal/guide (frontend/src/App.js:441)", "shortDescription": {"text": "Dangling fetch: POST /api/journal/guide (frontend/src/App.js:441)"}, "fullDescription": {"text": "`frontend/src/App.js:441` calls `POST /api/journal/guide` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/journal/guide`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d0df72f619d57562", "name": "Dangling fetch: DELETE /api/journal/${normalized.id} (frontend/src/App.js:633)", "shortDescription": {"text": "Dangling fetch: DELETE /api/journal/${normalized.id} (frontend/src/App.js:633)"}, "fullDescription": {"text": "`frontend/src/App.js:633` calls `DELETE /api/journal/${normalized.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/journal/<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-775cd9c28921ff78", "name": "Dangling fetch: GET /api/dashboard (frontend/src/App.js:917)", "shortDescription": {"text": "Dangling fetch: GET /api/dashboard (frontend/src/App.js:917)"}, "fullDescription": {"text": "`frontend/src/App.js:917` calls `GET /api/dashboard` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8220692ba38877ab", "name": "Dangling fetch: GET /api/actions/events?since=${encodeURIComponent(since)} (frontend/src/App.js:1254)", "shortDescription": {"text": "Dangling fetch: GET /api/actions/events?since=${encodeURIComponent(since)} (frontend/src/App.js:1254)"}, "fullDescription": {"text": "`frontend/src/App.js:1254` calls `GET /api/actions/events?since=${encodeURIComponent(since)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/actions/events`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5ed111edef3bda63", "name": "Dangling fetch: POST /api/duo/projects (frontend/src/App.js:3769)", "shortDescription": {"text": "Dangling fetch: POST /api/duo/projects (frontend/src/App.js:3769)"}, "fullDescription": {"text": "`frontend/src/App.js:3769` calls `POST /api/duo/projects` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/duo/projects`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c854113dd6ef88d9", "name": "Dangling fetch: GET /api/diagnostics (frontend/src/App.js:3863)", "shortDescription": {"text": "Dangling fetch: GET /api/diagnostics (frontend/src/App.js:3863)"}, "fullDescription": {"text": "`frontend/src/App.js:3863` calls `GET /api/diagnostics` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/diagnostics`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-957a74bfb9b09c86", "name": "Dangling fetch: POST /api/recommendations/process (frontend/src/App.js:3925)", "shortDescription": {"text": "Dangling fetch: POST /api/recommendations/process (frontend/src/App.js:3925)"}, "fullDescription": {"text": "`frontend/src/App.js:3925` calls `POST /api/recommendations/process` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/recommendations/process`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8a03593baef88fd2", "name": "Dangling fetch: POST /api/safety/output (frontend/src/App.js:3945)", "shortDescription": {"text": "Dangling fetch: POST /api/safety/output (frontend/src/App.js:3945)"}, "fullDescription": {"text": "`frontend/src/App.js:3945` calls `POST /api/safety/output` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/safety/output`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4119ea63d6634640", "name": "Dangling fetch: GET /api/signals (frontend/src/App.js:4120)", "shortDescription": {"text": "Dangling fetch: GET /api/signals (frontend/src/App.js:4120)"}, "fullDescription": {"text": "`frontend/src/App.js:4120` calls `GET /api/signals` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/signals`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e167b37607c26787", "name": "Dangling fetch: GET /api/signals (frontend/src/App.js:4154)", "shortDescription": {"text": "Dangling fetch: GET /api/signals (frontend/src/App.js:4154)"}, "fullDescription": {"text": "`frontend/src/App.js:4154` calls `GET /api/signals` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/signals`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2e9a8aa283951c32", "name": "Dangling fetch: DELETE /api/signals (frontend/src/App.js:4185)", "shortDescription": {"text": "Dangling fetch: DELETE /api/signals (frontend/src/App.js:4185)"}, "fullDescription": {"text": "`frontend/src/App.js:4185` calls `DELETE /api/signals` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/signals`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1bdaa53a2938b0ed", "name": "Dangling fetch: POST /api/tts (frontend/src/App.js:4585)", "shortDescription": {"text": "Dangling fetch: POST /api/tts (frontend/src/App.js:4585)"}, "fullDescription": {"text": "`frontend/src/App.js:4585` calls `POST /api/tts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-63ee2534bd559e11", "name": "Dangling fetch: POST /api/voice-cue (frontend/src/App.js:4701)", "shortDescription": {"text": "Dangling fetch: POST /api/voice-cue (frontend/src/App.js:4701)"}, "fullDescription": {"text": "`frontend/src/App.js:4701` calls `POST /api/voice-cue` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/voice-cue`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6566cbb2efcef69e", "name": "Dangling fetch: POST /api/rgy/classify (frontend/src/App.js:4818)", "shortDescription": {"text": "Dangling fetch: POST /api/rgy/classify (frontend/src/App.js:4818)"}, "fullDescription": {"text": "`frontend/src/App.js:4818` calls `POST /api/rgy/classify` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/rgy/classify`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a6e5c874aa4d6d33", "name": "Dangling fetch: POST /api/agent/stream (frontend/src/App.js:4854)", "shortDescription": {"text": "Dangling fetch: POST /api/agent/stream (frontend/src/App.js:4854)"}, "fullDescription": {"text": "`frontend/src/App.js:4854` calls `POST /api/agent/stream` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/agent/stream`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9c50469aadca8eb0", "name": "Dangling fetch: POST /api/agent (frontend/src/App.js:4913)", "shortDescription": {"text": "Dangling fetch: POST /api/agent (frontend/src/App.js:4913)"}, "fullDescription": {"text": "`frontend/src/App.js:4913` calls `POST /api/agent` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/agent`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bb30aff0dd145bde", "name": "Dangling fetch: POST /api/image (frontend/src/App.js:5096)", "shortDescription": {"text": "Dangling fetch: POST /api/image (frontend/src/App.js:5096)"}, "fullDescription": {"text": "`frontend/src/App.js:5096` calls `POST /api/image` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/image`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ee3d8169fa05df9c", "name": "Dangling fetch: POST /api/image (frontend/src/App.js:5160)", "shortDescription": {"text": "Dangling fetch: POST /api/image (frontend/src/App.js:5160)"}, "fullDescription": {"text": "`frontend/src/App.js:5160` calls `POST /api/image` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/image`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f7a3bef08e7ffbde", "name": "Dangling fetch: POST /api/recommendations/save (frontend/src/App.js:5624)", "shortDescription": {"text": "Dangling fetch: POST /api/recommendations/save (frontend/src/App.js:5624)"}, "fullDescription": {"text": "`frontend/src/App.js:5624` calls `POST /api/recommendations/save` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/recommendations/save`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9e4e238ce7243566", "name": "Dangling fetch: POST /api/recommendations/have (frontend/src/App.js:5635)", "shortDescription": {"text": "Dangling fetch: POST /api/recommendations/have (frontend/src/App.js:5635)"}, "fullDescription": {"text": "`frontend/src/App.js:5635` calls `POST /api/recommendations/have` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/recommendations/have`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6155056553c0a0f7", "name": "Dangling fetch: GET /api/connectors/status (frontend/src/components/DuoModeDashboard.js:185)", "shortDescription": {"text": "Dangling fetch: GET /api/connectors/status (frontend/src/components/DuoModeDashboard.js:185)"}, "fullDescription": {"text": "`frontend/src/components/DuoModeDashboard.js:185` calls `GET /api/connectors/status` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/connectors/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-a664be8e493f9f6b", "name": "Dangling fetch: POST /api/duo/projects/${projectId}/chat (frontend/src/components/DuoModeDashboard.js:245)", "shortDescription": {"text": "Dangling fetch: POST /api/duo/projects/${projectId}/chat (frontend/src/components/DuoModeDashboard.js:245)"}, "fullDescription": {"text": "`frontend/src/components/DuoModeDashboard.js:245` calls `POST /api/duo/projects/${projectId}/chat` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/duo/projects/<p>/chat`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-86f3fa75f9faf9b2", "name": "Dangling fetch: POST /api/duo/projects/${projectId}/approve (frontend/src/components/DuoModeDashboard.js:295)", "shortDescription": {"text": "Dangling fetch: POST /api/duo/projects/${projectId}/approve (frontend/src/components/DuoModeDashboard.js:295)"}, "fullDescription": {"text": "`frontend/src/components/DuoModeDashboard.js:295` calls `POST /api/duo/projects/${projectId}/approve` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/duo/projects/<p>/approve`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-75dc3343404ad2b5", "name": "Dangling fetch: POST /api/duo/projects/${projectId}/chat (frontend/src/components/DuoModeDashboard.js:304)", "shortDescription": {"text": "Dangling fetch: POST /api/duo/projects/${projectId}/chat (frontend/src/components/DuoModeDashboard.js:304)"}, "fullDescription": {"text": "`frontend/src/components/DuoModeDashboard.js:304` calls `POST /api/duo/projects/${projectId}/chat` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/duo/projects/<p>/chat`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-efc0c8095d2f9be8", "name": "Dangling fetch: POST /api/agent/suggest (frontend/src/components/DuoModeDashboard.js:437)", "shortDescription": {"text": "Dangling fetch: POST /api/agent/suggest (frontend/src/components/DuoModeDashboard.js:437)"}, "fullDescription": {"text": "`frontend/src/components/DuoModeDashboard.js:437` calls `POST /api/agent/suggest` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/agent/suggest`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-10a82c74172bc4e0", "name": "Dangling fetch: POST /api/duo/projects/${projectId}/chat (frontend/src/components/DuoModeDashboard.js:475)", "shortDescription": {"text": "Dangling fetch: POST /api/duo/projects/${projectId}/chat (frontend/src/components/DuoModeDashboard.js:475)"}, "fullDescription": {"text": "`frontend/src/components/DuoModeDashboard.js:475` calls `POST /api/duo/projects/${projectId}/chat` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/duo/projects/<p>/chat`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5caa154938e0a721", "name": "Dangling fetch: POST /api/agent/stream (frontend/src/components/DuoModeDashboard.js:495)", "shortDescription": {"text": "Dangling fetch: POST /api/agent/stream (frontend/src/components/DuoModeDashboard.js:495)"}, "fullDescription": {"text": "`frontend/src/components/DuoModeDashboard.js:495` calls `POST /api/agent/stream` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/agent/stream`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4b513384a6559e03", "name": "Dangling fetch: GET /api/duo/projects/${pid} (frontend/src/components/DuoModeDashboard.js:603)", "shortDescription": {"text": "Dangling fetch: GET /api/duo/projects/${pid} (frontend/src/components/DuoModeDashboard.js:603)"}, "fullDescription": {"text": "`frontend/src/components/DuoModeDashboard.js:603` calls `GET /api/duo/projects/${pid}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/duo/projects/<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-fd60880afd7831c2", "name": "Dangling fetch: POST /api/duo/projects (frontend/src/components/DuoModeDashboard.js:615)", "shortDescription": {"text": "Dangling fetch: POST /api/duo/projects (frontend/src/components/DuoModeDashboard.js:615)"}, "fullDescription": {"text": "`frontend/src/components/DuoModeDashboard.js:615` calls `POST /api/duo/projects` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/duo/projects`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b04e83203ec1f936", "name": "Dangling fetch: GET /api/capsule-briefing/${signalId} (frontend/src/components/DuoModeDashboard.js:644)", "shortDescription": {"text": "Dangling fetch: GET /api/capsule-briefing/${signalId} (frontend/src/components/DuoModeDashboard.js:644)"}, "fullDescription": {"text": "`frontend/src/components/DuoModeDashboard.js:644` calls `GET /api/capsule-briefing/${signalId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/capsule-briefing/<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-d26b653a2a74854d", "name": "Dangling fetch: PATCH /api/capsule-briefing/${signalId} (frontend/src/components/DuoModeDashboard.js:660)", "shortDescription": {"text": "Dangling fetch: PATCH /api/capsule-briefing/${signalId} (frontend/src/components/DuoModeDashboard.js:660)"}, "fullDescription": {"text": "`frontend/src/components/DuoModeDashboard.js:660` calls `PATCH /api/capsule-briefing/${signalId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/capsule-briefing/<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-f7f46c8a42959b9c", "name": "Dangling fetch: GET /api/duo/projects/${pid} (frontend/src/components/DuoModeDashboard.js:672)", "shortDescription": {"text": "Dangling fetch: GET /api/duo/projects/${pid} (frontend/src/components/DuoModeDashboard.js:672)"}, "fullDescription": {"text": "`frontend/src/components/DuoModeDashboard.js:672` calls `GET /api/duo/projects/${pid}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/duo/projects/<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-471bb43bdddd1c8b", "name": "Dangling fetch: POST /api/agent (frontend/src/components/JobPipeline.js:254)", "shortDescription": {"text": "Dangling fetch: POST /api/agent (frontend/src/components/JobPipeline.js:254)"}, "fullDescription": {"text": "`frontend/src/components/JobPipeline.js:254` calls `POST /api/agent` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/agent`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c258660d5b4b0486", "name": "Dangling fetch: POST /api/jobs/easy-apply (frontend/src/components/JobPipeline.js:337)", "shortDescription": {"text": "Dangling fetch: POST /api/jobs/easy-apply (frontend/src/components/JobPipeline.js:337)"}, "fullDescription": {"text": "`frontend/src/components/JobPipeline.js:337` calls `POST /api/jobs/easy-apply` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/jobs/easy-apply`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-33be992b03f7a098", "name": "Dangling fetch: GET /api/jobs/pipeline?limit=60 (frontend/src/components/JobPipeline.js:693)", "shortDescription": {"text": "Dangling fetch: GET /api/jobs/pipeline?limit=60 (frontend/src/components/JobPipeline.js:693)"}, "fullDescription": {"text": "`frontend/src/components/JobPipeline.js:693` calls `GET /api/jobs/pipeline?limit=60` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/jobs/pipeline`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-92c3378524364f0a", "name": "Dangling fetch: GET /api/actions/execute?job_state=1 (frontend/src/components/JobPipeline.js:694)", "shortDescription": {"text": "Dangling fetch: GET /api/actions/execute?job_state=1 (frontend/src/components/JobPipeline.js:694)"}, "fullDescription": {"text": "`frontend/src/components/JobPipeline.js:694` calls `GET /api/actions/execute?job_state=1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/actions/execute`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7066b53c2df75ad4", "name": "Dangling fetch: GET /api/cron/job-scan (frontend/src/components/JobPipeline.js:728)", "shortDescription": {"text": "Dangling fetch: GET /api/cron/job-scan (frontend/src/components/JobPipeline.js:728)"}, "fullDescription": {"text": "`frontend/src/components/JobPipeline.js:728` calls `GET /api/cron/job-scan` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/cron/job-scan`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7a2234e36fc6d4b1", "name": "Dangling fetch: POST /api/jobs/easy-apply (frontend/src/components/JobPipeline.js:745)", "shortDescription": {"text": "Dangling fetch: POST /api/jobs/easy-apply (frontend/src/components/JobPipeline.js:745)"}, "fullDescription": {"text": "`frontend/src/components/JobPipeline.js:745` calls `POST /api/jobs/easy-apply` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/jobs/easy-apply`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-406edc2357de8a8f", "name": "Dangling fetch: GET /api/comms/settings (src/components/comms/CommsDashboard.tsx:53)", "shortDescription": {"text": "Dangling fetch: GET /api/comms/settings (src/components/comms/CommsDashboard.tsx:53)"}, "fullDescription": {"text": "`src/components/comms/CommsDashboard.tsx:53` calls `GET /api/comms/settings` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/comms/settings`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ec535da300674b07", "name": "Dangling fetch: GET /api/notifications?limit=${limit} (src/components/notifications/NotificationBell.tsx:20)", "shortDescription": {"text": "Dangling fetch: GET /api/notifications?limit=${limit} (src/components/notifications/NotificationBell.tsx:20)"}, "fullDescription": {"text": "`src/components/notifications/NotificationBell.tsx:20` calls `GET /api/notifications?limit=${limit}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/notifications`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fcf95ed8c9d22cbf", "name": "Dangling fetch: POST /api/notifications/${id}/read (src/components/notifications/NotificationBell.tsx:44)", "shortDescription": {"text": "Dangling fetch: POST /api/notifications/${id}/read (src/components/notifications/NotificationBell.tsx:44)"}, "fullDescription": {"text": "`src/components/notifications/NotificationBell.tsx:44` calls `POST /api/notifications/${id}/read` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/notifications/<p>/read`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b695f2ddb31cb63c", "name": "Dangling fetch: POST /api/connectors/extension/enable (src/components/connectors/ConnectorCard.tsx:55)", "shortDescription": {"text": "Dangling fetch: POST /api/connectors/extension/enable (src/components/connectors/ConnectorCard.tsx:55)"}, "fullDescription": {"text": "`src/components/connectors/ConnectorCard.tsx:55` calls `POST /api/connectors/extension/enable` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/connectors/extension/enable`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-32e343907158b6e9", "name": "Dangling fetch: DELETE /api/connectors/${connector.platform}/disconnect (src/components/connectors/ConnectorCard.tsx:66)", "shortDescription": {"text": "Dangling fetch: DELETE /api/connectors/${connector.platform}/disconnect (src/components/connectors/ConnectorCard.tsx:66)"}, "fullDescription": {"text": "`src/components/connectors/ConnectorCard.tsx:66` calls `DELETE /api/connectors/${connector.platform}/disconnect` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/connectors/<p>/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-d7cb9062a697001c", "name": "Dangling fetch: POST /api/duo/projects/${projectId}/approve (src/components/duo/PlanReview.tsx:64)", "shortDescription": {"text": "Dangling fetch: POST /api/duo/projects/${projectId}/approve (src/components/duo/PlanReview.tsx:64)"}, "fullDescription": {"text": "`src/components/duo/PlanReview.tsx:64` calls `POST /api/duo/projects/${projectId}/approve` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/duo/projects/<p>/approve`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5ae399806854a1fd", "name": "Dangling fetch: POST /api/profile/verify (src/components/profile/VerifyContact.tsx:17)", "shortDescription": {"text": "Dangling fetch: POST /api/profile/verify (src/components/profile/VerifyContact.tsx:17)"}, "fullDescription": {"text": "`src/components/profile/VerifyContact.tsx:17` calls `POST /api/profile/verify` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/profile/verify`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-969cc9ea84be858f", "name": "Dangling fetch: GET /api/duo/approvals?status=pending&limit=5 (src/components/overlays/CubiQoOverlays.tsx:122)", "shortDescription": {"text": "Dangling fetch: GET /api/duo/approvals?status=pending&limit=5 (src/components/overlays/CubiQoOverlays.tsx:122)"}, "fullDescription": {"text": "`src/components/overlays/CubiQoOverlays.tsx:122` calls `GET /api/duo/approvals?status=pending&limit=5` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/duo/approvals`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-af827d2a50f785b8", "name": "Dangling fetch: GET /api/duo/tasks?status=awaiting_user&limit=5 (src/components/overlays/CubiQoOverlays.tsx:123)", "shortDescription": {"text": "Dangling fetch: GET /api/duo/tasks?status=awaiting_user&limit=5 (src/components/overlays/CubiQoOverlays.tsx:123)"}, "fullDescription": {"text": "`src/components/overlays/CubiQoOverlays.tsx:123` calls `GET /api/duo/tasks?status=awaiting_user&limit=5` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/duo/tasks`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-80b2d2f366fb0140", "name": "Dangling fetch: GET /api/rgy/context-card (src/components/overlays/CubiQoOverlays.tsx:124)", "shortDescription": {"text": "Dangling fetch: GET /api/rgy/context-card (src/components/overlays/CubiQoOverlays.tsx:124)"}, "fullDescription": {"text": "`src/components/overlays/CubiQoOverlays.tsx:124` calls `GET /api/rgy/context-card` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/rgy/context-card`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-74961f1897fa3503", "name": "Dangling fetch: POST /api/duo/approvals/${approval.id}/${action} (src/components/overlays/CubiQoOverlays.tsx:161)", "shortDescription": {"text": "Dangling fetch: POST /api/duo/approvals/${approval.id}/${action} (src/components/overlays/CubiQoOverlays.tsx:161)"}, "fullDescription": {"text": "`src/components/overlays/CubiQoOverlays.tsx:161` calls `POST /api/duo/approvals/${approval.id}/${action}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/duo/approvals/<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-0829fe5b1653011e", "name": "Dangling fetch: POST /api/duo/tasks/${question.id}/answer (src/components/overlays/CubiQoOverlays.tsx:177)", "shortDescription": {"text": "Dangling fetch: POST /api/duo/tasks/${question.id}/answer (src/components/overlays/CubiQoOverlays.tsx:177)"}, "fullDescription": {"text": "`src/components/overlays/CubiQoOverlays.tsx:177` calls `POST /api/duo/tasks/${question.id}/answer` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/duo/tasks/<p>/answer`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e22360202daa8bc6", "name": "Dangling fetch: POST https://api.elevenlabs.io/v1/text-to-speech/${voiceConfig.voiceId} (src/app/api/tts/route.ts:77)", "shortDescription": {"text": "Dangling fetch: POST https://api.elevenlabs.io/v1/text-to-speech/${voiceConfig.voiceId} (src/app/api/tts/route.ts:77)"}, "fullDescription": {"text": "`src/app/api/tts/route.ts:77` calls `POST https://api.elevenlabs.io/v1/text-to-speech/${voiceConfig.voiceId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.elevenlabs.io/v1/text-to-speech/<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-e284919142d9884c", "name": "Dangling fetch: POST https://api.openai.com/v1/audio/transcriptions (src/app/api/tts/transcribe/route.ts:24)", "shortDescription": {"text": "Dangling fetch: POST https://api.openai.com/v1/audio/transcriptions (src/app/api/tts/transcribe/route.ts:24)"}, "fullDescription": {"text": "`src/app/api/tts/transcribe/route.ts:24` calls `POST https://api.openai.com/v1/audio/transcriptions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.openai.com/v1/audio/transcriptions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-81e7fe2bdef84827", "name": "Dangling fetch: POST https://oauth2.googleapis.com/token (src/app/api/connectors/google/callback/route.ts:64)", "shortDescription": {"text": "Dangling fetch: POST https://oauth2.googleapis.com/token (src/app/api/connectors/google/callback/route.ts:64)"}, "fullDescription": {"text": "`src/app/api/connectors/google/callback/route.ts:64` 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-fcbd48e04ab12312", "name": "Dangling fetch: GET https://www.googleapis.com/oauth2/v2/userinfo (src/app/api/connectors/google/callback/route.ts:88)", "shortDescription": {"text": "Dangling fetch: GET https://www.googleapis.com/oauth2/v2/userinfo (src/app/api/connectors/google/callback/route.ts:88)"}, "fullDescription": {"text": "`src/app/api/connectors/google/callback/route.ts:88` 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: fetch\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-c9763ba03a6ea77c", "name": "Dangling fetch: POST https://oauth2.googleapis.com/token (src/app/api/connectors/google/gmail/route.ts:29)", "shortDescription": {"text": "Dangling fetch: POST https://oauth2.googleapis.com/token (src/app/api/connectors/google/gmail/route.ts:29)"}, "fullDescription": {"text": "`src/app/api/connectors/google/gmail/route.ts:29` 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-008a872fbd31519d", "name": "Dangling fetch: GET https://gmail.googleapis.com/gmail/v1/users/me/messages/${messageId}?format=metadata&metadataHeaders", "shortDescription": {"text": "Dangling fetch: GET https://gmail.googleapis.com/gmail/v1/users/me/messages/${messageId}?format=metadata&metadataHeaders=Subject&metadataHeaders=From&metadataHeaders=Date (src/app/api/connectors/google/gmail/route.ts:69)"}, "fullDescription": {"text": "`src/app/api/connectors/google/gmail/route.ts:69` calls `GET https://gmail.googleapis.com/gmail/v1/users/me/messages/${messageId}?format=metadata&metadataHeaders=Subject&metadataHeaders=From&metadataHeaders=Date` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\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-96da6c94650f759e", "name": "Dangling fetch: GET https://gmail.googleapis.com/gmail/v1/users/me/messages?maxResults=${maxResults}&labelIds=INBOX (src", "shortDescription": {"text": "Dangling fetch: GET https://gmail.googleapis.com/gmail/v1/users/me/messages?maxResults=${maxResults}&labelIds=INBOX (src/app/api/connectors/google/gmail/route.ts:79)"}, "fullDescription": {"text": "`src/app/api/connectors/google/gmail/route.ts:79` calls `GET https://gmail.googleapis.com/gmail/v1/users/me/messages?maxResults=${maxResults}&labelIds=INBOX` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/gmail.googleapis.com/gmail/v1/users/me/messages`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-246f9f65fe5d1b6d", "name": "Dangling fetch: GET https://gmail.googleapis.com/gmail/v1/users/me/messages/${m.id}?format=metadata&metadataHeaders=Subj", "shortDescription": {"text": "Dangling fetch: GET https://gmail.googleapis.com/gmail/v1/users/me/messages/${m.id}?format=metadata&metadataHeaders=Subject&metadataHeaders=From&metadataHeaders=Date (src/app/api/connectors/google/gmail/route.ts:91)"}, "fullDescription": {"text": "`src/app/api/connectors/google/gmail/route.ts:91` calls `GET https://gmail.googleapis.com/gmail/v1/users/me/messages/${m.id}?format=metadata&metadataHeaders=Subject&metadataHeaders=From&metadataHeaders=Date` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\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-a674af3bd3c426a8", "name": "Dangling fetch: POST https://oauth2.googleapis.com/token (src/app/api/connectors/google/calendar/route.ts:28)", "shortDescription": {"text": "Dangling fetch: POST https://oauth2.googleapis.com/token (src/app/api/connectors/google/calendar/route.ts:28)"}, "fullDescription": {"text": "`src/app/api/connectors/google/calendar/route.ts:28` 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-f2227a30faacfc75", "name": "Dangling fetch: GET https://www.googleapis.com/calendar/v3/calendars/primary/events?timeMin=${now}&timeMax=${end}&single", "shortDescription": {"text": "Dangling fetch: GET https://www.googleapis.com/calendar/v3/calendars/primary/events?timeMin=${now}&timeMax=${end}&singleEvents=true&orderBy=startTime&maxResults=20 (src/app/api/connectors/google/calendar/route.ts:60)"}, "fullDescription": {"text": "`src/app/api/connectors/google/calendar/route.ts:60` calls `GET https://www.googleapis.com/calendar/v3/calendars/primary/events?timeMin=${now}&timeMax=${end}&singleEvents=true&orderBy=startTime&maxResults=20` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/www.googleapis.com/calendar/v3/calendars/primary/events`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2f2d7eb0bdfdcc99", "name": "Dangling fetch: POST https://www.googleapis.com/calendar/v3/calendars/primary/events?sendUpdates=all (src/app/api/connec", "shortDescription": {"text": "Dangling fetch: POST https://www.googleapis.com/calendar/v3/calendars/primary/events?sendUpdates=all (src/app/api/connectors/google/calendar/route.ts:110)"}, "fullDescription": {"text": "`src/app/api/connectors/google/calendar/route.ts:110` calls `POST https://www.googleapis.com/calendar/v3/calendars/primary/events?sendUpdates=all` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/www.googleapis.com/calendar/v3/calendars/primary/events`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-aaac4b7aa60ecc0e", "name": "Dangling fetch: POST https://${shop}/admin/oauth/access_token (src/app/api/connectors/shopify/callback/route.ts:60)", "shortDescription": {"text": "Dangling fetch: POST https://${shop}/admin/oauth/access_token (src/app/api/connectors/shopify/callback/route.ts:60)"}, "fullDescription": {"text": "`src/app/api/connectors/shopify/callback/route.ts:60` calls `POST https://${shop}/admin/oauth/access_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:/<p>/admin/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-a8ce4d1d77ca65a2", "name": "Dangling fetch: POST https://api.runpod.ai/v2/${RUNPOD_ENDPOINT_ID}/run (src/app/api/image/route.ts:96)", "shortDescription": {"text": "Dangling fetch: POST https://api.runpod.ai/v2/${RUNPOD_ENDPOINT_ID}/run (src/app/api/image/route.ts:96)"}, "fullDescription": {"text": "`src/app/api/image/route.ts:96` calls `POST https://api.runpod.ai/v2/${RUNPOD_ENDPOINT_ID}/run` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.runpod.ai/v2/<p>/run`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-37c3e31fa8cac24f", "name": "Dangling fetch: GET https://api.runpod.ai/v2/${RUNPOD_ENDPOINT_ID}/status/${jobId} (src/app/api/image/route.ts:117)", "shortDescription": {"text": "Dangling fetch: GET https://api.runpod.ai/v2/${RUNPOD_ENDPOINT_ID}/status/${jobId} (src/app/api/image/route.ts:117)"}, "fullDescription": {"text": "`src/app/api/image/route.ts:117` calls `GET https://api.runpod.ai/v2/${RUNPOD_ENDPOINT_ID}/status/${jobId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.runpod.ai/v2/<p>/status/<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-5c545e38ed8d1d9c", "name": "Dangling fetch: POST https://api.openai.com/v1/chat/completions (src/app/api/agent/greet/route.ts:47)", "shortDescription": {"text": "Dangling fetch: POST https://api.openai.com/v1/chat/completions (src/app/api/agent/greet/route.ts:47)"}, "fullDescription": {"text": "`src/app/api/agent/greet/route.ts:47` calls `POST https://api.openai.com/v1/chat/completions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.openai.com/v1/chat/completions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-aed07bf945b343fd", "name": "Dangling fetch: POST https://api.openai.com/v1/chat/completions (src/app/api/agent/suggest/route.ts:48)", "shortDescription": {"text": "Dangling fetch: POST https://api.openai.com/v1/chat/completions (src/app/api/agent/suggest/route.ts:48)"}, "fullDescription": {"text": "`src/app/api/agent/suggest/route.ts:48` calls `POST https://api.openai.com/v1/chat/completions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.openai.com/v1/chat/completions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-144b59eadec29d7b", "name": "Dangling fetch: GET https://nominatim.openstreetmap.org/reverse?format=jsonv2&lat=${lat}&lon=${lon} (src/app/api/agent/l", "shortDescription": {"text": "Dangling fetch: GET https://nominatim.openstreetmap.org/reverse?format=jsonv2&lat=${lat}&lon=${lon} (src/app/api/agent/location/route.ts:51)"}, "fullDescription": {"text": "`src/app/api/agent/location/route.ts:51` calls `GET https://nominatim.openstreetmap.org/reverse?format=jsonv2&lat=${lat}&lon=${lon}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/nominatim.openstreetmap.org/reverse`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-be8ecdd67863cb1d", "name": "Dangling fetch: POST https://api.deepgram.com/v1/listen?model=nova-3&smart_format=true&language=en (src/app/api/voice/ro", "shortDescription": {"text": "Dangling fetch: POST https://api.deepgram.com/v1/listen?model=nova-3&smart_format=true&language=en (src/app/api/voice/route.ts:41)"}, "fullDescription": {"text": "`src/app/api/voice/route.ts:41` calls `POST https://api.deepgram.com/v1/listen?model=nova-3&smart_format=true&language=en` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.deepgram.com/v1/listen`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f15b1cefbaba9829", "name": "Dangling fetch: GET https://api.vercel.com/v6/deployments?projectId=${VERCEL_PROJECT_ID}&limit=${limit}${teamQ} (src/app", "shortDescription": {"text": "Dangling fetch: GET https://api.vercel.com/v6/deployments?projectId=${VERCEL_PROJECT_ID}&limit=${limit}${teamQ} (src/app/api/self-heal/route.ts:54)"}, "fullDescription": {"text": "`src/app/api/self-heal/route.ts:54` calls `GET https://api.vercel.com/v6/deployments?projectId=${VERCEL_PROJECT_ID}&limit=${limit}${teamQ}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.vercel.com/v6/deployments`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c61986555d1e9d84", "name": "Dangling fetch: GET https://api.vercel.com/v2/deployments/${deploymentId}/events${teamQ} (src/app/api/self-heal/route.ts", "shortDescription": {"text": "Dangling fetch: GET https://api.vercel.com/v2/deployments/${deploymentId}/events${teamQ} (src/app/api/self-heal/route.ts:66)"}, "fullDescription": {"text": "`src/app/api/self-heal/route.ts:66` calls `GET https://api.vercel.com/v2/deployments/${deploymentId}/events${teamQ}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.vercel.com/v2/deployments/<p>/events/<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-f4bc6b4b0a3d6bf5", "name": "Dangling fetch: POST https://api.github.com/repos/${GITHUB_REPO}/issues (src/app/api/self-heal/route.ts:87)", "shortDescription": {"text": "Dangling fetch: POST https://api.github.com/repos/${GITHUB_REPO}/issues (src/app/api/self-heal/route.ts:87)"}, "fullDescription": {"text": "`src/app/api/self-heal/route.ts:87` calls `POST https://api.github.com/repos/${GITHUB_REPO}/issues` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.github.com/repos/<p>/issues`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a7f70aa40423b7f9", "name": "Dangling fetch: POST https://oauth2.googleapis.com/token (src/app/api/admin/analytics/google/route.ts:63)", "shortDescription": {"text": "Dangling fetch: POST https://oauth2.googleapis.com/token (src/app/api/admin/analytics/google/route.ts:63)"}, "fullDescription": {"text": "`src/app/api/admin/analytics/google/route.ts:63` 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-45d40497b481a8ce", "name": "Dangling fetch: POST https://analyticsdata.googleapis.com/v1beta/${propertyId}:runReport (src/app/api/admin/analytics/go", "shortDescription": {"text": "Dangling fetch: POST https://analyticsdata.googleapis.com/v1beta/${propertyId}:runReport (src/app/api/admin/analytics/google/route.ts:114)"}, "fullDescription": {"text": "`src/app/api/admin/analytics/google/route.ts:114` calls `POST https://analyticsdata.googleapis.com/v1beta/${propertyId}:runReport` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/analyticsdata.googleapis.com/v1beta/<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-c4cb1cf085d0f106", "name": "Dangling fetch: POST https://api.openai.com/v1/chat/completions (src/app/api/cron/run-schedules/route.ts:80)", "shortDescription": {"text": "Dangling fetch: POST https://api.openai.com/v1/chat/completions (src/app/api/cron/run-schedules/route.ts:80)"}, "fullDescription": {"text": "`src/app/api/cron/run-schedules/route.ts:80` calls `POST https://api.openai.com/v1/chat/completions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.openai.com/v1/chat/completions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-408122f7c3d234f5", "name": "Dangling fetch: POST https://api.openai.com/v1/chat/completions (src/app/api/cron/daily-digest/route.ts:54)", "shortDescription": {"text": "Dangling fetch: POST https://api.openai.com/v1/chat/completions (src/app/api/cron/daily-digest/route.ts:54)"}, "fullDescription": {"text": "`src/app/api/cron/daily-digest/route.ts:54` calls `POST https://api.openai.com/v1/chat/completions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.openai.com/v1/chat/completions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-51275aa4b816e463", "name": "Dangling fetch: POST https://api.openai.com/v1/chat/completions (src/app/api/cron/job-scan/route.ts:124)", "shortDescription": {"text": "Dangling fetch: POST https://api.openai.com/v1/chat/completions (src/app/api/cron/job-scan/route.ts:124)"}, "fullDescription": {"text": "`src/app/api/cron/job-scan/route.ts:124` calls `POST https://api.openai.com/v1/chat/completions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.openai.com/v1/chat/completions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3493f623b089742f", "name": "Dangling fetch: POST https://api.elevenlabs.io/v1/text-to-speech/${voiceId} (src/app/api/voice-cue/route.ts:44)", "shortDescription": {"text": "Dangling fetch: POST https://api.elevenlabs.io/v1/text-to-speech/${voiceId} (src/app/api/voice-cue/route.ts:44)"}, "fullDescription": {"text": "`src/app/api/voice-cue/route.ts:44` calls `POST https://api.elevenlabs.io/v1/text-to-speech/${voiceId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.elevenlabs.io/v1/text-to-speech/<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-35cf104bdadd0bf2", "name": "Dangling fetch: POST https://api.tavily.com/search (src/app/api/_lib/web-search.ts:21)", "shortDescription": {"text": "Dangling fetch: POST https://api.tavily.com/search (src/app/api/_lib/web-search.ts:21)"}, "fullDescription": {"text": "`src/app/api/_lib/web-search.ts:21` calls `POST https://api.tavily.com/search` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.tavily.com/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-8152b0d1bff3143c", "name": "Dangling fetch: GET https://api.search.brave.com/res/v1/web/search?q=${encodeURIComponent(query)}&count=${max} (src/app/", "shortDescription": {"text": "Dangling fetch: GET https://api.search.brave.com/res/v1/web/search?q=${encodeURIComponent(query)}&count=${max} (src/app/api/_lib/web-search.ts:45)"}, "fullDescription": {"text": "`src/app/api/_lib/web-search.ts:45` calls `GET https://api.search.brave.com/res/v1/web/search?q=${encodeURIComponent(query)}&count=${max}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.search.brave.com/res/v1/web/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-ee58cc8b016c1cd9", "name": "Dangling fetch: POST https://google.serper.dev/search (src/app/api/_lib/web-search.ts:67)", "shortDescription": {"text": "Dangling fetch: POST https://google.serper.dev/search (src/app/api/_lib/web-search.ts:67)"}, "fullDescription": {"text": "`src/app/api/_lib/web-search.ts:67` calls `POST https://google.serper.dev/search` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/google.serper.dev/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-f892e080023cfce8", "name": "Dangling fetch: POST https://api.linkedin.com/v2/ugcPosts (src/app/api/_lib/social-api-client.ts:55)", "shortDescription": {"text": "Dangling fetch: POST https://api.linkedin.com/v2/ugcPosts (src/app/api/_lib/social-api-client.ts:55)"}, "fullDescription": {"text": "`src/app/api/_lib/social-api-client.ts:55` 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: fetch\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-0160ba70954acb97", "name": "Dangling fetch: POST https://api.twitter.com/2/tweets (src/app/api/_lib/social-api-client.ts:94)", "shortDescription": {"text": "Dangling fetch: POST https://api.twitter.com/2/tweets (src/app/api/_lib/social-api-client.ts:94)"}, "fullDescription": {"text": "`src/app/api/_lib/social-api-client.ts:94` calls `POST https://api.twitter.com/2/tweets` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.twitter.com/<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-fc71cc88a8990744", "name": "Dangling fetch: POST https://graph.facebook.com/v19.0/${accountId}/media?image_url=${encodeURIComponent(mediaUrl)}&capti", "shortDescription": {"text": "Dangling fetch: POST https://graph.facebook.com/v19.0/${accountId}/media?image_url=${encodeURIComponent(mediaUrl)}&caption=${encodeURIComponent(payload.content)}&access_token=${token} (src/app/api/_lib/social-api-client.ts:140)"}, "fullDescription": {"text": "`src/app/api/_lib/social-api-client.ts:140` calls `POST https://graph.facebook.com/v19.0/${accountId}/media?image_url=${encodeURIComponent(mediaUrl)}&caption=${encodeURIComponent(payload.content)}&access_token=${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:/graph.facebook.com/v19.0/<p>/media`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e01a477f27717491", "name": "Dangling fetch: POST https://graph.facebook.com/v19.0/${accountId}/media_publish?creation_id=${creationId}&access_token=", "shortDescription": {"text": "Dangling fetch: POST https://graph.facebook.com/v19.0/${accountId}/media_publish?creation_id=${creationId}&access_token=${token} (src/app/api/_lib/social-api-client.ts:151)"}, "fullDescription": {"text": "`src/app/api/_lib/social-api-client.ts:151` calls `POST https://graph.facebook.com/v19.0/${accountId}/media_publish?creation_id=${creationId}&access_token=${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:/graph.facebook.com/v19.0/<p>/media_publish`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3727a9c73ac24235", "name": "Dangling fetch: POST https://graph.threads.net/v1.0/${userId}/threads?media_type=TEXT&text=${encodeURIComponent(payload.", "shortDescription": {"text": "Dangling fetch: POST https://graph.threads.net/v1.0/${userId}/threads?media_type=TEXT&text=${encodeURIComponent(payload.content)}&access_token=${token} (src/app/api/_lib/social-api-client.ts:180)"}, "fullDescription": {"text": "`src/app/api/_lib/social-api-client.ts:180` calls `POST https://graph.threads.net/v1.0/${userId}/threads?media_type=TEXT&text=${encodeURIComponent(payload.content)}&access_token=${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:/graph.threads.net/v1.0/<p>/threads`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-40a9ebe2e8cb6c46", "name": "Dangling fetch: POST https://graph.threads.net/v1.0/${userId}/threads_publish?creation_id=${creationId}&access_token=${t", "shortDescription": {"text": "Dangling fetch: POST https://graph.threads.net/v1.0/${userId}/threads_publish?creation_id=${creationId}&access_token=${token} (src/app/api/_lib/social-api-client.ts:191)"}, "fullDescription": {"text": "`src/app/api/_lib/social-api-client.ts:191` calls `POST https://graph.threads.net/v1.0/${userId}/threads_publish?creation_id=${creationId}&access_token=${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:/graph.threads.net/v1.0/<p>/threads_publish`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8fc83347b130358d", "name": "Dangling fetch: GET https://${storeUrl}/admin/api/${SHOPIFY_API_VERSION}${path} (src/app/api/_lib/shopify-pod-operations", "shortDescription": {"text": "Dangling fetch: GET https://${storeUrl}/admin/api/${SHOPIFY_API_VERSION}${path} (src/app/api/_lib/shopify-pod-operations.ts:301)"}, "fullDescription": {"text": "`src/app/api/_lib/shopify-pod-operations.ts:301` calls `GET https://${storeUrl}/admin/api/${SHOPIFY_API_VERSION}${path}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/<p>/admin/api/<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-90756c54a673c95c", "name": "Dangling fetch: GET https://${storeUrl}/admin/api/${SHOPIFY_API_VERSION}/shop.json (src/app/api/_lib/shopify-pod-operati", "shortDescription": {"text": "Dangling fetch: GET https://${storeUrl}/admin/api/${SHOPIFY_API_VERSION}/shop.json (src/app/api/_lib/shopify-pod-operations.ts:589)"}, "fullDescription": {"text": "`src/app/api/_lib/shopify-pod-operations.ts:589` calls `GET https://${storeUrl}/admin/api/${SHOPIFY_API_VERSION}/shop.json` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/<p>/admin/api/<p>/shop.json`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1352951c858d0901", "name": "Dangling fetch: POST https://api.openai.com/v1/chat/completions (src/app/api/_lib/llm-tailoring.ts:78)", "shortDescription": {"text": "Dangling fetch: POST https://api.openai.com/v1/chat/completions (src/app/api/_lib/llm-tailoring.ts:78)"}, "fullDescription": {"text": "`src/app/api/_lib/llm-tailoring.ts:78` calls `POST https://api.openai.com/v1/chat/completions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.openai.com/v1/chat/completions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b929524f7024f40d", "name": "Dangling fetch: POST https://api.openai.com/v1/chat/completions (src/app/api/_lib/context-engine.ts:89)", "shortDescription": {"text": "Dangling fetch: POST https://api.openai.com/v1/chat/completions (src/app/api/_lib/context-engine.ts:89)"}, "fullDescription": {"text": "`src/app/api/_lib/context-engine.ts:89` calls `POST https://api.openai.com/v1/chat/completions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.openai.com/v1/chat/completions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b87a8bd55c9e99e3", "name": "Dangling fetch: GET https://${domain}/admin/api/${SHOPIFY_API_VERSION}${path} (src/app/api/_lib/shopify-client.ts:85)", "shortDescription": {"text": "Dangling fetch: GET https://${domain}/admin/api/${SHOPIFY_API_VERSION}${path} (src/app/api/_lib/shopify-client.ts:85)"}, "fullDescription": {"text": "`src/app/api/_lib/shopify-client.ts:85` calls `GET https://${domain}/admin/api/${SHOPIFY_API_VERSION}${path}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/<p>/admin/api/<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-0c42f27bd2e59221", "name": "Dangling fetch: POST https://api.anthropic.com/v1/messages (src/app/api/compare/route.ts:123)", "shortDescription": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (src/app/api/compare/route.ts:123)"}, "fullDescription": {"text": "`src/app/api/compare/route.ts:123` calls `POST https://api.anthropic.com/v1/messages` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.anthropic.com/v1/messages`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-207312fe0e21615f", "name": "Dangling fetch: POST https://api.openai.com/v1/chat/completions (src/app/api/perception/vision/route.ts:205)", "shortDescription": {"text": "Dangling fetch: POST https://api.openai.com/v1/chat/completions (src/app/api/perception/vision/route.ts:205)"}, "fullDescription": {"text": "`src/app/api/perception/vision/route.ts:205` calls `POST https://api.openai.com/v1/chat/completions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.openai.com/v1/chat/completions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fba7fdab071eba87", "name": "Dangling fetch: POST /api/agent/stream (src/app/(app)/duo/[id]/page.tsx:393)", "shortDescription": {"text": "Dangling fetch: POST /api/agent/stream (src/app/(app)/duo/[id]/page.tsx:393)"}, "fullDescription": {"text": "`src/app/(app)/duo/[id]/page.tsx:393` calls `POST /api/agent/stream` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/agent/stream`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ba9cd8351ad2e640", "name": "Dangling fetch: POST /api/agent/stream (src/app/(app)/chat/page.tsx:136)", "shortDescription": {"text": "Dangling fetch: POST /api/agent/stream (src/app/(app)/chat/page.tsx:136)"}, "fullDescription": {"text": "`src/app/(app)/chat/page.tsx:136` calls `POST /api/agent/stream` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/agent/stream`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2e21a6aeb86c9b07", "name": "Dangling fetch: POST https://api.twilio.com/2010-04-01/Accounts/${TWILIO_SID}/Messages.json (src/lib/comms/sms.ts:36)", "shortDescription": {"text": "Dangling fetch: POST https://api.twilio.com/2010-04-01/Accounts/${TWILIO_SID}/Messages.json (src/lib/comms/sms.ts:36)"}, "fullDescription": {"text": "`src/lib/comms/sms.ts:36` calls `POST https://api.twilio.com/2010-04-01/Accounts/${TWILIO_SID}/Messages.json` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.twilio.com/2010-04-01/accounts/<p>/messages.json`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5ffd30ff8fb3d9a2", "name": "Dangling fetch: POST /api/analytics/funnel (src/lib/analytics/funnel-tracker.ts:43)", "shortDescription": {"text": "Dangling fetch: POST /api/analytics/funnel (src/lib/analytics/funnel-tracker.ts:43)"}, "fullDescription": {"text": "`src/lib/analytics/funnel-tracker.ts:43` calls `POST /api/analytics/funnel` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/analytics/funnel`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-91463d51dc7f0d02", "name": "Dangling fetch: POST /api/analytics/funnel (src/lib/analytics/funnel-tracker.ts:59)", "shortDescription": {"text": "Dangling fetch: POST /api/analytics/funnel (src/lib/analytics/funnel-tracker.ts:59)"}, "fullDescription": {"text": "`src/lib/analytics/funnel-tracker.ts:59` calls `POST /api/analytics/funnel` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/analytics/funnel`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f657ad7476d47b08", "name": "Dangling fetch: POST https://api.openai.com/v1/chat/completions (src/lib/memory/compressor.ts:26)", "shortDescription": {"text": "Dangling fetch: POST https://api.openai.com/v1/chat/completions (src/lib/memory/compressor.ts:26)"}, "fullDescription": {"text": "`src/lib/memory/compressor.ts:26` calls `POST https://api.openai.com/v1/chat/completions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.openai.com/v1/chat/completions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ded2eb5e5b50b7f0", "name": "Dangling fetch: POST /api/surfaces/sync (src/lib/surfaces/offline-queue.ts:97)", "shortDescription": {"text": "Dangling fetch: POST /api/surfaces/sync (src/lib/surfaces/offline-queue.ts:97)"}, "fullDescription": {"text": "`src/lib/surfaces/offline-queue.ts:97` calls `POST /api/surfaces/sync` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/surfaces/sync`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9339133595676148", "name": "Dangling fetch: POST https://${HOST}${path} (src/lib/commerce/amazon-pa.ts:83)", "shortDescription": {"text": "Dangling fetch: POST https://${HOST}${path} (src/lib/commerce/amazon-pa.ts:83)"}, "fullDescription": {"text": "`src/lib/commerce/amazon-pa.ts:83` calls `POST https://${HOST}${path}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/<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-5d36af6ae6940841", "name": "Dangling fetch: GET /api/duo/stream/${projectId} (src/hooks/useDuoStream.ts:34)", "shortDescription": {"text": "Dangling fetch: GET /api/duo/stream/${projectId} (src/hooks/useDuoStream.ts:34)"}, "fullDescription": {"text": "`src/hooks/useDuoStream.ts:34` calls `GET /api/duo/stream/${projectId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/duo/stream/<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-918d728ffb0efc15", "name": "Dangling fetch: POST /api/connectors/plaid/link-token (src/hooks/connectors/usePlaidLink.ts:18)", "shortDescription": {"text": "Dangling fetch: POST /api/connectors/plaid/link-token (src/hooks/connectors/usePlaidLink.ts:18)"}, "fullDescription": {"text": "`src/hooks/connectors/usePlaidLink.ts:18` calls `POST /api/connectors/plaid/link-token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/connectors/plaid/link-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-dae72e3d13a20b73", "name": "Dangling fetch: POST /api/connectors/plaid/exchange (src/hooks/connectors/usePlaidLink.ts:37)", "shortDescription": {"text": "Dangling fetch: POST /api/connectors/plaid/exchange (src/hooks/connectors/usePlaidLink.ts:37)"}, "fullDescription": {"text": "`src/hooks/connectors/usePlaidLink.ts:37` calls `POST /api/connectors/plaid/exchange` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/connectors/plaid/exchange`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7a9df70922c224b3", "name": "Dangling fetch: POST /api/connectors/api-key/save (src/hooks/connectors/useApiKeySubmit.ts:16)", "shortDescription": {"text": "Dangling fetch: POST /api/connectors/api-key/save (src/hooks/connectors/useApiKeySubmit.ts:16)"}, "fullDescription": {"text": "`src/hooks/connectors/useApiKeySubmit.ts:16` calls `POST /api/connectors/api-key/save` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/connectors/api-key/save`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-76437ca2a641b7ee", "name": "Dangling fetch: POST /api/composio/connect (src/hooks/connectors/useOAuthPopup.ts:51)", "shortDescription": {"text": "Dangling fetch: POST /api/composio/connect (src/hooks/connectors/useOAuthPopup.ts:51)"}, "fullDescription": {"text": "`src/hooks/connectors/useOAuthPopup.ts:51` calls `POST /api/composio/connect` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/composio/connect`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-081d3e82069ba131", "name": "Dangling fetch: POST /api/connectors/oauth/start (src/hooks/connectors/useOAuthPopup.ts:61)", "shortDescription": {"text": "Dangling fetch: POST /api/connectors/oauth/start (src/hooks/connectors/useOAuthPopup.ts:61)"}, "fullDescription": {"text": "`src/hooks/connectors/useOAuthPopup.ts:61` calls `POST /api/connectors/oauth/start` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/connectors/oauth/start`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-813565f327cdd5d4", "name": "Dangling fetch: GET /api/connectors (src/hooks/connectors/useConnectors.ts:21)", "shortDescription": {"text": "Dangling fetch: GET /api/connectors (src/hooks/connectors/useConnectors.ts:21)"}, "fullDescription": {"text": "`src/hooks/connectors/useConnectors.ts:21` calls `GET /api/connectors` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/connectors`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5baa8971ebe192a1", "name": "Unused endpoint: GET /", "shortDescription": {"text": "Unused endpoint: GET /"}, "fullDescription": {"text": "`backend/server.py` 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-ee07d6cd4eca0396", "name": "Unused endpoint: POST /edit-file", "shortDescription": {"text": "Unused endpoint: POST /edit-file"}, "fullDescription": {"text": "`frontend/plugins/visual-edits/dev-server-setup.js` declares `POST /edit-file` 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-0d63ec445402501a", "name": "Unused endpoint: OPTIONS /edit-file", "shortDescription": {"text": "Unused endpoint: OPTIONS /edit-file"}, "fullDescription": {"text": "`frontend/plugins/visual-edits/dev-server-setup.js` declares `OPTIONS /edit-file` 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/21089"}, "properties": {"repository": "thecubiqo/thecubiqo", "repoUrl": "https://github.com/thecubiqo/thecubiqo", "branch": "main"}, "results": [{"ruleId": "scanner-c6373c51e1d0a6c6", "level": "note", "message": {"text": "Possibly dead Python function: call_claude"}, "properties": {"repobilityId": "5ba9aa85ace7a694", "scanner": "scanner-primary", "fingerprint": "c6373c51e1d0a6c6", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/server.py:89"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-39b423487eb42312", "level": "note", "message": {"text": "Possibly dead Python function: call_openai"}, "properties": {"repobilityId": "b7b1498a4d1d98ec", "scanner": "scanner-primary", "fingerprint": "39b423487eb42312", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/server.py:107"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-527654b2a47916f9", "level": "note", "message": {"text": "Possibly dead Python function: call_openrouter"}, "properties": {"repobilityId": "b36a4b01ee074aea", "scanner": "scanner-primary", "fingerprint": "527654b2a47916f9", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/server.py:126"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7de1b6f313cd3e74", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/src/App.js:4578"}, "properties": {"repobilityId": "63044257a4e48770", "scanner": "scanner-primary", "fingerprint": "7de1b6f313cd3e74", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-14b0fb22e16cd1a3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/src/components/PlasmaField.jsx:355"}, "properties": {"repobilityId": "7f377ec4ee8ac8a0", "scanner": "scanner-primary", "fingerprint": "14b0fb22e16cd1a3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fc451b8c1157a288", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 frontend/src/components/DuoModeDashboard.js:726"}, "properties": {"repobilityId": "4479cbed97a92b05", "scanner": "scanner-primary", "fingerprint": "fc451b8c1157a288", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-b317165de2b2ddbb", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 frontend/src/components/DuoModeDashboard.js:535"}, "properties": {"repobilityId": "daa5df3494b09dae", "scanner": "scanner-primary", "fingerprint": "b317165de2b2ddbb", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-9636df043e4cf997", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 frontend/src/components/JobPipeline.js:403"}, "properties": {"repobilityId": "c1a3572eccc5bcbf", "scanner": "scanner-primary", "fingerprint": "9636df043e4cf997", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-2f89fc32b83e2274", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/plugins/health-check/health-endpoints.js:24"}, "properties": {"repobilityId": "3a93cb59aad69c30", "scanner": "scanner-primary", "fingerprint": "2f89fc32b83e2274", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c6d7a5cb68779cf8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/plugins/visual-edits/dev-server-setup.js:426"}, "properties": {"repobilityId": "3d1caa15580ffb2f", "scanner": "scanner-primary", "fingerprint": "c6d7a5cb68779cf8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8731324a5e3a09f7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 cubiqo-plasma-export/components/PlasmaField.jsx:353"}, "properties": {"repobilityId": "fd487c65ad1e6487", "scanner": "scanner-primary", "fingerprint": "8731324a5e3a09f7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f90d2958fd6950b0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/connectors/ConnectorCard.tsx:84"}, "properties": {"repobilityId": "0222b0d3bbccbdc2", "scanner": "scanner-primary", "fingerprint": "f90d2958fd6950b0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c3d4e94a165089c0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/duo/ArtifactPane.tsx:101"}, "properties": {"repobilityId": "de3549d8fa72d095", "scanner": "scanner-primary", "fingerprint": "c3d4e94a165089c0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-03cf5b0f819edd53", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/layout.tsx:40"}, "properties": {"repobilityId": "0d72350965068f5b", "scanner": "scanner-primary", "fingerprint": "03cf5b0f819edd53", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-d15414a1b0cb3b1d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(app)/settings/page.tsx:165"}, "properties": {"repobilityId": "a723d442b44e72b2", "scanner": "scanner-primary", "fingerprint": "d15414a1b0cb3b1d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b7f700ca96bd4eba", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(app)/duo/page.tsx:150"}, "properties": {"repobilityId": "701bed4d6c737cd0", "scanner": "scanner-primary", "fingerprint": "b7f700ca96bd4eba", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c720524d1468fd50", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(app)/duo/[id]/page.tsx:486"}, "properties": {"repobilityId": "6d3f255b7f4a09f8", "scanner": "scanner-primary", "fingerprint": "c720524d1468fd50", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a0ad09a55794a076", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(app)/_components/AppShell.tsx:248"}, "properties": {"repobilityId": "1f31ff4c72314811", "scanner": "scanner-primary", "fingerprint": "a0ad09a55794a076", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-15e73e0feed60d5c", "level": "note", "message": {"text": "\"active\" state uses light bg in a dark theme \u2014 src/app/(app)/_components/AppShell.tsx:81"}, "properties": {"repobilityId": "d253ea90ca334f10", "scanner": "scanner-primary", "fingerprint": "15e73e0feed60d5c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.active-light-bg"]}}, {"ruleId": "scanner-047a13b3fc23a879", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(app)/_components/RightPanel.tsx:119"}, "properties": {"repobilityId": "114df4441bd84ea7", "scanner": "scanner-primary", "fingerprint": "047a13b3fc23a879", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ce7db403b042ad65", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/comms/sms.ts:28"}, "properties": {"repobilityId": "1e2bc3e3b2cda845", "scanner": "scanner-primary", "fingerprint": "ce7db403b042ad65", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-05f8f8afecbe91f1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/email/send.ts:37"}, "properties": {"repobilityId": "303f370a84e0c7a1", "scanner": "scanner-primary", "fingerprint": "05f8f8afecbe91f1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-811a0231bc4b64d0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/crypto/generate-keys.ts:8"}, "properties": {"repobilityId": "85c4c37d5e38ba63", "scanner": "scanner-primary", "fingerprint": "811a0231bc4b64d0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8b88237c8a94e6b6", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in frontend/src/App.js:1000"}, "properties": {"repobilityId": "de91f08bdec2fec9", "scanner": "scanner-primary", "fingerprint": "8b88237c8a94e6b6", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/src/App.js"}, "region": {"startLine": 1000}}}]}, {"ruleId": "scanner-6c51d9ea157db5a4", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in frontend/src/components/DuoModeDashboard.js:535"}, "properties": {"repobilityId": "a628b5939b48008a", "scanner": "scanner-primary", "fingerprint": "6c51d9ea157db5a4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/src/components/DuoModeDashboard.js"}, "region": {"startLine": 535}}}]}, {"ruleId": "scanner-8e74dc0961251881", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in frontend/plugins/visual-edits/dev-server-setup.js:6"}, "properties": {"repobilityId": "412de0b15b4be842", "scanner": "scanner-primary", "fingerprint": "8e74dc0961251881", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/plugins/visual-edits/dev-server-setup.js"}, "region": {"startLine": 6}}}]}, {"ruleId": "scanner-2bc0d3be99b15fd9", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/layout.tsx:40"}, "properties": {"repobilityId": "0bca654fa2052eb0", "scanner": "scanner-primary", "fingerprint": "2bc0d3be99b15fd9", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/layout.tsx"}, "region": {"startLine": 40}}}]}, {"ruleId": "scanner-a495ac15a71b55af", "level": "error", "message": {"text": "Insecure pattern 'private_key_in_repo' in src/app/api/admin/analytics/google/route.ts:49"}, "properties": {"repobilityId": "56d3091ee29c4e95", "scanner": "scanner-primary", "fingerprint": "a495ac15a71b55af", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["owasp", "private_key_in_repo"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/api/admin/analytics/google/route.ts"}, "region": {"startLine": 49}}}]}, {"ruleId": "scanner-9529b2974fde5996", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in src/lib/surfaces/heartbeat-client.ts:34"}, "properties": {"repobilityId": "054e93732b7547b8", "scanner": "scanner-primary", "fingerprint": "9529b2974fde5996", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/lib/surfaces/heartbeat-client.ts"}, "region": {"startLine": 34}}}]}, {"ruleId": "scanner-179f34bc9d709f26", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in src/server/legacy/converse.cjs:588"}, "properties": {"repobilityId": "093ae692249a4032", "scanner": "scanner-primary", "fingerprint": "179f34bc9d709f26", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/server/legacy/converse.cjs"}, "region": {"startLine": 588}}}]}, {"ruleId": "scanner-4601e3ad3bb28677", "level": "warning", "message": {"text": "No CI/CD pipelines detected"}, "properties": {"repobilityId": "c3ee439bce2bc51e", "scanner": "scanner-primary", "fingerprint": "4601e3ad3bb28677", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-ba3fda6ba0c745dd", "level": "note", "message": {"text": "Very large file: frontend/src/App.js (6600 lines)"}, "properties": {"repobilityId": "d9c80c83c9a6223b", "scanner": "scanner-primary", "fingerprint": "ba3fda6ba0c745dd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-4a6411f2715a2a4e", "level": "note", "message": {"text": "Very large file: frontend/plugins/visual-edits/babel-metadata-plugin.js (2159 lines)"}, "properties": {"repobilityId": "7859d2a04876d660", "scanner": "scanner-primary", "fingerprint": "4a6411f2715a2a4e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-81fb75fd93a4ddd1", "level": "note", "message": {"text": "Very large file: scripts/run-phase-ab-migrations.mjs (1447 lines)"}, "properties": {"repobilityId": "8c39a81f19d9be4a", "scanner": "scanner-primary", "fingerprint": "81fb75fd93a4ddd1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-172dd331b04edd71", "level": "note", "message": {"text": "Very large file: scripts/verify-cqai-e2e.mjs (2476 lines)"}, "properties": {"repobilityId": "8ef741033c26ff9e", "scanner": "scanner-primary", "fingerprint": "172dd331b04edd71", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-5f6f4ff73ddf6fa7", "level": "note", "message": {"text": "Very large file: src/app/api/actions/execute/route.ts (1223 lines)"}, "properties": {"repobilityId": "6d95d4db11c9e5d5", "scanner": "scanner-primary", "fingerprint": "5f6f4ff73ddf6fa7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-69200fd845603efd", "level": "note", "message": {"text": "Very large file: src/app/api/_lib/shopify-pod-operations.ts (1218 lines)"}, "properties": {"repobilityId": "53498a0a58b8cb84", "scanner": "scanner-primary", "fingerprint": "69200fd845603efd", "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": "4cc22fe511abf647", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "3acf0b11f3e92004", "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": "6a31f3d393a40b04", "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": "dd76130ef2023a37", "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": "e050a1b7934def9a", "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": "e3fc1b834f8e65c3", "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": "5943445a558587bf", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "187710ec760566d1", "scanner": "scanner-primary", "fingerprint": "ea8f3013f588db25", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-8424db9c75e04ba4", "level": "none", "message": {"text": "Very short observed git history"}, "properties": {"repobilityId": "27aa85cc3309fc56", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-d857d228eed10ada", "level": "note", "message": {"text": "Legacy-named symbol `cubiqo_visit_memory_v1` in frontend/src/App.js:48"}, "properties": {"repobilityId": "0b1c4233dba62408", "scanner": "scanner-primary", "fingerprint": "d857d228eed10ada", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-730524115fe03d09", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/App.js:5183"}, "properties": {"repobilityId": "83b304060af8d0fb", "scanner": "scanner-primary", "fingerprint": "730524115fe03d09", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e0bf31aef3d5d686", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/App.js:321"}, "properties": {"repobilityId": "3b12e7a6a0642db3", "scanner": "scanner-primary", "fingerprint": "e0bf31aef3d5d686", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e85cb2a23f2c156c", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/src/components/DuoModeDashboard.js:568"}, "properties": {"repobilityId": "b579b6d799079933", "scanner": "scanner-primary", "fingerprint": "e85cb2a23f2c156c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b6b91f96088ac50a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/components/DuoModeDashboard.js:295"}, "properties": {"repobilityId": "26486730055e5150", "scanner": "scanner-primary", "fingerprint": "b6b91f96088ac50a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a145ed9f32788819", "level": "note", "message": {"text": "Legacy-named symbol `eleven_monolingual_v1` in backend/server.py:171"}, "properties": {"repobilityId": "b8800fda1925c495", "scanner": "scanner-primary", "fingerprint": "a145ed9f32788819", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-eac41b01fba0b6e9", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/middleware.ts:28"}, "properties": {"repobilityId": "ff5dd72363d79d12", "scanner": "scanner-primary", "fingerprint": "eac41b01fba0b6e9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-27d0a689f5a92183", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/comms/CommsDashboard.tsx:53"}, "properties": {"repobilityId": "82de8b0a3f0ee0f2", "scanner": "scanner-primary", "fingerprint": "27d0a689f5a92183", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d89a92fcb0a1b087", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/notifications/NotificationBell.tsx:44"}, "properties": {"repobilityId": "ebb47d9b87e43bc4", "scanner": "scanner-primary", "fingerprint": "d89a92fcb0a1b087", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-121c172b27c9619d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/connectors/ConnectorCard.tsx:55"}, "properties": {"repobilityId": "fcef7989fab57f6a", "scanner": "scanner-primary", "fingerprint": "121c172b27c9619d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fa97acd743aa662e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/profile/VerifyContact.tsx:17"}, "properties": {"repobilityId": "9c156ec966bd8fe4", "scanner": "scanner-primary", "fingerprint": "fa97acd743aa662e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b0712becfe728d49", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/push/send/route.ts:74"}, "properties": {"repobilityId": "a1588e6578b45aeb", "scanner": "scanner-primary", "fingerprint": "b0712becfe728d49", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8cbba6e232b14ad4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/tts/transcribe/route.ts:24"}, "properties": {"repobilityId": "edf0e7a719208398", "scanner": "scanner-primary", "fingerprint": "8cbba6e232b14ad4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e829e351ae5e5ba8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/connectors/google/callback/route.ts:64"}, "properties": {"repobilityId": "c4f1bf7479886d7e", "scanner": "scanner-primary", "fingerprint": "e829e351ae5e5ba8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5e7ee2d5c87f9582", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/connectors/google/gmail/route.ts:29"}, "properties": {"repobilityId": "c6c2f15ece51b9c9", "scanner": "scanner-primary", "fingerprint": "5e7ee2d5c87f9582", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c6e9f8bcd2d73d8b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/connectors/google/calendar/route.ts:28"}, "properties": {"repobilityId": "e9be5194b7f9e3b1", "scanner": "scanner-primary", "fingerprint": "c6e9f8bcd2d73d8b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-82dab8a8c9f97cab", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/image/route.ts:31"}, "properties": {"repobilityId": "f2457e7c43857651", "scanner": "scanner-primary", "fingerprint": "82dab8a8c9f97cab", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-724c870bf7a00413", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/image/route.ts:96"}, "properties": {"repobilityId": "e7f739654e78409a", "scanner": "scanner-primary", "fingerprint": "724c870bf7a00413", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-331660fe9df0c077", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/agent/suggest/route.ts:48"}, "properties": {"repobilityId": "2d747f75564204d0", "scanner": "scanner-primary", "fingerprint": "331660fe9df0c077", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f41d31d9efc50bf7", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/agent/background/route.ts:34"}, "properties": {"repobilityId": "d0ef37827cb91062", "scanner": "scanner-primary", "fingerprint": "f41d31d9efc50bf7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6046571aa244dea2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/agent/background/route.ts:264"}, "properties": {"repobilityId": "fdbcd63f12687242", "scanner": "scanner-primary", "fingerprint": "6046571aa244dea2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f4f208e46004caf1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/duo/connectors/[platform]/callback/route.ts:49"}, "properties": {"repobilityId": "dc845b82ee09846d", "scanner": "scanner-primary", "fingerprint": "f4f208e46004caf1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9dc008fdfdbe0f25", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/duo/approvals/[id]/approve/route.ts:34"}, "properties": {"repobilityId": "0c1a71f69e1da7c0", "scanner": "scanner-primary", "fingerprint": "9dc008fdfdbe0f25", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-528ca257d6e6ab47", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/chat/route.ts:103"}, "properties": {"repobilityId": "6e8e7c87a814a1d3", "scanner": "scanner-primary", "fingerprint": "528ca257d6e6ab47", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-11121bc26c3082c6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/voice/route.ts:41"}, "properties": {"repobilityId": "9f104f19d6473f5d", "scanner": "scanner-primary", "fingerprint": "11121bc26c3082c6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d813837fa4f9be52", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/billing/webhook/route.ts:48"}, "properties": {"repobilityId": "323572fd113c6c05", "scanner": "scanner-primary", "fingerprint": "d813837fa4f9be52", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2153d9fc7563af87", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/self-heal/route.ts:54"}, "properties": {"repobilityId": "c45587095d9ce1e7", "scanner": "scanner-primary", "fingerprint": "2153d9fc7563af87", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f58f7cc07e259518", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/analytics/google/route.ts:63"}, "properties": {"repobilityId": "2769d8e5bd42df2c", "scanner": "scanner-primary", "fingerprint": "f58f7cc07e259518", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cc7fd6163c8f8f5e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/vercel-logs/route.ts:36"}, "properties": {"repobilityId": "524c164165b27720", "scanner": "scanner-primary", "fingerprint": "cc7fd6163c8f8f5e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-975eea10f369128b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/cron/market-watch/route.ts:123"}, "properties": {"repobilityId": "7ad0e03dfb4fc7ba", "scanner": "scanner-primary", "fingerprint": "975eea10f369128b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b743a531dc159893", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/cron/job-scan/route.ts:124"}, "properties": {"repobilityId": "23634215eba9c24e", "scanner": "scanner-primary", "fingerprint": "b743a531dc159893", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3776fb8fbc2b9a17", "level": "note", "message": {"text": "Legacy-named symbol `cubiqo_visit_memory_v1` in src/app/api/user/account/route.ts:27"}, "properties": {"repobilityId": "eeff7da9c529e6f0", "scanner": "scanner-primary", "fingerprint": "3776fb8fbc2b9a17", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-a0a14e40c3d361e7", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/actions/social-post-queue/publish/route.ts:274"}, "properties": {"repobilityId": "d2bec4e942cc01a6", "scanner": "scanner-primary", "fingerprint": "a0a14e40c3d361e7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fc4959745b83e25b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/actions/social-post-queue/platforms/tiktok.ts:21"}, "properties": {"repobilityId": "2a9d5fa72a4cd161", "scanner": "scanner-primary", "fingerprint": "fc4959745b83e25b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4794ed9780fb28d5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/_lib/content-scraper.ts:55"}, "properties": {"repobilityId": "9625ee2f837d9c95", "scanner": "scanner-primary", "fingerprint": "4794ed9780fb28d5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-838e2ac3506af92d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/_lib/web-search.ts:21"}, "properties": {"repobilityId": "86fbe8e35645625d", "scanner": "scanner-primary", "fingerprint": "838e2ac3506af92d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3bceb33717b61e49", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/_lib/social-api-client.ts:151"}, "properties": {"repobilityId": "d7465aba6b15d198", "scanner": "scanner-primary", "fingerprint": "3bceb33717b61e49", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-82e25bf14d34b245", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/_lib/shopify-pod-operations.ts:301"}, "properties": {"repobilityId": "b28730cdadcb89b8", "scanner": "scanner-primary", "fingerprint": "82e25bf14d34b245", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1bcff654f2070ec9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/_lib/printify-client.ts:77"}, "properties": {"repobilityId": "b35edd4f8891c3ec", "scanner": "scanner-primary", "fingerprint": "1bcff654f2070ec9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7e136716bfe9fb56", "level": "note", "message": {"text": "Legacy-named symbol `cubiqo_v2` in src/app/api/_lib/v2-actions.ts:19"}, "properties": {"repobilityId": "8b1f28afca1502af", "scanner": "scanner-primary", "fingerprint": "7e136716bfe9fb56", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-473272c3d92b35ce", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/_lib/shopify-client.ts:85"}, "properties": {"repobilityId": "b0a0ca7150fa7b25", "scanner": "scanner-primary", "fingerprint": "473272c3d92b35ce", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5c9f6fa8f72b5196", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/compare/route.ts:123"}, "properties": {"repobilityId": "12cd25f1483f23dd", "scanner": "scanner-primary", "fingerprint": "5c9f6fa8f72b5196", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f181ead8cd4e4242", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/perception/vision/route.ts:205"}, "properties": {"repobilityId": "73fd37b64cb761ef", "scanner": "scanner-primary", "fingerprint": "f181ead8cd4e4242", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9d347187eb30bd2d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/composio.ts:88"}, "properties": {"repobilityId": "9ced64030e9e8ad2", "scanner": "scanner-primary", "fingerprint": "9d347187eb30bd2d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fdd8fd9dababe11a", "level": "note", "message": {"text": "Legacy-named symbol `eleven_multilingual_v2` in src/lib/models.ts:28"}, "properties": {"repobilityId": "845c261dea1060d3", "scanner": "scanner-primary", "fingerprint": "fdd8fd9dababe11a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-c55bf064555f50ea", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/ai/prompt-loader.ts:11"}, "properties": {"repobilityId": "1032af4bc2c1d220", "scanner": "scanner-primary", "fingerprint": "c55bf064555f50ea", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2a7d3a5c70449b9a", "level": "note", "message": {"text": "Legacy-named symbol `agent_v1` in src/lib/ai/user-context-tools.ts:293"}, "properties": {"repobilityId": "47422f286b8057ed", "scanner": "scanner-primary", "fingerprint": "2a7d3a5c70449b9a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-f901831bc83111ce", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/config/llm.ts:49"}, "properties": {"repobilityId": "b1aeaf2a78623796", "scanner": "scanner-primary", "fingerprint": "f901831bc83111ce", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e3b71abf6b5cb30e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/analytics/funnel-tracker.ts:59"}, "properties": {"repobilityId": "bed8bd840a0d5b5b", "scanner": "scanner-primary", "fingerprint": "e3b71abf6b5cb30e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ab28ae056f43d7d8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/connectors/adapters/oauth2-adapter.ts:228"}, "properties": {"repobilityId": "9d058a6a8dbc8372", "scanner": "scanner-primary", "fingerprint": "ab28ae056f43d7d8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-53d2524a9b550c76", "level": "note", "message": {"text": "Legacy-named symbol `eleven_multilingual_v2` in src/lib/media/model-router.ts:45"}, "properties": {"repobilityId": "55c6f12601ab0d0a", "scanner": "scanner-primary", "fingerprint": "53d2524a9b550c76", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-7ff8d688640b0ec1", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/agent/llm-planner.ts:110"}, "properties": {"repobilityId": "19e365462028673d", "scanner": "scanner-primary", "fingerprint": "7ff8d688640b0ec1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3b02265244c60698", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/agent/capsule-engine.ts:446"}, "properties": {"repobilityId": "bee98e293ddad43e", "scanner": "scanner-primary", "fingerprint": "3b02265244c60698", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6e9ee56c1b8d8d6a", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/agent/entry-gate.ts:123"}, "properties": {"repobilityId": "9c74c89a007bc751", "scanner": "scanner-primary", "fingerprint": "6e9ee56c1b8d8d6a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e9d425786d1bfe10", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/agent/common.ts:112"}, "properties": {"repobilityId": "10d16bfd159a8761", "scanner": "scanner-primary", "fingerprint": "e9d425786d1bfe10", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-349d70fe51dbbfaa", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/connectors/useOAuthPopup.ts:51"}, "properties": {"repobilityId": "2706adc430cf5eb5", "scanner": "scanner-primary", "fingerprint": "349d70fe51dbbfaa", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e915c69e5812feb4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/connectors/useConnectors.ts:21"}, "properties": {"repobilityId": "c7da63ec0b1b58ed", "scanner": "scanner-primary", "fingerprint": "e915c69e5812feb4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9ff9d998e215f2c9", "level": "warning", "message": {"text": "Frontend route `/auth/callback` has no Link/navigate to it \u2014 frontend/src/App.js"}, "properties": {"repobilityId": "454f837c286c95de", "scanner": "scanner-primary", "fingerprint": "9ff9d998e215f2c9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-c99555f72b6ce050", "level": "error", "message": {"text": "Dangling fetch: GET /api/journal?limit=5 (frontend/src/App.js:321)"}, "properties": {"repobilityId": "660f630151cd2886", "scanner": "scanner-primary", "fingerprint": "c99555f72b6ce050", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-df95bf88fbea31cc", "level": "error", "message": {"text": "Dangling fetch: POST /api/journal/guide (frontend/src/App.js:441)"}, "properties": {"repobilityId": "ee1c2b4262acc8b8", "scanner": "scanner-primary", "fingerprint": "df95bf88fbea31cc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d0df72f619d57562", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/journal/${normalized.id} (frontend/src/App.js:633)"}, "properties": {"repobilityId": "af21025eed8212cc", "scanner": "scanner-primary", "fingerprint": "d0df72f619d57562", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-775cd9c28921ff78", "level": "error", "message": {"text": "Dangling fetch: GET /api/dashboard (frontend/src/App.js:917)"}, "properties": {"repobilityId": "06db540c639b6d33", "scanner": "scanner-primary", "fingerprint": "775cd9c28921ff78", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8220692ba38877ab", "level": "error", "message": {"text": "Dangling fetch: GET /api/actions/events?since=${encodeURIComponent(since)} (frontend/src/App.js:1254)"}, "properties": {"repobilityId": "13cdf72d04bd21aa", "scanner": "scanner-primary", "fingerprint": "8220692ba38877ab", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5ed111edef3bda63", "level": "error", "message": {"text": "Dangling fetch: POST /api/duo/projects (frontend/src/App.js:3769)"}, "properties": {"repobilityId": "e43c4c24c06cea2d", "scanner": "scanner-primary", "fingerprint": "5ed111edef3bda63", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c854113dd6ef88d9", "level": "error", "message": {"text": "Dangling fetch: GET /api/diagnostics (frontend/src/App.js:3863)"}, "properties": {"repobilityId": "be5d74effd014585", "scanner": "scanner-primary", "fingerprint": "c854113dd6ef88d9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-957a74bfb9b09c86", "level": "error", "message": {"text": "Dangling fetch: POST /api/recommendations/process (frontend/src/App.js:3925)"}, "properties": {"repobilityId": "f263eb0e0e6e5055", "scanner": "scanner-primary", "fingerprint": "957a74bfb9b09c86", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8a03593baef88fd2", "level": "error", "message": {"text": "Dangling fetch: POST /api/safety/output (frontend/src/App.js:3945)"}, "properties": {"repobilityId": "2c3480a1488fea51", "scanner": "scanner-primary", "fingerprint": "8a03593baef88fd2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4119ea63d6634640", "level": "error", "message": {"text": "Dangling fetch: GET /api/signals (frontend/src/App.js:4120)"}, "properties": {"repobilityId": "4a3c63664233f73d", "scanner": "scanner-primary", "fingerprint": "4119ea63d6634640", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e167b37607c26787", "level": "error", "message": {"text": "Dangling fetch: GET /api/signals (frontend/src/App.js:4154)"}, "properties": {"repobilityId": "5866bb052a415d4c", "scanner": "scanner-primary", "fingerprint": "e167b37607c26787", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2e9a8aa283951c32", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/signals (frontend/src/App.js:4185)"}, "properties": {"repobilityId": "6b09c4173ebde688", "scanner": "scanner-primary", "fingerprint": "2e9a8aa283951c32", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1bdaa53a2938b0ed", "level": "error", "message": {"text": "Dangling fetch: POST /api/tts (frontend/src/App.js:4585)"}, "properties": {"repobilityId": "b89cc0410d9345ff", "scanner": "scanner-primary", "fingerprint": "1bdaa53a2938b0ed", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-63ee2534bd559e11", "level": "error", "message": {"text": "Dangling fetch: POST /api/voice-cue (frontend/src/App.js:4701)"}, "properties": {"repobilityId": "126eafa7d1214d20", "scanner": "scanner-primary", "fingerprint": "63ee2534bd559e11", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6566cbb2efcef69e", "level": "error", "message": {"text": "Dangling fetch: POST /api/rgy/classify (frontend/src/App.js:4818)"}, "properties": {"repobilityId": "5a30ec0a2f5a3e97", "scanner": "scanner-primary", "fingerprint": "6566cbb2efcef69e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a6e5c874aa4d6d33", "level": "error", "message": {"text": "Dangling fetch: POST /api/agent/stream (frontend/src/App.js:4854)"}, "properties": {"repobilityId": "0d204529c973fe7d", "scanner": "scanner-primary", "fingerprint": "a6e5c874aa4d6d33", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9c50469aadca8eb0", "level": "error", "message": {"text": "Dangling fetch: POST /api/agent (frontend/src/App.js:4913)"}, "properties": {"repobilityId": "3c6e77ebea7dc95f", "scanner": "scanner-primary", "fingerprint": "9c50469aadca8eb0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bb30aff0dd145bde", "level": "error", "message": {"text": "Dangling fetch: POST /api/image (frontend/src/App.js:5096)"}, "properties": {"repobilityId": "bfb85cd50bf135d6", "scanner": "scanner-primary", "fingerprint": "bb30aff0dd145bde", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ee3d8169fa05df9c", "level": "error", "message": {"text": "Dangling fetch: POST /api/image (frontend/src/App.js:5160)"}, "properties": {"repobilityId": "61a53dc6b03ccb11", "scanner": "scanner-primary", "fingerprint": "ee3d8169fa05df9c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f7a3bef08e7ffbde", "level": "error", "message": {"text": "Dangling fetch: POST /api/recommendations/save (frontend/src/App.js:5624)"}, "properties": {"repobilityId": "b839721eb2f4f180", "scanner": "scanner-primary", "fingerprint": "f7a3bef08e7ffbde", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9e4e238ce7243566", "level": "error", "message": {"text": "Dangling fetch: POST /api/recommendations/have (frontend/src/App.js:5635)"}, "properties": {"repobilityId": "3a02b806bbd63990", "scanner": "scanner-primary", "fingerprint": "9e4e238ce7243566", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6155056553c0a0f7", "level": "error", "message": {"text": "Dangling fetch: GET /api/connectors/status (frontend/src/components/DuoModeDashboard.js:185)"}, "properties": {"repobilityId": "1b0f0750eabe93f6", "scanner": "scanner-primary", "fingerprint": "6155056553c0a0f7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a664be8e493f9f6b", "level": "error", "message": {"text": "Dangling fetch: POST /api/duo/projects/${projectId}/chat (frontend/src/components/DuoModeDashboard.js:245)"}, "properties": {"repobilityId": "dbfe29b6d6e30da7", "scanner": "scanner-primary", "fingerprint": "a664be8e493f9f6b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-86f3fa75f9faf9b2", "level": "error", "message": {"text": "Dangling fetch: POST /api/duo/projects/${projectId}/approve (frontend/src/components/DuoModeDashboard.js:295)"}, "properties": {"repobilityId": "dac79b540280ed6f", "scanner": "scanner-primary", "fingerprint": "86f3fa75f9faf9b2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-75dc3343404ad2b5", "level": "error", "message": {"text": "Dangling fetch: POST /api/duo/projects/${projectId}/chat (frontend/src/components/DuoModeDashboard.js:304)"}, "properties": {"repobilityId": "9f7459c616435bb3", "scanner": "scanner-primary", "fingerprint": "75dc3343404ad2b5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-efc0c8095d2f9be8", "level": "error", "message": {"text": "Dangling fetch: POST /api/agent/suggest (frontend/src/components/DuoModeDashboard.js:437)"}, "properties": {"repobilityId": "0b1f95a8b37c64fc", "scanner": "scanner-primary", "fingerprint": "efc0c8095d2f9be8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-10a82c74172bc4e0", "level": "error", "message": {"text": "Dangling fetch: POST /api/duo/projects/${projectId}/chat (frontend/src/components/DuoModeDashboard.js:475)"}, "properties": {"repobilityId": "1ac426caf4a76d9e", "scanner": "scanner-primary", "fingerprint": "10a82c74172bc4e0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5caa154938e0a721", "level": "error", "message": {"text": "Dangling fetch: POST /api/agent/stream (frontend/src/components/DuoModeDashboard.js:495)"}, "properties": {"repobilityId": "445ac0fd748e2c3c", "scanner": "scanner-primary", "fingerprint": "5caa154938e0a721", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4b513384a6559e03", "level": "error", "message": {"text": "Dangling fetch: GET /api/duo/projects/${pid} (frontend/src/components/DuoModeDashboard.js:603)"}, "properties": {"repobilityId": "d29c28427e2883ff", "scanner": "scanner-primary", "fingerprint": "4b513384a6559e03", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fd60880afd7831c2", "level": "error", "message": {"text": "Dangling fetch: POST /api/duo/projects (frontend/src/components/DuoModeDashboard.js:615)"}, "properties": {"repobilityId": "5bd215ba15e8ab71", "scanner": "scanner-primary", "fingerprint": "fd60880afd7831c2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b04e83203ec1f936", "level": "error", "message": {"text": "Dangling fetch: GET /api/capsule-briefing/${signalId} (frontend/src/components/DuoModeDashboard.js:644)"}, "properties": {"repobilityId": "bfccc12251080a8d", "scanner": "scanner-primary", "fingerprint": "b04e83203ec1f936", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d26b653a2a74854d", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/capsule-briefing/${signalId} (frontend/src/components/DuoModeDashboard.js:660)"}, "properties": {"repobilityId": "a39a5e171dadfce0", "scanner": "scanner-primary", "fingerprint": "d26b653a2a74854d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f7f46c8a42959b9c", "level": "error", "message": {"text": "Dangling fetch: GET /api/duo/projects/${pid} (frontend/src/components/DuoModeDashboard.js:672)"}, "properties": {"repobilityId": "760e6e05f37a98d2", "scanner": "scanner-primary", "fingerprint": "f7f46c8a42959b9c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-471bb43bdddd1c8b", "level": "error", "message": {"text": "Dangling fetch: POST /api/agent (frontend/src/components/JobPipeline.js:254)"}, "properties": {"repobilityId": "d60693eb0e403019", "scanner": "scanner-primary", "fingerprint": "471bb43bdddd1c8b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c258660d5b4b0486", "level": "error", "message": {"text": "Dangling fetch: POST /api/jobs/easy-apply (frontend/src/components/JobPipeline.js:337)"}, "properties": {"repobilityId": "d8ca69857a6b0016", "scanner": "scanner-primary", "fingerprint": "c258660d5b4b0486", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-33be992b03f7a098", "level": "error", "message": {"text": "Dangling fetch: GET /api/jobs/pipeline?limit=60 (frontend/src/components/JobPipeline.js:693)"}, "properties": {"repobilityId": "af0447fd4d3198eb", "scanner": "scanner-primary", "fingerprint": "33be992b03f7a098", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-92c3378524364f0a", "level": "error", "message": {"text": "Dangling fetch: GET /api/actions/execute?job_state=1 (frontend/src/components/JobPipeline.js:694)"}, "properties": {"repobilityId": "eae3b75e303ceead", "scanner": "scanner-primary", "fingerprint": "92c3378524364f0a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7066b53c2df75ad4", "level": "error", "message": {"text": "Dangling fetch: GET /api/cron/job-scan (frontend/src/components/JobPipeline.js:728)"}, "properties": {"repobilityId": "ff4abb35678acafe", "scanner": "scanner-primary", "fingerprint": "7066b53c2df75ad4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7a2234e36fc6d4b1", "level": "error", "message": {"text": "Dangling fetch: POST /api/jobs/easy-apply (frontend/src/components/JobPipeline.js:745)"}, "properties": {"repobilityId": "6e62a4fd681ae298", "scanner": "scanner-primary", "fingerprint": "7a2234e36fc6d4b1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-406edc2357de8a8f", "level": "error", "message": {"text": "Dangling fetch: GET /api/comms/settings (src/components/comms/CommsDashboard.tsx:53)"}, "properties": {"repobilityId": "25e5f4b846828637", "scanner": "scanner-primary", "fingerprint": "406edc2357de8a8f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ec535da300674b07", "level": "error", "message": {"text": "Dangling fetch: GET /api/notifications?limit=${limit} (src/components/notifications/NotificationBell.tsx:20)"}, "properties": {"repobilityId": "b850f16931ee4f51", "scanner": "scanner-primary", "fingerprint": "ec535da300674b07", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fcf95ed8c9d22cbf", "level": "error", "message": {"text": "Dangling fetch: POST /api/notifications/${id}/read (src/components/notifications/NotificationBell.tsx:44)"}, "properties": {"repobilityId": "bfc5965a10cdfdda", "scanner": "scanner-primary", "fingerprint": "fcf95ed8c9d22cbf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b695f2ddb31cb63c", "level": "error", "message": {"text": "Dangling fetch: POST /api/connectors/extension/enable (src/components/connectors/ConnectorCard.tsx:55)"}, "properties": {"repobilityId": "575176c1f53083b6", "scanner": "scanner-primary", "fingerprint": "b695f2ddb31cb63c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-32e343907158b6e9", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/connectors/${connector.platform}/disconnect (src/components/connectors/ConnectorCard.tsx:66)"}, "properties": {"repobilityId": "4c3f44d8832c9442", "scanner": "scanner-primary", "fingerprint": "32e343907158b6e9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d7cb9062a697001c", "level": "error", "message": {"text": "Dangling fetch: POST /api/duo/projects/${projectId}/approve (src/components/duo/PlanReview.tsx:64)"}, "properties": {"repobilityId": "e0f47bfa77c705cf", "scanner": "scanner-primary", "fingerprint": "d7cb9062a697001c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5ae399806854a1fd", "level": "error", "message": {"text": "Dangling fetch: POST /api/profile/verify (src/components/profile/VerifyContact.tsx:17)"}, "properties": {"repobilityId": "993ef64f98965256", "scanner": "scanner-primary", "fingerprint": "5ae399806854a1fd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-969cc9ea84be858f", "level": "error", "message": {"text": "Dangling fetch: GET /api/duo/approvals?status=pending&limit=5 (src/components/overlays/CubiQoOverlays.tsx:122)"}, "properties": {"repobilityId": "64f97e26bf17883f", "scanner": "scanner-primary", "fingerprint": "969cc9ea84be858f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-af827d2a50f785b8", "level": "error", "message": {"text": "Dangling fetch: GET /api/duo/tasks?status=awaiting_user&limit=5 (src/components/overlays/CubiQoOverlays.tsx:123)"}, "properties": {"repobilityId": "8b7aebe37993e9a0", "scanner": "scanner-primary", "fingerprint": "af827d2a50f785b8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-80b2d2f366fb0140", "level": "error", "message": {"text": "Dangling fetch: GET /api/rgy/context-card (src/components/overlays/CubiQoOverlays.tsx:124)"}, "properties": {"repobilityId": "ee71939f3ef7810c", "scanner": "scanner-primary", "fingerprint": "80b2d2f366fb0140", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-74961f1897fa3503", "level": "error", "message": {"text": "Dangling fetch: POST /api/duo/approvals/${approval.id}/${action} (src/components/overlays/CubiQoOverlays.tsx:161)"}, "properties": {"repobilityId": "fa6b467b875fa0c2", "scanner": "scanner-primary", "fingerprint": "74961f1897fa3503", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0829fe5b1653011e", "level": "error", "message": {"text": "Dangling fetch: POST /api/duo/tasks/${question.id}/answer (src/components/overlays/CubiQoOverlays.tsx:177)"}, "properties": {"repobilityId": "68130cbcced2eb68", "scanner": "scanner-primary", "fingerprint": "0829fe5b1653011e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e22360202daa8bc6", "level": "error", "message": {"text": "Dangling fetch: POST https://api.elevenlabs.io/v1/text-to-speech/${voiceConfig.voiceId} (src/app/api/tts/route.ts:77)"}, "properties": {"repobilityId": "4ff1437f49154992", "scanner": "scanner-primary", "fingerprint": "e22360202daa8bc6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e284919142d9884c", "level": "error", "message": {"text": "Dangling fetch: POST https://api.openai.com/v1/audio/transcriptions (src/app/api/tts/transcribe/route.ts:24)"}, "properties": {"repobilityId": "e062794a85c10ecc", "scanner": "scanner-primary", "fingerprint": "e284919142d9884c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-81e7fe2bdef84827", "level": "error", "message": {"text": "Dangling fetch: POST https://oauth2.googleapis.com/token (src/app/api/connectors/google/callback/route.ts:64)"}, "properties": {"repobilityId": "9b78da9e369da264", "scanner": "scanner-primary", "fingerprint": "81e7fe2bdef84827", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fcbd48e04ab12312", "level": "error", "message": {"text": "Dangling fetch: GET https://www.googleapis.com/oauth2/v2/userinfo (src/app/api/connectors/google/callback/route.ts:88)"}, "properties": {"repobilityId": "456939f62408b97e", "scanner": "scanner-primary", "fingerprint": "fcbd48e04ab12312", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c9763ba03a6ea77c", "level": "error", "message": {"text": "Dangling fetch: POST https://oauth2.googleapis.com/token (src/app/api/connectors/google/gmail/route.ts:29)"}, "properties": {"repobilityId": "c962acfaa340432a", "scanner": "scanner-primary", "fingerprint": "c9763ba03a6ea77c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-008a872fbd31519d", "level": "error", "message": {"text": "Dangling fetch: GET https://gmail.googleapis.com/gmail/v1/users/me/messages/${messageId}?format=metadata&metadataHeaders=Subject&metadataHeaders=From&metadataHeaders=Date (src/app/api/connectors/google/gmail/route.ts:69)"}, "properties": {"repobilityId": "96b375b4a1f5ec0a", "scanner": "scanner-primary", "fingerprint": "008a872fbd31519d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-96da6c94650f759e", "level": "error", "message": {"text": "Dangling fetch: GET https://gmail.googleapis.com/gmail/v1/users/me/messages?maxResults=${maxResults}&labelIds=INBOX (src/app/api/connectors/google/gmail/route.ts:79)"}, "properties": {"repobilityId": "a697edf02621419b", "scanner": "scanner-primary", "fingerprint": "96da6c94650f759e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-246f9f65fe5d1b6d", "level": "error", "message": {"text": "Dangling fetch: GET https://gmail.googleapis.com/gmail/v1/users/me/messages/${m.id}?format=metadata&metadataHeaders=Subject&metadataHeaders=From&metadataHeaders=Date (src/app/api/connectors/google/gmail/route.ts:91)"}, "properties": {"repobilityId": "d482fc967d9956b1", "scanner": "scanner-primary", "fingerprint": "246f9f65fe5d1b6d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a674af3bd3c426a8", "level": "error", "message": {"text": "Dangling fetch: POST https://oauth2.googleapis.com/token (src/app/api/connectors/google/calendar/route.ts:28)"}, "properties": {"repobilityId": "33eee267e0311cef", "scanner": "scanner-primary", "fingerprint": "a674af3bd3c426a8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f2227a30faacfc75", "level": "error", "message": {"text": "Dangling fetch: GET https://www.googleapis.com/calendar/v3/calendars/primary/events?timeMin=${now}&timeMax=${end}&singleEvents=true&orderBy=startTime&maxResults=20 (src/app/api/connectors/google/calendar/route.ts:60)"}, "properties": {"repobilityId": "18524e8a1b16f57f", "scanner": "scanner-primary", "fingerprint": "f2227a30faacfc75", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2f2d7eb0bdfdcc99", "level": "error", "message": {"text": "Dangling fetch: POST https://www.googleapis.com/calendar/v3/calendars/primary/events?sendUpdates=all (src/app/api/connectors/google/calendar/route.ts:110)"}, "properties": {"repobilityId": "862aafeb14ea0647", "scanner": "scanner-primary", "fingerprint": "2f2d7eb0bdfdcc99", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-aaac4b7aa60ecc0e", "level": "error", "message": {"text": "Dangling fetch: POST https://${shop}/admin/oauth/access_token (src/app/api/connectors/shopify/callback/route.ts:60)"}, "properties": {"repobilityId": "0956ec9a4839a5a7", "scanner": "scanner-primary", "fingerprint": "aaac4b7aa60ecc0e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a8ce4d1d77ca65a2", "level": "error", "message": {"text": "Dangling fetch: POST https://api.runpod.ai/v2/${RUNPOD_ENDPOINT_ID}/run (src/app/api/image/route.ts:96)"}, "properties": {"repobilityId": "f6ab9d173a17fc94", "scanner": "scanner-primary", "fingerprint": "a8ce4d1d77ca65a2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-37c3e31fa8cac24f", "level": "error", "message": {"text": "Dangling fetch: GET https://api.runpod.ai/v2/${RUNPOD_ENDPOINT_ID}/status/${jobId} (src/app/api/image/route.ts:117)"}, "properties": {"repobilityId": "c8d042151effe4dd", "scanner": "scanner-primary", "fingerprint": "37c3e31fa8cac24f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5c545e38ed8d1d9c", "level": "error", "message": {"text": "Dangling fetch: POST https://api.openai.com/v1/chat/completions (src/app/api/agent/greet/route.ts:47)"}, "properties": {"repobilityId": "56185ad971c4870f", "scanner": "scanner-primary", "fingerprint": "5c545e38ed8d1d9c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-aed07bf945b343fd", "level": "error", "message": {"text": "Dangling fetch: POST https://api.openai.com/v1/chat/completions (src/app/api/agent/suggest/route.ts:48)"}, "properties": {"repobilityId": "dd226f7ff86d35ce", "scanner": "scanner-primary", "fingerprint": "aed07bf945b343fd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-144b59eadec29d7b", "level": "error", "message": {"text": "Dangling fetch: GET https://nominatim.openstreetmap.org/reverse?format=jsonv2&lat=${lat}&lon=${lon} (src/app/api/agent/location/route.ts:51)"}, "properties": {"repobilityId": "f48b3f570b5101a3", "scanner": "scanner-primary", "fingerprint": "144b59eadec29d7b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-be8ecdd67863cb1d", "level": "error", "message": {"text": "Dangling fetch: POST https://api.deepgram.com/v1/listen?model=nova-3&smart_format=true&language=en (src/app/api/voice/route.ts:41)"}, "properties": {"repobilityId": "3f6cb1b13be90c44", "scanner": "scanner-primary", "fingerprint": "be8ecdd67863cb1d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f15b1cefbaba9829", "level": "error", "message": {"text": "Dangling fetch: GET https://api.vercel.com/v6/deployments?projectId=${VERCEL_PROJECT_ID}&limit=${limit}${teamQ} (src/app/api/self-heal/route.ts:54)"}, "properties": {"repobilityId": "241512cefd7187fe", "scanner": "scanner-primary", "fingerprint": "f15b1cefbaba9829", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c61986555d1e9d84", "level": "error", "message": {"text": "Dangling fetch: GET https://api.vercel.com/v2/deployments/${deploymentId}/events${teamQ} (src/app/api/self-heal/route.ts:66)"}, "properties": {"repobilityId": "79670ae4c074c7ad", "scanner": "scanner-primary", "fingerprint": "c61986555d1e9d84", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f4bc6b4b0a3d6bf5", "level": "error", "message": {"text": "Dangling fetch: POST https://api.github.com/repos/${GITHUB_REPO}/issues (src/app/api/self-heal/route.ts:87)"}, "properties": {"repobilityId": "54f42377ca97734e", "scanner": "scanner-primary", "fingerprint": "f4bc6b4b0a3d6bf5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a7f70aa40423b7f9", "level": "error", "message": {"text": "Dangling fetch: POST https://oauth2.googleapis.com/token (src/app/api/admin/analytics/google/route.ts:63)"}, "properties": {"repobilityId": "e1a73922184593be", "scanner": "scanner-primary", "fingerprint": "a7f70aa40423b7f9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-45d40497b481a8ce", "level": "error", "message": {"text": "Dangling fetch: POST https://analyticsdata.googleapis.com/v1beta/${propertyId}:runReport (src/app/api/admin/analytics/google/route.ts:114)"}, "properties": {"repobilityId": "d46f36a3f42e38fd", "scanner": "scanner-primary", "fingerprint": "45d40497b481a8ce", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c4cb1cf085d0f106", "level": "error", "message": {"text": "Dangling fetch: POST https://api.openai.com/v1/chat/completions (src/app/api/cron/run-schedules/route.ts:80)"}, "properties": {"repobilityId": "1531b58e1428b49a", "scanner": "scanner-primary", "fingerprint": "c4cb1cf085d0f106", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-408122f7c3d234f5", "level": "error", "message": {"text": "Dangling fetch: POST https://api.openai.com/v1/chat/completions (src/app/api/cron/daily-digest/route.ts:54)"}, "properties": {"repobilityId": "265a23dedbe48c7e", "scanner": "scanner-primary", "fingerprint": "408122f7c3d234f5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-51275aa4b816e463", "level": "error", "message": {"text": "Dangling fetch: POST https://api.openai.com/v1/chat/completions (src/app/api/cron/job-scan/route.ts:124)"}, "properties": {"repobilityId": "8f9916b2e66d6979", "scanner": "scanner-primary", "fingerprint": "51275aa4b816e463", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3493f623b089742f", "level": "error", "message": {"text": "Dangling fetch: POST https://api.elevenlabs.io/v1/text-to-speech/${voiceId} (src/app/api/voice-cue/route.ts:44)"}, "properties": {"repobilityId": "29583b56eb73ad08", "scanner": "scanner-primary", "fingerprint": "3493f623b089742f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-35cf104bdadd0bf2", "level": "error", "message": {"text": "Dangling fetch: POST https://api.tavily.com/search (src/app/api/_lib/web-search.ts:21)"}, "properties": {"repobilityId": "10eaa5ab5bef5834", "scanner": "scanner-primary", "fingerprint": "35cf104bdadd0bf2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8152b0d1bff3143c", "level": "error", "message": {"text": "Dangling fetch: GET https://api.search.brave.com/res/v1/web/search?q=${encodeURIComponent(query)}&count=${max} (src/app/api/_lib/web-search.ts:45)"}, "properties": {"repobilityId": "5d0dc724ec233357", "scanner": "scanner-primary", "fingerprint": "8152b0d1bff3143c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ee58cc8b016c1cd9", "level": "error", "message": {"text": "Dangling fetch: POST https://google.serper.dev/search (src/app/api/_lib/web-search.ts:67)"}, "properties": {"repobilityId": "fbd79ddbc37c621e", "scanner": "scanner-primary", "fingerprint": "ee58cc8b016c1cd9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f892e080023cfce8", "level": "error", "message": {"text": "Dangling fetch: POST https://api.linkedin.com/v2/ugcPosts (src/app/api/_lib/social-api-client.ts:55)"}, "properties": {"repobilityId": "82529189b03fca64", "scanner": "scanner-primary", "fingerprint": "f892e080023cfce8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0160ba70954acb97", "level": "error", "message": {"text": "Dangling fetch: POST https://api.twitter.com/2/tweets (src/app/api/_lib/social-api-client.ts:94)"}, "properties": {"repobilityId": "2090bb9a286c1372", "scanner": "scanner-primary", "fingerprint": "0160ba70954acb97", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fc71cc88a8990744", "level": "error", "message": {"text": "Dangling fetch: POST https://graph.facebook.com/v19.0/${accountId}/media?image_url=${encodeURIComponent(mediaUrl)}&caption=${encodeURIComponent(payload.content)}&access_token=${token} (src/app/api/_lib/social-api-client.ts:140)"}, "properties": {"repobilityId": "ac02d3befbd577be", "scanner": "scanner-primary", "fingerprint": "fc71cc88a8990744", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e01a477f27717491", "level": "error", "message": {"text": "Dangling fetch: POST https://graph.facebook.com/v19.0/${accountId}/media_publish?creation_id=${creationId}&access_token=${token} (src/app/api/_lib/social-api-client.ts:151)"}, "properties": {"repobilityId": "52bb8b21b197b63c", "scanner": "scanner-primary", "fingerprint": "e01a477f27717491", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3727a9c73ac24235", "level": "error", "message": {"text": "Dangling fetch: POST https://graph.threads.net/v1.0/${userId}/threads?media_type=TEXT&text=${encodeURIComponent(payload.content)}&access_token=${token} (src/app/api/_lib/social-api-client.ts:180)"}, "properties": {"repobilityId": "803d346daa49e845", "scanner": "scanner-primary", "fingerprint": "3727a9c73ac24235", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-40a9ebe2e8cb6c46", "level": "error", "message": {"text": "Dangling fetch: POST https://graph.threads.net/v1.0/${userId}/threads_publish?creation_id=${creationId}&access_token=${token} (src/app/api/_lib/social-api-client.ts:191)"}, "properties": {"repobilityId": "2e123fe1899a9989", "scanner": "scanner-primary", "fingerprint": "40a9ebe2e8cb6c46", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8fc83347b130358d", "level": "error", "message": {"text": "Dangling fetch: GET https://${storeUrl}/admin/api/${SHOPIFY_API_VERSION}${path} (src/app/api/_lib/shopify-pod-operations.ts:301)"}, "properties": {"repobilityId": "f2bb1c546b75dbfd", "scanner": "scanner-primary", "fingerprint": "8fc83347b130358d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-90756c54a673c95c", "level": "error", "message": {"text": "Dangling fetch: GET https://${storeUrl}/admin/api/${SHOPIFY_API_VERSION}/shop.json (src/app/api/_lib/shopify-pod-operations.ts:589)"}, "properties": {"repobilityId": "dfa7e311d6ee0481", "scanner": "scanner-primary", "fingerprint": "90756c54a673c95c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1352951c858d0901", "level": "error", "message": {"text": "Dangling fetch: POST https://api.openai.com/v1/chat/completions (src/app/api/_lib/llm-tailoring.ts:78)"}, "properties": {"repobilityId": "e564e7a2be6001fe", "scanner": "scanner-primary", "fingerprint": "1352951c858d0901", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b929524f7024f40d", "level": "error", "message": {"text": "Dangling fetch: POST https://api.openai.com/v1/chat/completions (src/app/api/_lib/context-engine.ts:89)"}, "properties": {"repobilityId": "7866c79ef89e297f", "scanner": "scanner-primary", "fingerprint": "b929524f7024f40d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b87a8bd55c9e99e3", "level": "error", "message": {"text": "Dangling fetch: GET https://${domain}/admin/api/${SHOPIFY_API_VERSION}${path} (src/app/api/_lib/shopify-client.ts:85)"}, "properties": {"repobilityId": "60b9805bd062e223", "scanner": "scanner-primary", "fingerprint": "b87a8bd55c9e99e3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0c42f27bd2e59221", "level": "error", "message": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (src/app/api/compare/route.ts:123)"}, "properties": {"repobilityId": "79b80022d3d5336e", "scanner": "scanner-primary", "fingerprint": "0c42f27bd2e59221", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-207312fe0e21615f", "level": "error", "message": {"text": "Dangling fetch: POST https://api.openai.com/v1/chat/completions (src/app/api/perception/vision/route.ts:205)"}, "properties": {"repobilityId": "66e27e391c2338b3", "scanner": "scanner-primary", "fingerprint": "207312fe0e21615f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fba7fdab071eba87", "level": "error", "message": {"text": "Dangling fetch: POST /api/agent/stream (src/app/(app)/duo/[id]/page.tsx:393)"}, "properties": {"repobilityId": "8f9e5c0417e0acb1", "scanner": "scanner-primary", "fingerprint": "fba7fdab071eba87", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ba9cd8351ad2e640", "level": "error", "message": {"text": "Dangling fetch: POST /api/agent/stream (src/app/(app)/chat/page.tsx:136)"}, "properties": {"repobilityId": "69d7c45365e2dde7", "scanner": "scanner-primary", "fingerprint": "ba9cd8351ad2e640", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2e21a6aeb86c9b07", "level": "error", "message": {"text": "Dangling fetch: POST https://api.twilio.com/2010-04-01/Accounts/${TWILIO_SID}/Messages.json (src/lib/comms/sms.ts:36)"}, "properties": {"repobilityId": "41817e4d6f39d7f0", "scanner": "scanner-primary", "fingerprint": "2e21a6aeb86c9b07", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5ffd30ff8fb3d9a2", "level": "error", "message": {"text": "Dangling fetch: POST /api/analytics/funnel (src/lib/analytics/funnel-tracker.ts:43)"}, "properties": {"repobilityId": "9d29900e5bfb31f7", "scanner": "scanner-primary", "fingerprint": "5ffd30ff8fb3d9a2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-91463d51dc7f0d02", "level": "error", "message": {"text": "Dangling fetch: POST /api/analytics/funnel (src/lib/analytics/funnel-tracker.ts:59)"}, "properties": {"repobilityId": "4be31b9eec857c0a", "scanner": "scanner-primary", "fingerprint": "91463d51dc7f0d02", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f657ad7476d47b08", "level": "error", "message": {"text": "Dangling fetch: POST https://api.openai.com/v1/chat/completions (src/lib/memory/compressor.ts:26)"}, "properties": {"repobilityId": "7d3d0c5e149a9930", "scanner": "scanner-primary", "fingerprint": "f657ad7476d47b08", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ded2eb5e5b50b7f0", "level": "error", "message": {"text": "Dangling fetch: POST /api/surfaces/sync (src/lib/surfaces/offline-queue.ts:97)"}, "properties": {"repobilityId": "fb1b63a08ad29012", "scanner": "scanner-primary", "fingerprint": "ded2eb5e5b50b7f0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9339133595676148", "level": "error", "message": {"text": "Dangling fetch: POST https://${HOST}${path} (src/lib/commerce/amazon-pa.ts:83)"}, "properties": {"repobilityId": "8edfb141e060d4d8", "scanner": "scanner-primary", "fingerprint": "9339133595676148", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5d36af6ae6940841", "level": "error", "message": {"text": "Dangling fetch: GET /api/duo/stream/${projectId} (src/hooks/useDuoStream.ts:34)"}, "properties": {"repobilityId": "bf9bbe7123601f5d", "scanner": "scanner-primary", "fingerprint": "5d36af6ae6940841", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-918d728ffb0efc15", "level": "error", "message": {"text": "Dangling fetch: POST /api/connectors/plaid/link-token (src/hooks/connectors/usePlaidLink.ts:18)"}, "properties": {"repobilityId": "cb4326f3c69ef5ea", "scanner": "scanner-primary", "fingerprint": "918d728ffb0efc15", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dae72e3d13a20b73", "level": "error", "message": {"text": "Dangling fetch: POST /api/connectors/plaid/exchange (src/hooks/connectors/usePlaidLink.ts:37)"}, "properties": {"repobilityId": "357fe839870d9b37", "scanner": "scanner-primary", "fingerprint": "dae72e3d13a20b73", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7a9df70922c224b3", "level": "error", "message": {"text": "Dangling fetch: POST /api/connectors/api-key/save (src/hooks/connectors/useApiKeySubmit.ts:16)"}, "properties": {"repobilityId": "a9e3250523f9868c", "scanner": "scanner-primary", "fingerprint": "7a9df70922c224b3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-76437ca2a641b7ee", "level": "error", "message": {"text": "Dangling fetch: POST /api/composio/connect (src/hooks/connectors/useOAuthPopup.ts:51)"}, "properties": {"repobilityId": "68ebe65ff3fbdaad", "scanner": "scanner-primary", "fingerprint": "76437ca2a641b7ee", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-081d3e82069ba131", "level": "error", "message": {"text": "Dangling fetch: POST /api/connectors/oauth/start (src/hooks/connectors/useOAuthPopup.ts:61)"}, "properties": {"repobilityId": "c4ba41e6fc832b1e", "scanner": "scanner-primary", "fingerprint": "081d3e82069ba131", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-813565f327cdd5d4", "level": "error", "message": {"text": "Dangling fetch: GET /api/connectors (src/hooks/connectors/useConnectors.ts:21)"}, "properties": {"repobilityId": "b4c4e7a27c2482df", "scanner": "scanner-primary", "fingerprint": "813565f327cdd5d4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5baa8971ebe192a1", "level": "note", "message": {"text": "Unused endpoint: GET /"}, "properties": {"repobilityId": "4d7a07964b620763", "scanner": "scanner-primary", "fingerprint": "5baa8971ebe192a1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ee07d6cd4eca0396", "level": "note", "message": {"text": "Unused endpoint: POST /edit-file"}, "properties": {"repobilityId": "317b22b48fa620e6", "scanner": "scanner-primary", "fingerprint": "ee07d6cd4eca0396", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0d63ec445402501a", "level": "note", "message": {"text": "Unused endpoint: OPTIONS /edit-file"}, "properties": {"repobilityId": "f3201ef1cd14e937", "scanner": "scanner-primary", "fingerprint": "0d63ec445402501a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}