{"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-e9cc6e3624d0d536", "name": "Stray `console.log` in TS/JS \u2014 backend/seed-admin.ts:19", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/seed-admin.ts:19"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e1fc2fa5c98d61f9", "name": "Stray `console.log` in TS/JS \u2014 backend/make-admin.ts:12", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/make-admin.ts:12"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7cb48204539f8e0e", "name": "Stray `console.log` in TS/JS \u2014 backend/check-db.ts:8", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/check-db.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-4bdf6ef57077259f", "name": "Stray `console.log` in TS/JS \u2014 backend/src/server.ts:61", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/server.ts:61"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-20e5e7e351af18fc", "name": "Stray `console.log` in TS/JS \u2014 backend/src/scripts/seed-test-data.ts:43", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/scripts/seed-test-data.ts:43"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d485f0064e3be6c3", "name": "Stray `console.log` in TS/JS \u2014 backend/src/scripts/migrate-mysql.ts:133", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/scripts/migrate-mysql.ts:133"}, "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-a3dc288cb6ccb290", "name": "Stray `console.log` in TS/JS \u2014 backend/src/utils/email.ts:41", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/utils/email.ts:41"}, "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-a8dbbd663dd4f1fb", "name": "Stray `console.log` in TS/JS \u2014 backend/src/utils/sms.ts:20", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/utils/sms.ts:20"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-90bd18eeb02328a6", "name": "Stray `console.log` in TS/JS \u2014 backend/src/utils/seed.ts:9", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/utils/seed.ts:9"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3d37512e8c382884", "name": "Stray `console.log` in TS/JS \u2014 backend/src/utils/cloudinary.ts:25", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/utils/cloudinary.ts:25"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-93615aa1a4c18277", "name": "Stray `console.log` in TS/JS \u2014 backend/src/controllers/authController.ts:94", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/controllers/authController.ts:94"}, "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-2b354445ab58062b", "name": "Stray `console.log` in TS/JS \u2014 backend/src/config/database.ts:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/config/database.ts:11"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0580b259ed3d3c6c", "name": "Stray `console.log` in TS/JS \u2014 backend/src/config/passport.ts:63", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/config/passport.ts:63"}, "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-98fa909f83f36206", "name": "Stray `console.log` in TS/JS \u2014 backend/src/routes/upload.ts:16", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/routes/upload.ts:16"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3d4f3403d4422454", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/app/page.tsx:124", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/app/page.tsx:124"}, "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-e214146fc12bab9b", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 frontend/src/app/page.tsx:669", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 frontend/src/app/page.tsx:669"}, "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-f243b449fc9ac54b", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/app/dashboard/page.tsx:324", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/app/dashboard/page.tsx:324"}, "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-18ccd01b740098ba", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/app/athlete/[id]/page.tsx:471", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/app/athlete/[id]/page.tsx:471"}, "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-1bed0e29f86131c5", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/app/jobs/[id]/page.tsx:357", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/app/jobs/[id]/page.tsx:357"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0e9ad027244a15d6", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/app/admin/page.tsx:503", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/app/admin/page.tsx:503"}, "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-78f5c049a8474ddf", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/app/my-connections/page.tsx:129", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/app/my-connections/page.tsx:129"}, "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-59a0562582406555", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/app/messages/page.tsx:255", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/app/messages/page.tsx:255"}, "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-f2f9d87e3e56107a", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/app/settings/page.tsx:588", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/app/settings/page.tsx:588"}, "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-b8aca757a8a113c6", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/app/org/[id]/page.tsx:406", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/app/org/[id]/page.tsx:406"}, "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-ccbd93f7cc44e4b4", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/layout/Navbar.tsx:194", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/layout/Navbar.tsx:194"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7792bf5ff64ea8d9", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/shared/PlayerCard.tsx:41", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/shared/PlayerCard.tsx:41"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9693ec8a8b5de261", "name": "Possible secret in backend/seed-admin.ts", "shortDescription": {"text": "Possible secret in backend/seed-admin.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-a583d14dc455ba21", "name": "Possible secret in backend/src/scripts/seed-test-data.ts", "shortDescription": {"text": "Possible secret in backend/src/scripts/seed-test-data.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-b27fd92388a469c5", "name": "Insecure pattern 'dangerous_innerhtml' in frontend/src/app/page.tsx:669", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in frontend/src/app/page.tsx:669"}, "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-661991c7752e8421", "name": "Insecure pattern 'local_storage_auth_token' in frontend/src/store/authStore.ts:44", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in frontend/src/store/authStore.ts:44"}, "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-ebee0353e1204695", "name": "Insecure pattern 'local_storage_auth_token' in frontend/src/lib/api.ts:71", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in frontend/src/lib/api.ts:71"}, "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-a19243c02e2628ff", "name": "Possible secret in Linksports App/mongo-init/01_create_user.js", "shortDescription": {"text": "Possible secret in Linksports App/mongo-init/01_create_user.js"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-604bb5cf80e81bda", "name": "Insecure pattern 'local_storage_auth_token' in Linksports App/admin-panel/src/components/AdminLogin.jsx:17", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in Linksports App/admin-panel/src/components/AdminLogin.jsx:17"}, "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-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-371bc263c4fa2266", "name": "Very large file: frontend/src/app/profile/edit/page.tsx (1291 lines)", "shortDescription": {"text": "Very large file: frontend/src/app/profile/edit/page.tsx (1291 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "1 test file(s) for 128 source file(s) (ratio 0.01). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 59 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 142 placeholder/mock markers across 29 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, ci, tests. 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-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, tests. 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-27e5df6e580838a3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/app/profile/edit/page.tsx:1205", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/app/profile/edit/page.tsx:1205"}, "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-cc0f9d8e41b33b0e", "name": "11 env vars used in code but missing from .env.example", "shortDescription": {"text": "11 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `CLOUDINARY_URL`, `FRONTEND_URL`, `MYSQL_DUMP_PATH`, `NEXT_PUBLIC_API_URL`, `NEXT_PUBLIC_SOCKET_URL`, `PUBLIC_API_BASE`, `RENDER_EXTERNAL_URL`, `TWILIO_ACCOUNT_SID` + 3 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-4bf5ba8a7ad6d28b", "name": "JS POST `/admin/users` admin endpoint without auth \u2014 frontend/src/lib/api.ts:215", "shortDescription": {"text": "JS POST `/admin/users` admin endpoint without auth \u2014 frontend/src/lib/api.ts:215"}, "fullDescription": {"text": "Admin-scoped JS route with no recognizable auth: no middleware-position guard, no router-level guard above it in this file, and no inline permission call within the first 15 lines of the handler. If auth is applied where this router is mounted, dismiss with reason `by_design` or tag the route `// public-by-design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d384786014cb640b", "name": "JS PATCH `/admin/users/${id}` admin endpoint without auth \u2014 frontend/src/lib/api.ts:216", "shortDescription": {"text": "JS PATCH `/admin/users/${id}` admin endpoint without auth \u2014 frontend/src/lib/api.ts:216"}, "fullDescription": {"text": "Admin-scoped JS route with no recognizable auth: no middleware-position guard, no router-level guard above it in this file, and no inline permission call within the first 15 lines of the handler. If auth is applied where this router is mounted, dismiss with reason `by_design` or tag the route `// public-by-design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-31457c1f648f7604", "name": "JS DELETE `/admin/users/${id}` admin endpoint without auth \u2014 frontend/src/lib/api.ts:217", "shortDescription": {"text": "JS DELETE `/admin/users/${id}` admin endpoint without auth \u2014 frontend/src/lib/api.ts:217"}, "fullDescription": {"text": "Admin-scoped JS route with no recognizable auth: no middleware-position guard, no router-level guard above it in this file, and no inline permission call within the first 15 lines of the handler. If auth is applied where this router is mounted, dismiss with reason `by_design` or tag the route `// public-by-design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e01f5886d2d92116", "name": "JS PATCH `/admin/users/${id}/suspend` admin endpoint without auth \u2014 frontend/src/lib/api.ts:218", "shortDescription": {"text": "JS PATCH `/admin/users/${id}/suspend` admin endpoint without auth \u2014 frontend/src/lib/api.ts:218"}, "fullDescription": {"text": "Admin-scoped JS route with no recognizable auth: no middleware-position guard, no router-level guard above it in this file, and no inline permission call within the first 15 lines of the handler. If auth is applied where this router is mounted, dismiss with reason `by_design` or tag the route `// public-by-design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bea5f68cada6031a", "name": "JS PATCH `/admin/listings/${id}/review` admin endpoint without auth \u2014 frontend/src/lib/api.ts:221", "shortDescription": {"text": "JS PATCH `/admin/listings/${id}/review` admin endpoint without auth \u2014 frontend/src/lib/api.ts:221"}, "fullDescription": {"text": "Admin-scoped JS route with no recognizable auth: no middleware-position guard, no router-level guard above it in this file, and no inline permission call within the first 15 lines of the handler. If auth is applied where this router is mounted, dismiss with reason `by_design` or tag the route `// public-by-design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c8af29a34b620f98", "name": "JS PATCH `/admin/jobs/${id}/review` admin endpoint without auth \u2014 frontend/src/lib/api.ts:224", "shortDescription": {"text": "JS PATCH `/admin/jobs/${id}/review` admin endpoint without auth \u2014 frontend/src/lib/api.ts:224"}, "fullDescription": {"text": "Admin-scoped JS route with no recognizable auth: no middleware-position guard, no router-level guard above it in this file, and no inline permission call within the first 15 lines of the handler. If auth is applied where this router is mounted, dismiss with reason `by_design` or tag the route `// public-by-design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f040f43099a945b7", "name": "JS PATCH `/admin/organizations/${id}/verify` admin endpoint without auth \u2014 frontend/src/lib/api.ts:227", "shortDescription": {"text": "JS PATCH `/admin/organizations/${id}/verify` admin endpoint without auth \u2014 frontend/src/lib/api.ts:227"}, "fullDescription": {"text": "Admin-scoped JS route with no recognizable auth: no middleware-position guard, no router-level guard above it in this file, and no inline permission call within the first 15 lines of the handler. If auth is applied where this router is mounted, dismiss with reason `by_design` or tag the route `// public-by-design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-076d52152ef1f421", "name": "JS POST `/admin/coupons` admin endpoint without auth \u2014 frontend/src/lib/api.ts:229", "shortDescription": {"text": "JS POST `/admin/coupons` admin endpoint without auth \u2014 frontend/src/lib/api.ts:229"}, "fullDescription": {"text": "Admin-scoped JS route with no recognizable auth: no middleware-position guard, no router-level guard above it in this file, and no inline permission call within the first 15 lines of the handler. If auth is applied where this router is mounted, dismiss with reason `by_design` or tag the route `// public-by-design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0c339befa1472e48", "name": "JS PATCH `/admin/coupons/${id}/toggle` admin endpoint without auth \u2014 frontend/src/lib/api.ts:230", "shortDescription": {"text": "JS PATCH `/admin/coupons/${id}/toggle` admin endpoint without auth \u2014 frontend/src/lib/api.ts:230"}, "fullDescription": {"text": "Admin-scoped JS route with no recognizable auth: no middleware-position guard, no router-level guard above it in this file, and no inline permission call within the first 15 lines of the handler. If auth is applied where this router is mounted, dismiss with reason `by_design` or tag the route `// public-by-design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-03d21a6b37e3daa5", "name": "JS POST `/admin/announcements` admin endpoint without auth \u2014 frontend/src/lib/api.ts:232", "shortDescription": {"text": "JS POST `/admin/announcements` admin endpoint without auth \u2014 frontend/src/lib/api.ts:232"}, "fullDescription": {"text": "Admin-scoped JS route with no recognizable auth: no middleware-position guard, no router-level guard above it in this file, and no inline permission call within the first 15 lines of the handler. If auth is applied where this router is mounted, dismiss with reason `by_design` or tag the route `// public-by-design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-993d6c64103d82c1", "name": "JS PUT `/admin/users/${userId}/verify` admin endpoint without auth \u2014 Linksports App/admin-panel/src/services/api.js:27", "shortDescription": {"text": "JS PUT `/admin/users/${userId}/verify` admin endpoint without auth \u2014 Linksports App/admin-panel/src/services/api.js:27"}, "fullDescription": {"text": "Admin-scoped JS route with no recognizable auth: no middleware-position guard, no router-level guard above it in this file, and no inline permission call within the first 15 lines of the handler. If auth is applied where this router is mounted, dismiss with reason `by_design` or tag the route `// public-by-design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3aa48918571df868", "name": "JS DELETE `/admin/users/${userId}` admin endpoint without auth \u2014 Linksports App/admin-panel/src/services/api.js:28", "shortDescription": {"text": "JS DELETE `/admin/users/${userId}` admin endpoint without auth \u2014 Linksports App/admin-panel/src/services/api.js:28"}, "fullDescription": {"text": "Admin-scoped JS route with no recognizable auth: no middleware-position guard, no router-level guard above it in this file, and no inline permission call within the first 15 lines of the handler. If auth is applied where this router is mounted, dismiss with reason `by_design` or tag the route `// public-by-design`."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-174c0eaa317e2676", "name": "Dangling fetch: GET https://api.postalpincode.in/pincode/${pin} (frontend/src/app/profile/edit/page.tsx:418)", "shortDescription": {"text": "Dangling fetch: GET https://api.postalpincode.in/pincode/${pin} (frontend/src/app/profile/edit/page.tsx:418)"}, "fullDescription": {"text": "`frontend/src/app/profile/edit/page.tsx:418` calls `GET https://api.postalpincode.in/pincode/${pin}` 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.postalpincode.in/pincode/<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-4232a8fd3c75e607", "name": "Dangling fetch: GET https://api.postalpincode.in/pincode/${val} (frontend/src/app/profile/edit/page.tsx:1205)", "shortDescription": {"text": "Dangling fetch: GET https://api.postalpincode.in/pincode/${val} (frontend/src/app/profile/edit/page.tsx:1205)"}, "fullDescription": {"text": "`frontend/src/app/profile/edit/page.tsx:1205` calls `GET https://api.postalpincode.in/pincode/${val}` 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.postalpincode.in/pincode/<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-8fdbacfe9430a6ed", "name": "Unused endpoint: POST /auth/login", "shortDescription": {"text": "Unused endpoint: POST /auth/login"}, "fullDescription": {"text": "`Linksports App/admin-panel/src/services/api.js` declares `POST /auth/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-ac42422b23e45104", "name": "Unused endpoint: GET /auth/me", "shortDescription": {"text": "Unused endpoint: GET /auth/me"}, "fullDescription": {"text": "`Linksports App/admin-panel/src/services/api.js` declares `GET /auth/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-0aba7f1883cb96f2", "name": "Unused endpoint: GET /admin/users", "shortDescription": {"text": "Unused endpoint: GET /admin/users"}, "fullDescription": {"text": "`Linksports App/admin-panel/src/services/api.js` declares `GET /admin/users` 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-dd159bd05997c05c", "name": "Unused endpoint: GET /admin/stats", "shortDescription": {"text": "Unused endpoint: GET /admin/stats"}, "fullDescription": {"text": "`Linksports App/admin-panel/src/services/api.js` declares `GET /admin/stats` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1bc898b3b7565990", "name": "Unused endpoint: USE /uploads", "shortDescription": {"text": "Unused endpoint: USE /uploads"}, "fullDescription": {"text": "`backend/src/app.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-633f9d1a5c910846", "name": "Unused endpoint: USE /api/v1/auth/oauth", "shortDescription": {"text": "Unused endpoint: USE /api/v1/auth/oauth"}, "fullDescription": {"text": "`backend/src/app.ts` declares `USE /api/v1/auth/oauth` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3bec7ccd0b909bea", "name": "Unused endpoint: USE /api/v1/auth", "shortDescription": {"text": "Unused endpoint: USE /api/v1/auth"}, "fullDescription": {"text": "`backend/src/app.ts` declares `USE /api/v1/auth` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7972bbaa4e350ee2", "name": "Unused endpoint: USE /api/v1/profiles", "shortDescription": {"text": "Unused endpoint: USE /api/v1/profiles"}, "fullDescription": {"text": "`backend/src/app.ts` declares `USE /api/v1/profiles` 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-469c05547c847e2b", "name": "Unused endpoint: USE /api/v1/connections", "shortDescription": {"text": "Unused endpoint: USE /api/v1/connections"}, "fullDescription": {"text": "`backend/src/app.ts` declares `USE /api/v1/connections` 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-2614f216a62f9e93", "name": "Unused endpoint: USE /api/v1/listings", "shortDescription": {"text": "Unused endpoint: USE /api/v1/listings"}, "fullDescription": {"text": "`backend/src/app.ts` declares `USE /api/v1/listings` 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-abc84f7cf550516c", "name": "Unused endpoint: USE /api/v1/jobs", "shortDescription": {"text": "Unused endpoint: USE /api/v1/jobs"}, "fullDescription": {"text": "`backend/src/app.ts` declares `USE /api/v1/jobs` 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-f0db8dc34e9f2548", "name": "Unused endpoint: USE /api/v1/messages", "shortDescription": {"text": "Unused endpoint: USE /api/v1/messages"}, "fullDescription": {"text": "`backend/src/app.ts` declares `USE /api/v1/messages` 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-527939ead45dae84", "name": "Unused endpoint: USE /api/v1/notifications", "shortDescription": {"text": "Unused endpoint: USE /api/v1/notifications"}, "fullDescription": {"text": "`backend/src/app.ts` declares `USE /api/v1/notifications` 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-853f5b1b1f304bfc", "name": "Unused endpoint: USE /api/v1/payments", "shortDescription": {"text": "Unused endpoint: USE /api/v1/payments"}, "fullDescription": {"text": "`backend/src/app.ts` declares `USE /api/v1/payments` 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-2cc7f440e42eac79", "name": "Unused endpoint: USE /api/v1/admin", "shortDescription": {"text": "Unused endpoint: USE /api/v1/admin"}, "fullDescription": {"text": "`backend/src/app.ts` declares `USE /api/v1/admin` 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-b27e83224424f7e1", "name": "Unused endpoint: USE /api/v1/upload", "shortDescription": {"text": "Unused endpoint: USE /api/v1/upload"}, "fullDescription": {"text": "`backend/src/app.ts` declares `USE /api/v1/upload` 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-4b1afd0ba2b8f574", "name": "Unused endpoint: USE /api/v1/users", "shortDescription": {"text": "Unused endpoint: USE /api/v1/users"}, "fullDescription": {"text": "`backend/src/app.ts` declares `USE /api/v1/users` 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-63957638bc3fe406", "name": "Unused endpoint: USE /api/v1/reviews", "shortDescription": {"text": "Unused endpoint: USE /api/v1/reviews"}, "fullDescription": {"text": "`backend/src/app.ts` declares `USE /api/v1/reviews` 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-9e8f224eaa152834", "name": "Unused endpoint: GET /api/v1/search", "shortDescription": {"text": "Unused endpoint: GET /api/v1/search"}, "fullDescription": {"text": "`backend/src/app.ts` declares `GET /api/v1/search` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5baa8971ebe192a1", "name": "Unused endpoint: GET /", "shortDescription": {"text": "Unused endpoint: GET /"}, "fullDescription": {"text": "`backend/src/routes/connections.ts` declares `GET /` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3b5c17c01e439662", "name": "Unused endpoint: POST /request", "shortDescription": {"text": "Unused endpoint: POST /request"}, "fullDescription": {"text": "`backend/src/routes/connections.ts` declares `POST /request` 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-9de4cecd0e235584", "name": "Unused endpoint: GET /pending", "shortDescription": {"text": "Unused endpoint: GET /pending"}, "fullDescription": {"text": "`backend/src/routes/connections.ts` declares `GET /pending` 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-e81089756fd4e30a", "name": "Unused endpoint: POST /:id/respond", "shortDescription": {"text": "Unused endpoint: POST /:id/respond"}, "fullDescription": {"text": "`backend/src/routes/connections.ts` declares `POST /:id/respond` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7a61c112b611f4bb", "name": "Unused endpoint: DELETE /:id", "shortDescription": {"text": "Unused endpoint: DELETE /:id"}, "fullDescription": {"text": "`backend/src/routes/connections.ts` declares `DELETE /:id` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2e494a389a6f2b3e", "name": "Unused endpoint: POST /follow", "shortDescription": {"text": "Unused endpoint: POST /follow"}, "fullDescription": {"text": "`backend/src/routes/connections.ts` declares `POST /follow` 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-2dbe4c9caa49a4a5", "name": "Unused endpoint: POST /block", "shortDescription": {"text": "Unused endpoint: POST /block"}, "fullDescription": {"text": "`backend/src/routes/connections.ts` declares `POST /block` 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-1a57aef8c0c00cd6", "name": "Unused endpoint: GET /mine/applications", "shortDescription": {"text": "Unused endpoint: GET /mine/applications"}, "fullDescription": {"text": "`backend/src/routes/jobs.ts` declares `GET /mine/applications` 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-dba6a518433d3812", "name": "Unused endpoint: GET /mine/listings", "shortDescription": {"text": "Unused endpoint: GET /mine/listings"}, "fullDescription": {"text": "`backend/src/routes/jobs.ts` declares `GET /mine/listings` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ca5756175765b49d", "name": "Unused endpoint: GET /:id", "shortDescription": {"text": "Unused endpoint: GET /:id"}, "fullDescription": {"text": "`backend/src/routes/jobs.ts` declares `GET /:id` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7a009b1a56794f45", "name": "Unused endpoint: POST /", "shortDescription": {"text": "Unused endpoint: POST /"}, "fullDescription": {"text": "`backend/src/routes/jobs.ts` declares `POST /` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-28c7e366d4549d97", "name": "Unused endpoint: POST /:id/submit", "shortDescription": {"text": "Unused endpoint: POST /:id/submit"}, "fullDescription": {"text": "`backend/src/routes/jobs.ts` declares `POST /:id/submit` 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-12f691e4167316e2", "name": "Unused endpoint: GET /:id/applications", "shortDescription": {"text": "Unused endpoint: GET /:id/applications"}, "fullDescription": {"text": "`backend/src/routes/jobs.ts` declares `GET /:id/applications` 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-39fb740f7bc3574b", "name": "Unused endpoint: PATCH /:id/applications/:appId/status", "shortDescription": {"text": "Unused endpoint: PATCH /:id/applications/:appId/status"}, "fullDescription": {"text": "`backend/src/routes/jobs.ts` declares `PATCH /:id/applications/:appId/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-2487fbd02806b3a8", "name": "Unused endpoint: POST /:id/apply", "shortDescription": {"text": "Unused endpoint: POST /:id/apply"}, "fullDescription": {"text": "`backend/src/routes/jobs.ts` declares `POST /:id/apply` 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-bb86a49414024054", "name": "Unused endpoint: POST /save", "shortDescription": {"text": "Unused endpoint: POST /save"}, "fullDescription": {"text": "`backend/src/routes/jobs.ts` declares `POST /save` 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-bc043602ec3592ed", "name": "Unused endpoint: GET /my", "shortDescription": {"text": "Unused endpoint: GET /my"}, "fullDescription": {"text": "`backend/src/routes/listings.ts` declares `GET /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-1fe5c55ed56a3393", "name": "Unused endpoint: GET /applications/mine", "shortDescription": {"text": "Unused endpoint: GET /applications/mine"}, "fullDescription": {"text": "`backend/src/routes/listings.ts` declares `GET /applications/mine` 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-5fbc954f63526821", "name": "Unused endpoint: PATCH /:id", "shortDescription": {"text": "Unused endpoint: PATCH /:id"}, "fullDescription": {"text": "`backend/src/routes/listings.ts` declares `PATCH /: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-0cb78db4e7bafb1c", "name": "Unused endpoint: POST /:id/cancel", "shortDescription": {"text": "Unused endpoint: POST /:id/cancel"}, "fullDescription": {"text": "`backend/src/routes/listings.ts` declares `POST /:id/cancel` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5807f72ecc82887d", "name": "Unused endpoint: PATCH /applications/:appId/status", "shortDescription": {"text": "Unused endpoint: PATCH /applications/:appId/status"}, "fullDescription": {"text": "`backend/src/routes/listings.ts` declares `PATCH /applications/:appId/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-304b6f2b403d93f7", "name": "Unused endpoint: POST /register", "shortDescription": {"text": "Unused endpoint: POST /register"}, "fullDescription": {"text": "`backend/src/routes/auth.ts` declares `POST /register` 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-0c3bb6af93b4422a", "name": "Unused endpoint: POST /verify-email", "shortDescription": {"text": "Unused endpoint: POST /verify-email"}, "fullDescription": {"text": "`backend/src/routes/auth.ts` declares `POST /verify-email` 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-64e06d2adbf1f258", "name": "Unused endpoint: POST /resend-otp", "shortDescription": {"text": "Unused endpoint: POST /resend-otp"}, "fullDescription": {"text": "`backend/src/routes/auth.ts` declares `POST /resend-otp` 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-618721b912bad1c2", "name": "Unused endpoint: POST /login", "shortDescription": {"text": "Unused endpoint: POST /login"}, "fullDescription": {"text": "`backend/src/routes/auth.ts` declares `POST /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-1f69f1362a304e4f", "name": "Unused endpoint: POST /phone/send-otp", "shortDescription": {"text": "Unused endpoint: POST /phone/send-otp"}, "fullDescription": {"text": "`backend/src/routes/auth.ts` declares `POST /phone/send-otp` 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-ed44834f91913f85", "name": "Unused endpoint: POST /phone/login", "shortDescription": {"text": "Unused endpoint: POST /phone/login"}, "fullDescription": {"text": "`backend/src/routes/auth.ts` declares `POST /phone/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-7ce17d6b092a81ca", "name": "Unused endpoint: POST /refresh", "shortDescription": {"text": "Unused endpoint: POST /refresh"}, "fullDescription": {"text": "`backend/src/routes/auth.ts` declares `POST /refresh` 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-99fc36db98c134ce", "name": "Unused endpoint: POST /logout", "shortDescription": {"text": "Unused endpoint: POST /logout"}, "fullDescription": {"text": "`backend/src/routes/auth.ts` declares `POST /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-4257ec01219aa99a", "name": "Unused endpoint: POST /forgot-password", "shortDescription": {"text": "Unused endpoint: POST /forgot-password"}, "fullDescription": {"text": "`backend/src/routes/auth.ts` declares `POST /forgot-password` 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-68a5d356c0cac9e3", "name": "Unused endpoint: POST /reset-password", "shortDescription": {"text": "Unused endpoint: POST /reset-password"}, "fullDescription": {"text": "`backend/src/routes/auth.ts` declares `POST /reset-password` 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/25351"}, "properties": {"repository": "DEVCODER100/Linksptorts", "repoUrl": "https://github.com/DEVCODER100/Linksptorts", "branch": "main"}, "results": [{"ruleId": "scanner-e9cc6e3624d0d536", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/seed-admin.ts:19"}, "properties": {"repobilityId": "36cac29eadb42399", "scanner": "scanner-primary", "fingerprint": "e9cc6e3624d0d536", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e1fc2fa5c98d61f9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/make-admin.ts:12"}, "properties": {"repobilityId": "ff04e43006639649", "scanner": "scanner-primary", "fingerprint": "e1fc2fa5c98d61f9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7cb48204539f8e0e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/check-db.ts:8"}, "properties": {"repobilityId": "dc751aecf830d1c9", "scanner": "scanner-primary", "fingerprint": "7cb48204539f8e0e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4bdf6ef57077259f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/server.ts:61"}, "properties": {"repobilityId": "60601c54191a4c88", "scanner": "scanner-primary", "fingerprint": "4bdf6ef57077259f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-20e5e7e351af18fc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/scripts/seed-test-data.ts:43"}, "properties": {"repobilityId": "8f9ccf2f14445962", "scanner": "scanner-primary", "fingerprint": "20e5e7e351af18fc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d485f0064e3be6c3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/scripts/migrate-mysql.ts:133"}, "properties": {"repobilityId": "d8cf42a8fcf5febf", "scanner": "scanner-primary", "fingerprint": "d485f0064e3be6c3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a3dc288cb6ccb290", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/utils/email.ts:41"}, "properties": {"repobilityId": "ac482d3f453aa043", "scanner": "scanner-primary", "fingerprint": "a3dc288cb6ccb290", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a8dbbd663dd4f1fb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/utils/sms.ts:20"}, "properties": {"repobilityId": "7475da885039a029", "scanner": "scanner-primary", "fingerprint": "a8dbbd663dd4f1fb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-90bd18eeb02328a6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/utils/seed.ts:9"}, "properties": {"repobilityId": "b48ad1c1a3eee3fa", "scanner": "scanner-primary", "fingerprint": "90bd18eeb02328a6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3d37512e8c382884", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/utils/cloudinary.ts:25"}, "properties": {"repobilityId": "d31a904db504efde", "scanner": "scanner-primary", "fingerprint": "3d37512e8c382884", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-93615aa1a4c18277", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/controllers/authController.ts:94"}, "properties": {"repobilityId": "496609d89ade3b21", "scanner": "scanner-primary", "fingerprint": "93615aa1a4c18277", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2b354445ab58062b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/config/database.ts:11"}, "properties": {"repobilityId": "fc8cf1fc41053ed5", "scanner": "scanner-primary", "fingerprint": "2b354445ab58062b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0580b259ed3d3c6c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/config/passport.ts:63"}, "properties": {"repobilityId": "dbff579cc89b9d5d", "scanner": "scanner-primary", "fingerprint": "0580b259ed3d3c6c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-98fa909f83f36206", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/routes/upload.ts:16"}, "properties": {"repobilityId": "0726abe99d00d7dd", "scanner": "scanner-primary", "fingerprint": "98fa909f83f36206", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3d4f3403d4422454", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/app/page.tsx:124"}, "properties": {"repobilityId": "646669d428c89604", "scanner": "scanner-primary", "fingerprint": "3d4f3403d4422454", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e214146fc12bab9b", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 frontend/src/app/page.tsx:669"}, "properties": {"repobilityId": "2bb0766c141d59b5", "scanner": "scanner-primary", "fingerprint": "e214146fc12bab9b", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-f243b449fc9ac54b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/app/dashboard/page.tsx:324"}, "properties": {"repobilityId": "6f7e074259b22c9d", "scanner": "scanner-primary", "fingerprint": "f243b449fc9ac54b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-18ccd01b740098ba", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/app/athlete/[id]/page.tsx:471"}, "properties": {"repobilityId": "a6b77df50b18e88a", "scanner": "scanner-primary", "fingerprint": "18ccd01b740098ba", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1bed0e29f86131c5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/app/jobs/[id]/page.tsx:357"}, "properties": {"repobilityId": "66e39cb4df2e7f20", "scanner": "scanner-primary", "fingerprint": "1bed0e29f86131c5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0e9ad027244a15d6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/app/admin/page.tsx:503"}, "properties": {"repobilityId": "07861c13e1626063", "scanner": "scanner-primary", "fingerprint": "0e9ad027244a15d6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-78f5c049a8474ddf", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/app/my-connections/page.tsx:129"}, "properties": {"repobilityId": "2419609b1c4fdf8f", "scanner": "scanner-primary", "fingerprint": "78f5c049a8474ddf", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-59a0562582406555", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/app/messages/page.tsx:255"}, "properties": {"repobilityId": "d41b18fb4e77e481", "scanner": "scanner-primary", "fingerprint": "59a0562582406555", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f2f9d87e3e56107a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/app/settings/page.tsx:588"}, "properties": {"repobilityId": "c0859116246e2c1e", "scanner": "scanner-primary", "fingerprint": "f2f9d87e3e56107a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b8aca757a8a113c6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/app/org/[id]/page.tsx:406"}, "properties": {"repobilityId": "f41562fa22eea80e", "scanner": "scanner-primary", "fingerprint": "b8aca757a8a113c6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ccbd93f7cc44e4b4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/layout/Navbar.tsx:194"}, "properties": {"repobilityId": "160dc9625fa2292f", "scanner": "scanner-primary", "fingerprint": "ccbd93f7cc44e4b4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7792bf5ff64ea8d9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/shared/PlayerCard.tsx:41"}, "properties": {"repobilityId": "f5e2304065b1f540", "scanner": "scanner-primary", "fingerprint": "7792bf5ff64ea8d9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9693ec8a8b5de261", "level": "error", "message": {"text": "Possible secret in backend/seed-admin.ts"}, "properties": {"repobilityId": "278c2aa44de40911", "scanner": "scanner-primary", "fingerprint": "9693ec8a8b5de261", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/seed-admin.ts"}, "region": {"startLine": 9}}}]}, {"ruleId": "scanner-a583d14dc455ba21", "level": "error", "message": {"text": "Possible secret in backend/src/scripts/seed-test-data.ts"}, "properties": {"repobilityId": "aebf7631fa3e8c7b", "scanner": "scanner-primary", "fingerprint": "a583d14dc455ba21", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/src/scripts/seed-test-data.ts"}, "region": {"startLine": 9}}}]}, {"ruleId": "scanner-b27fd92388a469c5", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in frontend/src/app/page.tsx:669"}, "properties": {"repobilityId": "3e23be1f29cad57c", "scanner": "scanner-primary", "fingerprint": "b27fd92388a469c5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/src/app/page.tsx"}, "region": {"startLine": 669}}}]}, {"ruleId": "scanner-661991c7752e8421", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in frontend/src/store/authStore.ts:44"}, "properties": {"repobilityId": "5b44e7f02a305ab4", "scanner": "scanner-primary", "fingerprint": "661991c7752e8421", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/src/store/authStore.ts"}, "region": {"startLine": 44}}}]}, {"ruleId": "scanner-ebee0353e1204695", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in frontend/src/lib/api.ts:71"}, "properties": {"repobilityId": "90843d9d5330409d", "scanner": "scanner-primary", "fingerprint": "ebee0353e1204695", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/src/lib/api.ts"}, "region": {"startLine": 71}}}]}, {"ruleId": "scanner-a19243c02e2628ff", "level": "error", "message": {"text": "Possible secret in Linksports App/mongo-init/01_create_user.js"}, "properties": {"repobilityId": "db526c8ed0cfbddb", "scanner": "scanner-primary", "fingerprint": "a19243c02e2628ff", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Linksports App/mongo-init/01_create_user.js"}, "region": {"startLine": 9}}}]}, {"ruleId": "scanner-604bb5cf80e81bda", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in Linksports App/admin-panel/src/components/AdminLogin.jsx:17"}, "properties": {"repobilityId": "be5a204ce0dc15e8", "scanner": "scanner-primary", "fingerprint": "604bb5cf80e81bda", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Linksports App/admin-panel/src/components/AdminLogin.jsx"}, "region": {"startLine": 17}}}]}, {"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-371bc263c4fa2266", "level": "note", "message": {"text": "Very large file: frontend/src/app/profile/edit/page.tsx (1291 lines)"}, "properties": {"repobilityId": "64007b3c9a24014d", "scanner": "scanner-primary", "fingerprint": "371bc263c4fa2266", "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": "52c04b660e36a3b6", "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": "d4b15031cdc3f94f", "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": "02842e77e650ec9b", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "9dde2e38e6645371", "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": "be3080990420189a", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "medium", "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": "19b2ae1e7d64fd8b", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-27e5df6e580838a3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/app/profile/edit/page.tsx:1205"}, "properties": {"repobilityId": "943ff4654421ac3d", "scanner": "scanner-primary", "fingerprint": "27e5df6e580838a3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cc0f9d8e41b33b0e", "level": "note", "message": {"text": "11 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "c82cd8cd626c3599", "scanner": "scanner-primary", "fingerprint": "cc0f9d8e41b33b0e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-4bf5ba8a7ad6d28b", "level": "error", "message": {"text": "JS POST `/admin/users` admin endpoint without auth \u2014 frontend/src/lib/api.ts:215"}, "properties": {"repobilityId": "be402b4902828de2", "scanner": "scanner-primary", "fingerprint": "4bf5ba8a7ad6d28b", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.js.admin_unauth"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/src/lib/api.ts"}, "region": {"startLine": 215}}}]}, {"ruleId": "scanner-d384786014cb640b", "level": "error", "message": {"text": "JS PATCH `/admin/users/${id}` admin endpoint without auth \u2014 frontend/src/lib/api.ts:216"}, "properties": {"repobilityId": "c46e54a2ec0eba1d", "scanner": "scanner-primary", "fingerprint": "d384786014cb640b", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.js.admin_unauth"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/src/lib/api.ts"}, "region": {"startLine": 216}}}]}, {"ruleId": "scanner-31457c1f648f7604", "level": "error", "message": {"text": "JS DELETE `/admin/users/${id}` admin endpoint without auth \u2014 frontend/src/lib/api.ts:217"}, "properties": {"repobilityId": "d5cf56f3cd858fce", "scanner": "scanner-primary", "fingerprint": "31457c1f648f7604", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.js.admin_unauth"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/src/lib/api.ts"}, "region": {"startLine": 217}}}]}, {"ruleId": "scanner-e01f5886d2d92116", "level": "error", "message": {"text": "JS PATCH `/admin/users/${id}/suspend` admin endpoint without auth \u2014 frontend/src/lib/api.ts:218"}, "properties": {"repobilityId": "617921b9e5d97a27", "scanner": "scanner-primary", "fingerprint": "e01f5886d2d92116", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.js.admin_unauth"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/src/lib/api.ts"}, "region": {"startLine": 218}}}]}, {"ruleId": "scanner-bea5f68cada6031a", "level": "error", "message": {"text": "JS PATCH `/admin/listings/${id}/review` admin endpoint without auth \u2014 frontend/src/lib/api.ts:221"}, "properties": {"repobilityId": "0536f47b0da05344", "scanner": "scanner-primary", "fingerprint": "bea5f68cada6031a", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.js.admin_unauth"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/src/lib/api.ts"}, "region": {"startLine": 221}}}]}, {"ruleId": "scanner-c8af29a34b620f98", "level": "error", "message": {"text": "JS PATCH `/admin/jobs/${id}/review` admin endpoint without auth \u2014 frontend/src/lib/api.ts:224"}, "properties": {"repobilityId": "3375be18d85e9001", "scanner": "scanner-primary", "fingerprint": "c8af29a34b620f98", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.js.admin_unauth"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/src/lib/api.ts"}, "region": {"startLine": 224}}}]}, {"ruleId": "scanner-f040f43099a945b7", "level": "error", "message": {"text": "JS PATCH `/admin/organizations/${id}/verify` admin endpoint without auth \u2014 frontend/src/lib/api.ts:227"}, "properties": {"repobilityId": "4ea726dc6be07863", "scanner": "scanner-primary", "fingerprint": "f040f43099a945b7", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.js.admin_unauth"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/src/lib/api.ts"}, "region": {"startLine": 227}}}]}, {"ruleId": "scanner-076d52152ef1f421", "level": "error", "message": {"text": "JS POST `/admin/coupons` admin endpoint without auth \u2014 frontend/src/lib/api.ts:229"}, "properties": {"repobilityId": "bfe53dd0ab5adc69", "scanner": "scanner-primary", "fingerprint": "076d52152ef1f421", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.js.admin_unauth"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/src/lib/api.ts"}, "region": {"startLine": 229}}}]}, {"ruleId": "scanner-0c339befa1472e48", "level": "error", "message": {"text": "JS PATCH `/admin/coupons/${id}/toggle` admin endpoint without auth \u2014 frontend/src/lib/api.ts:230"}, "properties": {"repobilityId": "8eb1360fae93f267", "scanner": "scanner-primary", "fingerprint": "0c339befa1472e48", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.js.admin_unauth"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/src/lib/api.ts"}, "region": {"startLine": 230}}}]}, {"ruleId": "scanner-03d21a6b37e3daa5", "level": "error", "message": {"text": "JS POST `/admin/announcements` admin endpoint without auth \u2014 frontend/src/lib/api.ts:232"}, "properties": {"repobilityId": "2322ba37ea4dee8d", "scanner": "scanner-primary", "fingerprint": "03d21a6b37e3daa5", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.js.admin_unauth"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/src/lib/api.ts"}, "region": {"startLine": 232}}}]}, {"ruleId": "scanner-993d6c64103d82c1", "level": "error", "message": {"text": "JS PUT `/admin/users/${userId}/verify` admin endpoint without auth \u2014 Linksports App/admin-panel/src/services/api.js:27"}, "properties": {"repobilityId": "cfa3cc799adde67b", "scanner": "scanner-primary", "fingerprint": "993d6c64103d82c1", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.js.admin_unauth"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Linksports App/admin-panel/src/services/api.js"}, "region": {"startLine": 27}}}]}, {"ruleId": "scanner-3aa48918571df868", "level": "error", "message": {"text": "JS DELETE `/admin/users/${userId}` admin endpoint without auth \u2014 Linksports App/admin-panel/src/services/api.js:28"}, "properties": {"repobilityId": "d467c4b3eb318d6c", "scanner": "scanner-primary", "fingerprint": "3aa48918571df868", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.js.admin_unauth"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Linksports App/admin-panel/src/services/api.js"}, "region": {"startLine": 28}}}]}, {"ruleId": "scanner-174c0eaa317e2676", "level": "error", "message": {"text": "Dangling fetch: GET https://api.postalpincode.in/pincode/${pin} (frontend/src/app/profile/edit/page.tsx:418)"}, "properties": {"repobilityId": "2f70041fda0c7dd5", "scanner": "scanner-primary", "fingerprint": "174c0eaa317e2676", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4232a8fd3c75e607", "level": "error", "message": {"text": "Dangling fetch: GET https://api.postalpincode.in/pincode/${val} (frontend/src/app/profile/edit/page.tsx:1205)"}, "properties": {"repobilityId": "89e135430735b99d", "scanner": "scanner-primary", "fingerprint": "4232a8fd3c75e607", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8fdbacfe9430a6ed", "level": "note", "message": {"text": "Unused endpoint: POST /auth/login"}, "properties": {"repobilityId": "d82dbcade9dfabb2", "scanner": "scanner-primary", "fingerprint": "8fdbacfe9430a6ed", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ac42422b23e45104", "level": "note", "message": {"text": "Unused endpoint: GET /auth/me"}, "properties": {"repobilityId": "f369500cc45e7fec", "scanner": "scanner-primary", "fingerprint": "ac42422b23e45104", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0aba7f1883cb96f2", "level": "note", "message": {"text": "Unused endpoint: GET /admin/users"}, "properties": {"repobilityId": "1656c7cc9e60f5a0", "scanner": "scanner-primary", "fingerprint": "0aba7f1883cb96f2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-dd159bd05997c05c", "level": "note", "message": {"text": "Unused endpoint: GET /admin/stats"}, "properties": {"repobilityId": "7b1be99ee48f2241", "scanner": "scanner-primary", "fingerprint": "dd159bd05997c05c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1bc898b3b7565990", "level": "note", "message": {"text": "Unused endpoint: USE /uploads"}, "properties": {"repobilityId": "0f91b95fbb4a0979", "scanner": "scanner-primary", "fingerprint": "1bc898b3b7565990", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-633f9d1a5c910846", "level": "note", "message": {"text": "Unused endpoint: USE /api/v1/auth/oauth"}, "properties": {"repobilityId": "33c5dfb20a03968c", "scanner": "scanner-primary", "fingerprint": "633f9d1a5c910846", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3bec7ccd0b909bea", "level": "note", "message": {"text": "Unused endpoint: USE /api/v1/auth"}, "properties": {"repobilityId": "98faa18ffa86c563", "scanner": "scanner-primary", "fingerprint": "3bec7ccd0b909bea", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7972bbaa4e350ee2", "level": "note", "message": {"text": "Unused endpoint: USE /api/v1/profiles"}, "properties": {"repobilityId": "a8b31792f4a86bfb", "scanner": "scanner-primary", "fingerprint": "7972bbaa4e350ee2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-469c05547c847e2b", "level": "note", "message": {"text": "Unused endpoint: USE /api/v1/connections"}, "properties": {"repobilityId": "e30b135f571050d6", "scanner": "scanner-primary", "fingerprint": "469c05547c847e2b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2614f216a62f9e93", "level": "note", "message": {"text": "Unused endpoint: USE /api/v1/listings"}, "properties": {"repobilityId": "c8649704683716df", "scanner": "scanner-primary", "fingerprint": "2614f216a62f9e93", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-abc84f7cf550516c", "level": "note", "message": {"text": "Unused endpoint: USE /api/v1/jobs"}, "properties": {"repobilityId": "25e05db194b2cf41", "scanner": "scanner-primary", "fingerprint": "abc84f7cf550516c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f0db8dc34e9f2548", "level": "note", "message": {"text": "Unused endpoint: USE /api/v1/messages"}, "properties": {"repobilityId": "6607f29e93340be3", "scanner": "scanner-primary", "fingerprint": "f0db8dc34e9f2548", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-527939ead45dae84", "level": "note", "message": {"text": "Unused endpoint: USE /api/v1/notifications"}, "properties": {"repobilityId": "4aa242effc5a9d3c", "scanner": "scanner-primary", "fingerprint": "527939ead45dae84", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-853f5b1b1f304bfc", "level": "note", "message": {"text": "Unused endpoint: USE /api/v1/payments"}, "properties": {"repobilityId": "9229cd8305b4120f", "scanner": "scanner-primary", "fingerprint": "853f5b1b1f304bfc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2cc7f440e42eac79", "level": "note", "message": {"text": "Unused endpoint: USE /api/v1/admin"}, "properties": {"repobilityId": "a2b2e844196eaade", "scanner": "scanner-primary", "fingerprint": "2cc7f440e42eac79", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b27e83224424f7e1", "level": "note", "message": {"text": "Unused endpoint: USE /api/v1/upload"}, "properties": {"repobilityId": "a48cc91f6e1b4aa3", "scanner": "scanner-primary", "fingerprint": "b27e83224424f7e1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4b1afd0ba2b8f574", "level": "note", "message": {"text": "Unused endpoint: USE /api/v1/users"}, "properties": {"repobilityId": "21b068340d78aa4d", "scanner": "scanner-primary", "fingerprint": "4b1afd0ba2b8f574", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-63957638bc3fe406", "level": "note", "message": {"text": "Unused endpoint: USE /api/v1/reviews"}, "properties": {"repobilityId": "e85998fa29ee4498", "scanner": "scanner-primary", "fingerprint": "63957638bc3fe406", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9e8f224eaa152834", "level": "note", "message": {"text": "Unused endpoint: GET /api/v1/search"}, "properties": {"repobilityId": "9a8731c20ada23da", "scanner": "scanner-primary", "fingerprint": "9e8f224eaa152834", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5baa8971ebe192a1", "level": "note", "message": {"text": "Unused endpoint: GET /"}, "properties": {"repobilityId": "4d72da3121206934", "scanner": "scanner-primary", "fingerprint": "5baa8971ebe192a1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3b5c17c01e439662", "level": "note", "message": {"text": "Unused endpoint: POST /request"}, "properties": {"repobilityId": "ed666bf9b215c86e", "scanner": "scanner-primary", "fingerprint": "3b5c17c01e439662", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9de4cecd0e235584", "level": "note", "message": {"text": "Unused endpoint: GET /pending"}, "properties": {"repobilityId": "669f36f8db2d13e5", "scanner": "scanner-primary", "fingerprint": "9de4cecd0e235584", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e81089756fd4e30a", "level": "note", "message": {"text": "Unused endpoint: POST /:id/respond"}, "properties": {"repobilityId": "7e44297072e183eb", "scanner": "scanner-primary", "fingerprint": "e81089756fd4e30a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7a61c112b611f4bb", "level": "note", "message": {"text": "Unused endpoint: DELETE /:id"}, "properties": {"repobilityId": "c1ef1f3fc34b87eb", "scanner": "scanner-primary", "fingerprint": "7a61c112b611f4bb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2e494a389a6f2b3e", "level": "note", "message": {"text": "Unused endpoint: POST /follow"}, "properties": {"repobilityId": "1ae04e833fea6348", "scanner": "scanner-primary", "fingerprint": "2e494a389a6f2b3e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2dbe4c9caa49a4a5", "level": "note", "message": {"text": "Unused endpoint: POST /block"}, "properties": {"repobilityId": "0bdde6cd1dca7954", "scanner": "scanner-primary", "fingerprint": "2dbe4c9caa49a4a5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1a57aef8c0c00cd6", "level": "note", "message": {"text": "Unused endpoint: GET /mine/applications"}, "properties": {"repobilityId": "3fc4a28bb0823371", "scanner": "scanner-primary", "fingerprint": "1a57aef8c0c00cd6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-dba6a518433d3812", "level": "note", "message": {"text": "Unused endpoint: GET /mine/listings"}, "properties": {"repobilityId": "9f8801b0f304ec9e", "scanner": "scanner-primary", "fingerprint": "dba6a518433d3812", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ca5756175765b49d", "level": "note", "message": {"text": "Unused endpoint: GET /:id"}, "properties": {"repobilityId": "9fe4c5cf17b1d6a5", "scanner": "scanner-primary", "fingerprint": "ca5756175765b49d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7a009b1a56794f45", "level": "note", "message": {"text": "Unused endpoint: POST /"}, "properties": {"repobilityId": "fef426a01e76556a", "scanner": "scanner-primary", "fingerprint": "7a009b1a56794f45", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-28c7e366d4549d97", "level": "note", "message": {"text": "Unused endpoint: POST /:id/submit"}, "properties": {"repobilityId": "33966ca0fa4109e1", "scanner": "scanner-primary", "fingerprint": "28c7e366d4549d97", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-12f691e4167316e2", "level": "note", "message": {"text": "Unused endpoint: GET /:id/applications"}, "properties": {"repobilityId": "bf34dd8013d00235", "scanner": "scanner-primary", "fingerprint": "12f691e4167316e2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-39fb740f7bc3574b", "level": "note", "message": {"text": "Unused endpoint: PATCH /:id/applications/:appId/status"}, "properties": {"repobilityId": "f219a18a1d2f1ce4", "scanner": "scanner-primary", "fingerprint": "39fb740f7bc3574b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2487fbd02806b3a8", "level": "note", "message": {"text": "Unused endpoint: POST /:id/apply"}, "properties": {"repobilityId": "379d76cc19b17568", "scanner": "scanner-primary", "fingerprint": "2487fbd02806b3a8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-bb86a49414024054", "level": "note", "message": {"text": "Unused endpoint: POST /save"}, "properties": {"repobilityId": "f91574885211a5f2", "scanner": "scanner-primary", "fingerprint": "bb86a49414024054", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-bc043602ec3592ed", "level": "note", "message": {"text": "Unused endpoint: GET /my"}, "properties": {"repobilityId": "bee5daec574872c3", "scanner": "scanner-primary", "fingerprint": "bc043602ec3592ed", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1fe5c55ed56a3393", "level": "note", "message": {"text": "Unused endpoint: GET /applications/mine"}, "properties": {"repobilityId": "2e5ea088d4d1aca1", "scanner": "scanner-primary", "fingerprint": "1fe5c55ed56a3393", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5fbc954f63526821", "level": "note", "message": {"text": "Unused endpoint: PATCH /:id"}, "properties": {"repobilityId": "8fdcf6a4ce2e1529", "scanner": "scanner-primary", "fingerprint": "5fbc954f63526821", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0cb78db4e7bafb1c", "level": "note", "message": {"text": "Unused endpoint: POST /:id/cancel"}, "properties": {"repobilityId": "6512133a8705e7f0", "scanner": "scanner-primary", "fingerprint": "0cb78db4e7bafb1c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5807f72ecc82887d", "level": "note", "message": {"text": "Unused endpoint: PATCH /applications/:appId/status"}, "properties": {"repobilityId": "a7cb0daf741dee74", "scanner": "scanner-primary", "fingerprint": "5807f72ecc82887d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-304b6f2b403d93f7", "level": "note", "message": {"text": "Unused endpoint: POST /register"}, "properties": {"repobilityId": "8eff9eb368a8e8cc", "scanner": "scanner-primary", "fingerprint": "304b6f2b403d93f7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0c3bb6af93b4422a", "level": "note", "message": {"text": "Unused endpoint: POST /verify-email"}, "properties": {"repobilityId": "1a3dedd86529a620", "scanner": "scanner-primary", "fingerprint": "0c3bb6af93b4422a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-64e06d2adbf1f258", "level": "note", "message": {"text": "Unused endpoint: POST /resend-otp"}, "properties": {"repobilityId": "e44a6636e681fb4c", "scanner": "scanner-primary", "fingerprint": "64e06d2adbf1f258", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-618721b912bad1c2", "level": "note", "message": {"text": "Unused endpoint: POST /login"}, "properties": {"repobilityId": "4ff35d9a605f8ae9", "scanner": "scanner-primary", "fingerprint": "618721b912bad1c2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1f69f1362a304e4f", "level": "note", "message": {"text": "Unused endpoint: POST /phone/send-otp"}, "properties": {"repobilityId": "d21d086c58152def", "scanner": "scanner-primary", "fingerprint": "1f69f1362a304e4f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ed44834f91913f85", "level": "note", "message": {"text": "Unused endpoint: POST /phone/login"}, "properties": {"repobilityId": "aaa1828202ae8ffe", "scanner": "scanner-primary", "fingerprint": "ed44834f91913f85", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7ce17d6b092a81ca", "level": "note", "message": {"text": "Unused endpoint: POST /refresh"}, "properties": {"repobilityId": "91b1eed1554eb73a", "scanner": "scanner-primary", "fingerprint": "7ce17d6b092a81ca", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-99fc36db98c134ce", "level": "note", "message": {"text": "Unused endpoint: POST /logout"}, "properties": {"repobilityId": "509386afc3e90060", "scanner": "scanner-primary", "fingerprint": "99fc36db98c134ce", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4257ec01219aa99a", "level": "note", "message": {"text": "Unused endpoint: POST /forgot-password"}, "properties": {"repobilityId": "d6c6aaf187e5ec4e", "scanner": "scanner-primary", "fingerprint": "4257ec01219aa99a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-68a5d356c0cac9e3", "level": "note", "message": {"text": "Unused endpoint: POST /reset-password"}, "properties": {"repobilityId": "390cd0ae614564fc", "scanner": "scanner-primary", "fingerprint": "68a5d356c0cac9e3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}