{"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-f389d1d367bfe75c", "name": "Stray `console.log` in TS/JS \u2014 server.ts:627", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server.ts:627"}, "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-fd5ebdd4035ebd5d", "name": "`truncate` class without `title=` for hover reveal \u2014 AdminPanel.tsx:1280", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 AdminPanel.tsx:1280"}, "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-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-34b2583f79c59ffd", "name": "Very large file: server.ts (4824 lines)", "shortDescription": {"text": "Very large file: server.ts (4824 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-deac7f5b1619984f", "name": "Very large file: AdminPanel.tsx (4038 lines)", "shortDescription": {"text": "Very large file: AdminPanel.tsx (4038 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": "0 test file(s) for 8 source file(s) (ratio 0.00). 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-b3ed68815bca2f8c", "name": "Node manifest has dependencies but no lockfile: package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 12 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-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, tests, lockfile. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-367d4efe554eeccf", "name": "Legacy-named symbol `m_old` in server.ts:3918", "shortDescription": {"text": "Legacy-named symbol `m_old` in server.ts:3918"}, "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-23238561ffe6676d", "name": "Commented-code block (5 lines) in server.ts:1478", "shortDescription": {"text": "Commented-code block (5 lines) in server.ts:1478"}, "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-0c79eebf4496b3ca", "name": "`fetch()` without try/.catch or AbortSignal \u2014 AdminPanel.tsx:854", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 AdminPanel.tsx:854"}, "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-030da566069872e9", "name": "15 env vars used in code but missing from .env.example", "shortDescription": {"text": "15 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `API_KEY`, `JWT_SECRET`, `LEAD_INTAKE_SECRET`, `LEAD_SLA_HOURS`, `LEAD_TRANSFER_TIMEOUT_MIN`, `PUBLIC_BASE_URL`, `SLA_CRON_INTERVAL_MS`, `TELEGRAM_BOT_TOKEN` + 7 more. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-11bde31a8bff8157", "name": "Frontend route `/admin` has no Link/navigate to it \u2014 App.tsx", "shortDescription": {"text": "Frontend route `/admin` has no Link/navigate to it \u2014 App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b4ba6f57ce707b19", "name": "Frontend route `/lidy` has no Link/navigate to it \u2014 App.tsx", "shortDescription": {"text": "Frontend route `/lidy` has no Link/navigate to it \u2014 App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-31cd6d1b056a1a39", "name": "Frontend route `/lidy/*` has no Link/navigate to it \u2014 App.tsx", "shortDescription": {"text": "Frontend route `/lidy/*` has no Link/navigate to it \u2014 App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c6371bc97c8b7006", "name": "Frontend route `/apply` has no Link/navigate to it \u2014 App.tsx", "shortDescription": {"text": "Frontend route `/apply` has no Link/navigate to it \u2014 App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-63d28c543b2f12f5", "name": "Dangling fetch: POST https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage (server.ts:141)", "shortDescription": {"text": "Dangling fetch: POST https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage (server.ts:141)"}, "fullDescription": {"text": "`server.ts:141` calls `POST https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage` 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.telegram.org/bot/<p>/sendmessage`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4756b4c4da7d2088", "name": "Unused endpoint: GET /api/health", "shortDescription": {"text": "Unused endpoint: GET /api/health"}, "fullDescription": {"text": "`server.ts` declares `GET /api/health` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f4a647325db5ce6c", "name": "Unused endpoint: DELETE /api/upload/:filename", "shortDescription": {"text": "Unused endpoint: DELETE /api/upload/:filename"}, "fullDescription": {"text": "`server.ts` declares `DELETE /api/upload/:filename` 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-1bc898b3b7565990", "name": "Unused endpoint: USE /uploads", "shortDescription": {"text": "Unused endpoint: USE /uploads"}, "fullDescription": {"text": "`server.ts` declares `USE /uploads` 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-282d4204cfe40a29", "name": "Unused endpoint: POST /api/leads/website", "shortDescription": {"text": "Unused endpoint: POST /api/leads/website"}, "fullDescription": {"text": "`server.ts` declares `POST /api/leads/website` 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-61a135d864be24ff", "name": "Unused endpoint: POST /api/leads/intake", "shortDescription": {"text": "Unused endpoint: POST /api/leads/intake"}, "fullDescription": {"text": "`server.ts` declares `POST /api/leads/intake` 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-151dce4a68250270", "name": "Unused endpoint: POST /api/lidy/login", "shortDescription": {"text": "Unused endpoint: POST /api/lidy/login"}, "fullDescription": {"text": "`server.ts` declares `POST /api/lidy/login` 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-9c6a9e556657a2b8", "name": "Unused endpoint: POST /api/lidy/logout", "shortDescription": {"text": "Unused endpoint: POST /api/lidy/logout"}, "fullDescription": {"text": "`server.ts` declares `POST /api/lidy/logout` 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-052308f62666abc1", "name": "Unused endpoint: GET /api/lidy/me", "shortDescription": {"text": "Unused endpoint: GET /api/lidy/me"}, "fullDescription": {"text": "`server.ts` declares `GET /api/lidy/me` 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-91a5fde2b6edda99", "name": "Unused endpoint: PUT /api/lidy/me/status", "shortDescription": {"text": "Unused endpoint: PUT /api/lidy/me/status"}, "fullDescription": {"text": "`server.ts` declares `PUT /api/lidy/me/status` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-890521e4c54d9f6a", "name": "Unused endpoint: GET /api/lidy/leads", "shortDescription": {"text": "Unused endpoint: GET /api/lidy/leads"}, "fullDescription": {"text": "`server.ts` declares `GET /api/lidy/leads` 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-382d2fd0172d2127", "name": "Unused endpoint: GET /api/lidy/summary", "shortDescription": {"text": "Unused endpoint: GET /api/lidy/summary"}, "fullDescription": {"text": "`server.ts` declares `GET /api/lidy/summary` 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-e4c4ce2c0383162e", "name": "Unused endpoint: GET /api/lidy/calendar", "shortDescription": {"text": "Unused endpoint: GET /api/lidy/calendar"}, "fullDescription": {"text": "`server.ts` declares `GET /api/lidy/calendar` 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-d9fbe7107147223e", "name": "Unused endpoint: GET /api/lidy/managers", "shortDescription": {"text": "Unused endpoint: GET /api/lidy/managers"}, "fullDescription": {"text": "`server.ts` declares `GET /api/lidy/managers` 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-b31a2126804c620a", "name": "Unused endpoint: POST /api/lidy/leads/:id/status", "shortDescription": {"text": "Unused endpoint: POST /api/lidy/leads/:id/status"}, "fullDescription": {"text": "`server.ts` declares `POST /api/lidy/leads/:id/status` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-18587cf5f55fe419", "name": "Unused endpoint: GET /api/lidy/leads/:id", "shortDescription": {"text": "Unused endpoint: GET /api/lidy/leads/:id"}, "fullDescription": {"text": "`server.ts` declares `GET /api/lidy/leads/:id` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8896bbe70006e84d", "name": "Unused endpoint: GET /api/lidy/leads/:id/related", "shortDescription": {"text": "Unused endpoint: GET /api/lidy/leads/:id/related"}, "fullDescription": {"text": "`server.ts` declares `GET /api/lidy/leads/:id/related` 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-64d49763a8dfcf23", "name": "Unused endpoint: POST /api/lidy/leads/:id/stage", "shortDescription": {"text": "Unused endpoint: POST /api/lidy/leads/:id/stage"}, "fullDescription": {"text": "`server.ts` declares `POST /api/lidy/leads/:id/stage` 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-2518d3ccf6eb73e7", "name": "Unused endpoint: GET /api/lidy/tags", "shortDescription": {"text": "Unused endpoint: GET /api/lidy/tags"}, "fullDescription": {"text": "`server.ts` declares `GET /api/lidy/tags` 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-84ddbbd97a216cde", "name": "Unused endpoint: GET /api/lidy/leads/:id/tags", "shortDescription": {"text": "Unused endpoint: GET /api/lidy/leads/:id/tags"}, "fullDescription": {"text": "`server.ts` declares `GET /api/lidy/leads/:id/tags` 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-64d42e07092e6bc2", "name": "Unused endpoint: POST /api/lidy/leads/:id/tags", "shortDescription": {"text": "Unused endpoint: POST /api/lidy/leads/:id/tags"}, "fullDescription": {"text": "`server.ts` declares `POST /api/lidy/leads/:id/tags` 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-b894992fa79f9e63", "name": "Unused endpoint: DELETE /api/lidy/leads/:id/tags/:tagId", "shortDescription": {"text": "Unused endpoint: DELETE /api/lidy/leads/:id/tags/:tagId"}, "fullDescription": {"text": "`server.ts` declares `DELETE /api/lidy/leads/:id/tags/:tagId` 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-3a03559aae2919f9", "name": "Unused endpoint: GET /api/lidy/tasks/my", "shortDescription": {"text": "Unused endpoint: GET /api/lidy/tasks/my"}, "fullDescription": {"text": "`server.ts` declares `GET /api/lidy/tasks/my` 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-828ee96d97985ca7", "name": "Unused endpoint: GET /api/lidy/leads/:id/tasks", "shortDescription": {"text": "Unused endpoint: GET /api/lidy/leads/:id/tasks"}, "fullDescription": {"text": "`server.ts` declares `GET /api/lidy/leads/:id/tasks` 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-6169eaca98e602d9", "name": "Unused endpoint: POST /api/lidy/leads/:id/tasks", "shortDescription": {"text": "Unused endpoint: POST /api/lidy/leads/:id/tasks"}, "fullDescription": {"text": "`server.ts` declares `POST /api/lidy/leads/:id/tasks` 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-ba868e841bdfa49f", "name": "Unused endpoint: PUT /api/lidy/tasks/:id", "shortDescription": {"text": "Unused endpoint: PUT /api/lidy/tasks/:id"}, "fullDescription": {"text": "`server.ts` declares `PUT /api/lidy/tasks/:id` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d644618cd5ef1754", "name": "Unused endpoint: DELETE /api/lidy/tasks/:id", "shortDescription": {"text": "Unused endpoint: DELETE /api/lidy/tasks/:id"}, "fullDescription": {"text": "`server.ts` declares `DELETE /api/lidy/tasks/:id` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fd9100ab7d2b37aa", "name": "Unused endpoint: GET /api/lidy/leads/:id/files", "shortDescription": {"text": "Unused endpoint: GET /api/lidy/leads/:id/files"}, "fullDescription": {"text": "`server.ts` declares `GET /api/lidy/leads/:id/files` 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-a10ba380bc73141e", "name": "Unused endpoint: POST /api/lidy/leads/:id/files", "shortDescription": {"text": "Unused endpoint: POST /api/lidy/leads/:id/files"}, "fullDescription": {"text": "`server.ts` declares `POST /api/lidy/leads/:id/files` 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-2765d437ddfe248b", "name": "Unused endpoint: DELETE /api/lidy/files/:id", "shortDescription": {"text": "Unused endpoint: DELETE /api/lidy/files/:id"}, "fullDescription": {"text": "`server.ts` declares `DELETE /api/lidy/files/:id` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e2771e03f5e24272", "name": "Unused endpoint: GET /api/lidy/leads/:id/audit", "shortDescription": {"text": "Unused endpoint: GET /api/lidy/leads/:id/audit"}, "fullDescription": {"text": "`server.ts` declares `GET /api/lidy/leads/:id/audit` 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-501bb8f6296b8e06", "name": "Unused endpoint: GET /api/lidy/quick-replies", "shortDescription": {"text": "Unused endpoint: GET /api/lidy/quick-replies"}, "fullDescription": {"text": "`server.ts` declares `GET /api/lidy/quick-replies` 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-63aebda13ed6f74b", "name": "Unused endpoint: POST /api/lidy/leads/bulk", "shortDescription": {"text": "Unused endpoint: POST /api/lidy/leads/bulk"}, "fullDescription": {"text": "`server.ts` declares `POST /api/lidy/leads/bulk` 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-c84f64003fab2392", "name": "Unused endpoint: GET /api/lidy/push/vapid-public-key", "shortDescription": {"text": "Unused endpoint: GET /api/lidy/push/vapid-public-key"}, "fullDescription": {"text": "`server.ts` declares `GET /api/lidy/push/vapid-public-key` 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-780ff8a717f28a75", "name": "Unused endpoint: POST /api/lidy/push/subscribe", "shortDescription": {"text": "Unused endpoint: POST /api/lidy/push/subscribe"}, "fullDescription": {"text": "`server.ts` declares `POST /api/lidy/push/subscribe` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3d7001a0375ef610", "name": "Unused endpoint: DELETE /api/lidy/push/subscribe", "shortDescription": {"text": "Unused endpoint: DELETE /api/lidy/push/subscribe"}, "fullDescription": {"text": "`server.ts` declares `DELETE /api/lidy/push/subscribe` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cedd5b9dcec41fc8", "name": "Unused endpoint: GET /api/lidy/filter-presets", "shortDescription": {"text": "Unused endpoint: GET /api/lidy/filter-presets"}, "fullDescription": {"text": "`server.ts` declares `GET /api/lidy/filter-presets` 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-22572574cef2faf6", "name": "Unused endpoint: POST /api/lidy/filter-presets", "shortDescription": {"text": "Unused endpoint: POST /api/lidy/filter-presets"}, "fullDescription": {"text": "`server.ts` declares `POST /api/lidy/filter-presets` 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-1187773cfb350666", "name": "Unused endpoint: DELETE /api/lidy/filter-presets/:id", "shortDescription": {"text": "Unused endpoint: DELETE /api/lidy/filter-presets/:id"}, "fullDescription": {"text": "`server.ts` declares `DELETE /api/lidy/filter-presets/:id` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-719eb91eb6616afd", "name": "Unused endpoint: POST /api/lidy/partner/leads", "shortDescription": {"text": "Unused endpoint: POST /api/lidy/partner/leads"}, "fullDescription": {"text": "`server.ts` declares `POST /api/lidy/partner/leads` 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-66d2405215fddc53", "name": "Unused endpoint: POST /api/lidy/leads/:id/touch", "shortDescription": {"text": "Unused endpoint: POST /api/lidy/leads/:id/touch"}, "fullDescription": {"text": "`server.ts` declares `POST /api/lidy/leads/:id/touch` 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-cc2dca969b454ebf", "name": "Unused endpoint: GET /api/lidy/leads/:id/touches", "shortDescription": {"text": "Unused endpoint: GET /api/lidy/leads/:id/touches"}, "fullDescription": {"text": "`server.ts` declares `GET /api/lidy/leads/:id/touches` 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-9fc0df2660d5f789", "name": "Unused endpoint: GET /api/lidy/leads/:id/transitions", "shortDescription": {"text": "Unused endpoint: GET /api/lidy/leads/:id/transitions"}, "fullDescription": {"text": "`server.ts` declares `GET /api/lidy/leads/:id/transitions` 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-a5e72dd8ef29c7fd", "name": "Unused endpoint: GET /api/lidy/churn-reasons", "shortDescription": {"text": "Unused endpoint: GET /api/lidy/churn-reasons"}, "fullDescription": {"text": "`server.ts` declares `GET /api/lidy/churn-reasons` 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-3a1e9a6004abb9ab", "name": "Unused endpoint: POST /api/lidy/leads/:id/churn-reason", "shortDescription": {"text": "Unused endpoint: POST /api/lidy/leads/:id/churn-reason"}, "fullDescription": {"text": "`server.ts` declares `POST /api/lidy/leads/:id/churn-reason` 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-28aa16a26c051eb2", "name": "Unused endpoint: GET /api/lidy/kb", "shortDescription": {"text": "Unused endpoint: GET /api/lidy/kb"}, "fullDescription": {"text": "`server.ts` declares `GET /api/lidy/kb` 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-4ede3f5023a0a0a0", "name": "Unused endpoint: GET /api/lidy/kb/:slug", "shortDescription": {"text": "Unused endpoint: GET /api/lidy/kb/:slug"}, "fullDescription": {"text": "`server.ts` declares `GET /api/lidy/kb/:slug` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c902e9a04eca6dc3", "name": "Unused endpoint: GET /api/lidy/forecast", "shortDescription": {"text": "Unused endpoint: GET /api/lidy/forecast"}, "fullDescription": {"text": "`server.ts` declares `GET /api/lidy/forecast` 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-8edf2b090b113244", "name": "Unused endpoint: GET /api/lidy/leads/:id/comments", "shortDescription": {"text": "Unused endpoint: GET /api/lidy/leads/:id/comments"}, "fullDescription": {"text": "`server.ts` declares `GET /api/lidy/leads/:id/comments` 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-ea566e9b959b8c1d", "name": "Unused endpoint: POST /api/lidy/leads/:id/comments", "shortDescription": {"text": "Unused endpoint: POST /api/lidy/leads/:id/comments"}, "fullDescription": {"text": "`server.ts` declares `POST /api/lidy/leads/:id/comments` 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-821ac7d29bb18dd6", "name": "Unused endpoint: GET /api/events/:slug", "shortDescription": {"text": "Unused endpoint: GET /api/events/:slug"}, "fullDescription": {"text": "`server.ts` declares `GET /api/events/:slug` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/29836"}, "properties": {"repository": "TamerCOD/go-global-education-abroad", "repoUrl": "https://github.com/TamerCOD/go-global-education-abroad", "branch": "main"}, "results": [{"ruleId": "scanner-f389d1d367bfe75c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server.ts:627"}, "properties": {"repobilityId": "63422c4893a0b074", "scanner": "scanner-primary", "fingerprint": "f389d1d367bfe75c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fd5ebdd4035ebd5d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 AdminPanel.tsx:1280"}, "properties": {"repobilityId": "91c73752a78db796", "scanner": "scanner-primary", "fingerprint": "fd5ebdd4035ebd5d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"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-34b2583f79c59ffd", "level": "note", "message": {"text": "Very large file: server.ts (4824 lines)"}, "properties": {"repobilityId": "83bb4401a5276cc8", "scanner": "scanner-primary", "fingerprint": "34b2583f79c59ffd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-deac7f5b1619984f", "level": "note", "message": {"text": "Very large file: AdminPanel.tsx (4038 lines)"}, "properties": {"repobilityId": "be551ac23be98b76", "scanner": "scanner-primary", "fingerprint": "deac7f5b1619984f", "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": "ad4af9023dd3bafa", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-b3ed68815bca2f8c", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: package.json"}, "properties": {"repobilityId": "7edae0550c126386", "scanner": "scanner-primary", "fingerprint": "b3ed68815bca2f8c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "f4ff5b6f0dd0b260", "scanner": "scanner-primary", "fingerprint": "3ab5d313dda8e5f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["debug", "cleanup", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "60b16bc78471a862", "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": "warning", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "ac0ddab259659353", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-367d4efe554eeccf", "level": "note", "message": {"text": "Legacy-named symbol `m_old` in server.ts:3918"}, "properties": {"repobilityId": "6f84a783a124b31c", "scanner": "scanner-primary", "fingerprint": "367d4efe554eeccf", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-23238561ffe6676d", "level": "none", "message": {"text": "Commented-code block (5 lines) in server.ts:1478"}, "properties": {"repobilityId": "b88b4349455913b4", "scanner": "scanner-primary", "fingerprint": "23238561ffe6676d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0c79eebf4496b3ca", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 AdminPanel.tsx:854"}, "properties": {"repobilityId": "3528690f72d3f30c", "scanner": "scanner-primary", "fingerprint": "0c79eebf4496b3ca", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-030da566069872e9", "level": "note", "message": {"text": "15 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "0519c1c0e8c1f8e4", "scanner": "scanner-primary", "fingerprint": "030da566069872e9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-11bde31a8bff8157", "level": "warning", "message": {"text": "Frontend route `/admin` has no Link/navigate to it \u2014 App.tsx"}, "properties": {"repobilityId": "e269d8c44c29ba87", "scanner": "scanner-primary", "fingerprint": "11bde31a8bff8157", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-b4ba6f57ce707b19", "level": "warning", "message": {"text": "Frontend route `/lidy` has no Link/navigate to it \u2014 App.tsx"}, "properties": {"repobilityId": "7275cc56efec4a53", "scanner": "scanner-primary", "fingerprint": "b4ba6f57ce707b19", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-31cd6d1b056a1a39", "level": "warning", "message": {"text": "Frontend route `/lidy/*` has no Link/navigate to it \u2014 App.tsx"}, "properties": {"repobilityId": "245b536689ca828b", "scanner": "scanner-primary", "fingerprint": "31cd6d1b056a1a39", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-c6371bc97c8b7006", "level": "warning", "message": {"text": "Frontend route `/apply` has no Link/navigate to it \u2014 App.tsx"}, "properties": {"repobilityId": "6e9d42145ec5d3eb", "scanner": "scanner-primary", "fingerprint": "c6371bc97c8b7006", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-63d28c543b2f12f5", "level": "error", "message": {"text": "Dangling fetch: POST https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage (server.ts:141)"}, "properties": {"repobilityId": "a163a349deba6838", "scanner": "scanner-primary", "fingerprint": "63d28c543b2f12f5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4756b4c4da7d2088", "level": "note", "message": {"text": "Unused endpoint: GET /api/health"}, "properties": {"repobilityId": "d280fd2cb4f5107b", "scanner": "scanner-primary", "fingerprint": "4756b4c4da7d2088", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f4a647325db5ce6c", "level": "note", "message": {"text": "Unused endpoint: DELETE /api/upload/:filename"}, "properties": {"repobilityId": "4ca0cf75fee6105b", "scanner": "scanner-primary", "fingerprint": "f4a647325db5ce6c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1bc898b3b7565990", "level": "note", "message": {"text": "Unused endpoint: USE /uploads"}, "properties": {"repobilityId": "d7051bab5c3530ff", "scanner": "scanner-primary", "fingerprint": "1bc898b3b7565990", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-282d4204cfe40a29", "level": "note", "message": {"text": "Unused endpoint: POST /api/leads/website"}, "properties": {"repobilityId": "5ba991046d8af9f7", "scanner": "scanner-primary", "fingerprint": "282d4204cfe40a29", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-61a135d864be24ff", "level": "note", "message": {"text": "Unused endpoint: POST /api/leads/intake"}, "properties": {"repobilityId": "315bbeefb94d665a", "scanner": "scanner-primary", "fingerprint": "61a135d864be24ff", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-151dce4a68250270", "level": "note", "message": {"text": "Unused endpoint: POST /api/lidy/login"}, "properties": {"repobilityId": "508c8e3bbeddb541", "scanner": "scanner-primary", "fingerprint": "151dce4a68250270", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9c6a9e556657a2b8", "level": "note", "message": {"text": "Unused endpoint: POST /api/lidy/logout"}, "properties": {"repobilityId": "73064f1ba2c76597", "scanner": "scanner-primary", "fingerprint": "9c6a9e556657a2b8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-052308f62666abc1", "level": "note", "message": {"text": "Unused endpoint: GET /api/lidy/me"}, "properties": {"repobilityId": "e8d187567e8ec15e", "scanner": "scanner-primary", "fingerprint": "052308f62666abc1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-91a5fde2b6edda99", "level": "note", "message": {"text": "Unused endpoint: PUT /api/lidy/me/status"}, "properties": {"repobilityId": "fef6cdfc2d29f253", "scanner": "scanner-primary", "fingerprint": "91a5fde2b6edda99", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-890521e4c54d9f6a", "level": "note", "message": {"text": "Unused endpoint: GET /api/lidy/leads"}, "properties": {"repobilityId": "d1c22e70ce444ffe", "scanner": "scanner-primary", "fingerprint": "890521e4c54d9f6a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-382d2fd0172d2127", "level": "note", "message": {"text": "Unused endpoint: GET /api/lidy/summary"}, "properties": {"repobilityId": "643aeee6645bf517", "scanner": "scanner-primary", "fingerprint": "382d2fd0172d2127", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e4c4ce2c0383162e", "level": "note", "message": {"text": "Unused endpoint: GET /api/lidy/calendar"}, "properties": {"repobilityId": "5b7b780d8bf415c3", "scanner": "scanner-primary", "fingerprint": "e4c4ce2c0383162e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d9fbe7107147223e", "level": "note", "message": {"text": "Unused endpoint: GET /api/lidy/managers"}, "properties": {"repobilityId": "7b77c8a0b97da7a7", "scanner": "scanner-primary", "fingerprint": "d9fbe7107147223e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b31a2126804c620a", "level": "note", "message": {"text": "Unused endpoint: POST /api/lidy/leads/:id/status"}, "properties": {"repobilityId": "2716a1ff59225f0c", "scanner": "scanner-primary", "fingerprint": "b31a2126804c620a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-18587cf5f55fe419", "level": "note", "message": {"text": "Unused endpoint: GET /api/lidy/leads/:id"}, "properties": {"repobilityId": "4befcec27606cbed", "scanner": "scanner-primary", "fingerprint": "18587cf5f55fe419", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8896bbe70006e84d", "level": "note", "message": {"text": "Unused endpoint: GET /api/lidy/leads/:id/related"}, "properties": {"repobilityId": "9465939a09a3f8c5", "scanner": "scanner-primary", "fingerprint": "8896bbe70006e84d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-64d49763a8dfcf23", "level": "note", "message": {"text": "Unused endpoint: POST /api/lidy/leads/:id/stage"}, "properties": {"repobilityId": "e2d7977dcfa7571c", "scanner": "scanner-primary", "fingerprint": "64d49763a8dfcf23", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2518d3ccf6eb73e7", "level": "note", "message": {"text": "Unused endpoint: GET /api/lidy/tags"}, "properties": {"repobilityId": "d8f578384e4b4747", "scanner": "scanner-primary", "fingerprint": "2518d3ccf6eb73e7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-84ddbbd97a216cde", "level": "note", "message": {"text": "Unused endpoint: GET /api/lidy/leads/:id/tags"}, "properties": {"repobilityId": "9f49dd807308c23a", "scanner": "scanner-primary", "fingerprint": "84ddbbd97a216cde", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-64d42e07092e6bc2", "level": "note", "message": {"text": "Unused endpoint: POST /api/lidy/leads/:id/tags"}, "properties": {"repobilityId": "f862b76620260edb", "scanner": "scanner-primary", "fingerprint": "64d42e07092e6bc2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b894992fa79f9e63", "level": "note", "message": {"text": "Unused endpoint: DELETE /api/lidy/leads/:id/tags/:tagId"}, "properties": {"repobilityId": "aa8a3a1b66ced552", "scanner": "scanner-primary", "fingerprint": "b894992fa79f9e63", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3a03559aae2919f9", "level": "note", "message": {"text": "Unused endpoint: GET /api/lidy/tasks/my"}, "properties": {"repobilityId": "fc368852d6a851ca", "scanner": "scanner-primary", "fingerprint": "3a03559aae2919f9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-828ee96d97985ca7", "level": "note", "message": {"text": "Unused endpoint: GET /api/lidy/leads/:id/tasks"}, "properties": {"repobilityId": "5c725dd1bdfadf9d", "scanner": "scanner-primary", "fingerprint": "828ee96d97985ca7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6169eaca98e602d9", "level": "note", "message": {"text": "Unused endpoint: POST /api/lidy/leads/:id/tasks"}, "properties": {"repobilityId": "e915d2341fcb4f56", "scanner": "scanner-primary", "fingerprint": "6169eaca98e602d9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ba868e841bdfa49f", "level": "note", "message": {"text": "Unused endpoint: PUT /api/lidy/tasks/:id"}, "properties": {"repobilityId": "92cfb3dd576f778b", "scanner": "scanner-primary", "fingerprint": "ba868e841bdfa49f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d644618cd5ef1754", "level": "note", "message": {"text": "Unused endpoint: DELETE /api/lidy/tasks/:id"}, "properties": {"repobilityId": "a9f5843b872e787b", "scanner": "scanner-primary", "fingerprint": "d644618cd5ef1754", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fd9100ab7d2b37aa", "level": "note", "message": {"text": "Unused endpoint: GET /api/lidy/leads/:id/files"}, "properties": {"repobilityId": "fc324c88b85e0d03", "scanner": "scanner-primary", "fingerprint": "fd9100ab7d2b37aa", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a10ba380bc73141e", "level": "note", "message": {"text": "Unused endpoint: POST /api/lidy/leads/:id/files"}, "properties": {"repobilityId": "cf18e5333e821b1c", "scanner": "scanner-primary", "fingerprint": "a10ba380bc73141e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2765d437ddfe248b", "level": "note", "message": {"text": "Unused endpoint: DELETE /api/lidy/files/:id"}, "properties": {"repobilityId": "9ae464a15338b31a", "scanner": "scanner-primary", "fingerprint": "2765d437ddfe248b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e2771e03f5e24272", "level": "note", "message": {"text": "Unused endpoint: GET /api/lidy/leads/:id/audit"}, "properties": {"repobilityId": "10285bc0be374215", "scanner": "scanner-primary", "fingerprint": "e2771e03f5e24272", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-501bb8f6296b8e06", "level": "note", "message": {"text": "Unused endpoint: GET /api/lidy/quick-replies"}, "properties": {"repobilityId": "2f082333135cda77", "scanner": "scanner-primary", "fingerprint": "501bb8f6296b8e06", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-63aebda13ed6f74b", "level": "note", "message": {"text": "Unused endpoint: POST /api/lidy/leads/bulk"}, "properties": {"repobilityId": "619e7c9c667e1b58", "scanner": "scanner-primary", "fingerprint": "63aebda13ed6f74b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c84f64003fab2392", "level": "note", "message": {"text": "Unused endpoint: GET /api/lidy/push/vapid-public-key"}, "properties": {"repobilityId": "020e35bfc7621282", "scanner": "scanner-primary", "fingerprint": "c84f64003fab2392", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-780ff8a717f28a75", "level": "note", "message": {"text": "Unused endpoint: POST /api/lidy/push/subscribe"}, "properties": {"repobilityId": "b91a47c706b57b1b", "scanner": "scanner-primary", "fingerprint": "780ff8a717f28a75", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3d7001a0375ef610", "level": "note", "message": {"text": "Unused endpoint: DELETE /api/lidy/push/subscribe"}, "properties": {"repobilityId": "697d7a769f9bec37", "scanner": "scanner-primary", "fingerprint": "3d7001a0375ef610", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cedd5b9dcec41fc8", "level": "note", "message": {"text": "Unused endpoint: GET /api/lidy/filter-presets"}, "properties": {"repobilityId": "f84b200b3d460176", "scanner": "scanner-primary", "fingerprint": "cedd5b9dcec41fc8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-22572574cef2faf6", "level": "note", "message": {"text": "Unused endpoint: POST /api/lidy/filter-presets"}, "properties": {"repobilityId": "4b945e6a45cc0b16", "scanner": "scanner-primary", "fingerprint": "22572574cef2faf6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1187773cfb350666", "level": "note", "message": {"text": "Unused endpoint: DELETE /api/lidy/filter-presets/:id"}, "properties": {"repobilityId": "863af900a039fafd", "scanner": "scanner-primary", "fingerprint": "1187773cfb350666", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-719eb91eb6616afd", "level": "note", "message": {"text": "Unused endpoint: POST /api/lidy/partner/leads"}, "properties": {"repobilityId": "aa6231d50a72a74d", "scanner": "scanner-primary", "fingerprint": "719eb91eb6616afd", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-66d2405215fddc53", "level": "note", "message": {"text": "Unused endpoint: POST /api/lidy/leads/:id/touch"}, "properties": {"repobilityId": "0dd1d6c407d93907", "scanner": "scanner-primary", "fingerprint": "66d2405215fddc53", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cc2dca969b454ebf", "level": "note", "message": {"text": "Unused endpoint: GET /api/lidy/leads/:id/touches"}, "properties": {"repobilityId": "c3c38df3ce1625e2", "scanner": "scanner-primary", "fingerprint": "cc2dca969b454ebf", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9fc0df2660d5f789", "level": "note", "message": {"text": "Unused endpoint: GET /api/lidy/leads/:id/transitions"}, "properties": {"repobilityId": "113aa00bc77cf315", "scanner": "scanner-primary", "fingerprint": "9fc0df2660d5f789", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a5e72dd8ef29c7fd", "level": "note", "message": {"text": "Unused endpoint: GET /api/lidy/churn-reasons"}, "properties": {"repobilityId": "1c58c1fc6b33490e", "scanner": "scanner-primary", "fingerprint": "a5e72dd8ef29c7fd", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3a1e9a6004abb9ab", "level": "note", "message": {"text": "Unused endpoint: POST /api/lidy/leads/:id/churn-reason"}, "properties": {"repobilityId": "331f2cb1aab91cd7", "scanner": "scanner-primary", "fingerprint": "3a1e9a6004abb9ab", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-28aa16a26c051eb2", "level": "note", "message": {"text": "Unused endpoint: GET /api/lidy/kb"}, "properties": {"repobilityId": "428aa8ccdf3cc9fe", "scanner": "scanner-primary", "fingerprint": "28aa16a26c051eb2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4ede3f5023a0a0a0", "level": "note", "message": {"text": "Unused endpoint: GET /api/lidy/kb/:slug"}, "properties": {"repobilityId": "e1f345bd9ec89498", "scanner": "scanner-primary", "fingerprint": "4ede3f5023a0a0a0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c902e9a04eca6dc3", "level": "note", "message": {"text": "Unused endpoint: GET /api/lidy/forecast"}, "properties": {"repobilityId": "60b171ae5fc74182", "scanner": "scanner-primary", "fingerprint": "c902e9a04eca6dc3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8edf2b090b113244", "level": "note", "message": {"text": "Unused endpoint: GET /api/lidy/leads/:id/comments"}, "properties": {"repobilityId": "81833fdb338667ae", "scanner": "scanner-primary", "fingerprint": "8edf2b090b113244", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ea566e9b959b8c1d", "level": "note", "message": {"text": "Unused endpoint: POST /api/lidy/leads/:id/comments"}, "properties": {"repobilityId": "319c2c2b173b8245", "scanner": "scanner-primary", "fingerprint": "ea566e9b959b8c1d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-821ac7d29bb18dd6", "level": "note", "message": {"text": "Unused endpoint: GET /api/events/:slug"}, "properties": {"repobilityId": "7419aa8ff334ea7c", "scanner": "scanner-primary", "fingerprint": "821ac7d29bb18dd6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}