{"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-ee4c066d18ad8b4f", "name": "Stray `console.log` in TS/JS \u2014 test-api.js:8", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test-api.js: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-fa104c15bc4fc8fb", "name": "Stray `console.log` in TS/JS \u2014 test-local.js:4", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test-local.js:4"}, "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-810653d81165d234", "name": "Stray `console.log` in TS/JS \u2014 backend/check_db_history.js:25", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/check_db_history.js: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-0e42a1931e11b46e", "name": "Stray `console.log` in TS/JS \u2014 backend/scripts/testShiprocketQuery.ts:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/scripts/testShiprocketQuery.ts:17"}, "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-fab1c4b3689cd151", "name": "Stray `console.log` in TS/JS \u2014 backend/scripts/listMissingOrders.ts:30", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/scripts/listMissingOrders.ts:30"}, "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-e56d26dc16ff9bb4", "name": "Stray `console.log` in TS/JS \u2014 backend/scripts/listSync153.ts:20", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/scripts/listSync153.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-b7c19ed1abfacc3f", "name": "Stray `console.log` in TS/JS \u2014 backend/scripts/testShiprocketHistory.ts:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/scripts/testShiprocketHistory.ts:17"}, "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-fd4f6378e98bc1ab", "name": "Stray `console.log` in TS/JS \u2014 backend/scripts/debugSync.ts:27", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/scripts/debugSync.ts:27"}, "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-98140b5e1a94f05e", "name": "Stray `console.log` in TS/JS \u2014 backend/scripts/testShipmentId.ts:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/scripts/testShipmentId.ts:17"}, "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-3f39b1072ca18473", "name": "Stray `console.log` in TS/JS \u2014 backend/scripts/backfill-roas.ts:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/scripts/backfill-roas.ts:14"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4a1ef65ab214a3f6", "name": "Stray `console.log` in TS/JS \u2014 backend/scripts/fixViaAWB.ts:24", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/scripts/fixViaAWB.ts:24"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2fb70351c72de4ec", "name": "Stray `console.log` in TS/JS \u2014 backend/scripts/testAWBEndpoint.ts:16", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/scripts/testAWBEndpoint.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-499de5ada0e2810d", "name": "Stray `console.log` in TS/JS \u2014 backend/scripts/fixOldFailedOrders.ts:29", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/scripts/fixOldFailedOrders.ts:29"}, "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-c0743920a225b706", "name": "Stray `console.log` in TS/JS \u2014 backend/scripts/debugPB1118S.ts:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/scripts/debugPB1118S.ts:14"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-28acdecbda334540", "name": "Stray `console.log` in TS/JS \u2014 backend/scripts/migrate-pincodes-full.ts:10", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/scripts/migrate-pincodes-full.ts:10"}, "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-386cbf135d2471c0", "name": "Stray `console.log` in TS/JS \u2014 backend/scripts/testShiprocketDates.ts:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/scripts/testShiprocketDates.ts:17"}, "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-9378a3348d41deb0", "name": "Stray `console.log` in TS/JS \u2014 backend/scripts/exploreShiprocket.ts:16", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/scripts/exploreShiprocket.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-9acbcffc8fb6cd0d", "name": "Stray `console.log` in TS/JS \u2014 backend/scripts/testCloneFetch.ts:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/scripts/testCloneFetch.ts:14"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8cb1e93f6ca3caa6", "name": "Stray `console.log` in TS/JS \u2014 backend/scripts/listTerminalSync.ts:22", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/scripts/listTerminalSync.ts:22"}, "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-365898262f341508", "name": "Stray `console.log` in TS/JS \u2014 backend/scripts/historicalSync.ts:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/scripts/historicalSync.ts:15"}, "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-e75eecb6de77cda9", "name": "Stray `console.log` in TS/JS \u2014 backend/scripts/testShiprocketFetch.ts:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/scripts/testShiprocketFetch.ts:14"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e27397977c8d1eec", "name": "Stray `console.log` in TS/JS \u2014 backend/scripts/deepSyncWallet.ts:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/scripts/deepSyncWallet.ts:15"}, "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-5ebd1fe4f3503fe0", "name": "Stray `console.log` in TS/JS \u2014 backend/scripts/backfill-shipping.ts:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/scripts/backfill-shipping.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-52b46324c6f0d5c9", "name": "Stray `console.log` in TS/JS \u2014 backend/scripts/backfill-pnl.ts:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/scripts/backfill-pnl.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-d88b18306efaf8c6", "name": "Stray `console.log` in TS/JS \u2014 backend/scripts/backfill-order-stats.ts:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/scripts/backfill-order-stats.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-01d3bcd11f66abca", "name": "Stray `console.log` in TS/JS \u2014 backend/scripts/testAwbSearch.ts:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/scripts/testAwbSearch.ts:17"}, "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-00a833268c36cd14", "name": "Stray `console.log` in TS/JS \u2014 backend/src/index.ts:25", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/index.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-1f966cb4b4a4cab1", "name": "Stray `console.log` in TS/JS \u2014 backend/src/test_shiprocket_delivery.ts:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/test_shiprocket_delivery.ts:15"}, "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-100ed9fca5ab1c41", "name": "Stray `console.log` in TS/JS \u2014 backend/src/services/shiprocketService.ts:171", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/services/shiprocketService.ts:171"}, "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-39e09056f73faee7", "name": "Stray `console.log` in TS/JS \u2014 backend/src/services/shopifyService.ts:205", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/services/shopifyService.ts:205"}, "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-67c94f4968f2c235", "name": "Stray `console.log` in TS/JS \u2014 backend/src/services/aiService.ts:88", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/services/aiService.ts:88"}, "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-597796fd59e3d103", "name": "Stray `console.log` in TS/JS \u2014 backend/src/routes/sales.ts:705", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/routes/sales.ts:705"}, "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-7f6e92f89073cbcb", "name": "Stray `console.log` in TS/JS \u2014 backend/src/routes/magicLinks.ts:870", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/routes/magicLinks.ts:870"}, "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-0d3b03a0823578c5", "name": "Stray `console.log` in TS/JS \u2014 frontend/src/pages/GSTMonthlyReports.tsx:40", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/src/pages/GSTMonthlyReports.tsx:40"}, "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-79a88eb5d394e171", "name": "Icon-only button without accessible name \u2014 frontend/src/pages/BankAccountPage.tsx:918", "shortDescription": {"text": "Icon-only button without accessible name \u2014 frontend/src/pages/BankAccountPage.tsx:918"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3512998ab90bf4af", "name": "Stray `console.log` in TS/JS \u2014 frontend/src/pages/BankAccountPage.tsx:254", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/src/pages/BankAccountPage.tsx:254"}, "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-ce16c2869d1759c6", "name": "Stray `console.log` in TS/JS \u2014 frontend/src/pages/analysis/AdsAnalysis.tsx:230", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/src/pages/analysis/AdsAnalysis.tsx:230"}, "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-05b28ea28cb36125", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 frontend/src/pages/analysis/StuckOrdersAnalysis.tsx:122", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 frontend/src/pages/analysis/StuckOrdersAnalysis.tsx:122"}, "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-f3ed4ca908bd0af7", "name": "Insecure pattern 'dangerous_innerhtml' in frontend/src/pages/analysis/StuckOrdersAnalysis.tsx:122", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in frontend/src/pages/analysis/StuckOrdersAnalysis.tsx:122"}, "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-d9dc03bc173f8284", "name": "Insecure pattern 'local_storage_auth_token' in frontend/src/services/api.ts:188", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in frontend/src/services/api.ts:188"}, "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-b3368be0e16eaf38", "name": "Very large file: backend/src/routes/sales.ts (1834 lines)", "shortDescription": {"text": "Very large file: backend/src/routes/sales.ts (1834 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-c30cbbfaeea6b110", "name": "Very large file: frontend/src/pages/DashboardPage.tsx (1859 lines)", "shortDescription": {"text": "Very large file: frontend/src/pages/DashboardPage.tsx (1859 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-f5e602591c8d25ea", "name": "Very large file: frontend/src/pages/BankAccountPage.tsx (1211 lines)", "shortDescription": {"text": "Very large file: frontend/src/pages/BankAccountPage.tsx (1211 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-a48511d77cfc6c9c", "name": "Very large file: frontend/src/pages/SalesPage.tsx (2829 lines)", "shortDescription": {"text": "Very large file: frontend/src/pages/SalesPage.tsx (2829 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-ea3b5e389d8c9c0f", "name": "Low test-to-source ratio", "shortDescription": {"text": "Low test-to-source ratio"}, "fullDescription": {"text": "12 tests / 118 src (ratio 0.10)."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "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 256 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 46 placeholder/mock markers across 15 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, ci. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c8f46f3d20338fb5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 test-api.js:3", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 test-api.js:3"}, "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-7a883452d866280c", "name": "Legacy-named symbol `fixViaAWB_v2` in backend/scripts/fixViaAWB.ts:125", "shortDescription": {"text": "Legacy-named symbol `fixViaAWB_v2` in backend/scripts/fixViaAWB.ts:125"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-98319212435f02ad", "name": "`fetch()` without try/.catch or AbortSignal \u2014 backend/src/services/shiprocketService.ts:143", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 backend/src/services/shiprocketService.ts:143"}, "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-5f1baac89997f2c5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 backend/src/services/shopifyService.ts:43", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 backend/src/services/shopifyService.ts:43"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a9b0b06e433b807b", "name": "Legacy-named symbol `hasOld` in backend/src/routes/cogs.ts:12", "shortDescription": {"text": "Legacy-named symbol `hasOld` in backend/src/routes/cogs.ts:12"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a0dad9e704a39a98", "name": "Commented-code block (5 lines) in frontend/src/pages/SalesPage.tsx:433", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/pages/SalesPage.tsx:433"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3001d5bcf83281df", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/services/api.ts:211", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/services/api.ts:211"}, "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-8e11138a9f634ca9", "name": "Frontend route `dashboard` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `dashboard` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0747c82b2d5230fa", "name": "Frontend route `sales-management` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `sales-management` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8f2f2eae0ca9fed3", "name": "Frontend route `backlog` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `backlog` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8c65fa295d42f7ba", "name": "Frontend route `abandoned-checkouts` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `abandoned-checkouts` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-74351003f37fca4a", "name": "Frontend route `expenses/*` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `expenses/*` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e0fcc9b27bab88dc", "name": "Frontend route `analysis/*` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `analysis/*` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a8a8dbf19e5b54dc", "name": "Frontend route `attendance/*` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `attendance/*` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-174559f2bd808ccd", "name": "Frontend route `tools/*` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `tools/*` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2abe858d207e2f5b", "name": "Frontend route `products` has no Link/navigate to it \u2014 frontend/src/pages/ToolsPage.tsx", "shortDescription": {"text": "Frontend route `products` has no Link/navigate to it \u2014 frontend/src/pages/ToolsPage.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4010179d53c2adc4", "name": "Frontend route `gst-reports/*` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `gst-reports/*` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-18d560e145721f72", "name": "Frontend route `/upload/:token` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/upload/:token` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a048c17761830bb6", "name": "Frontend route `failed-orders` has no Link/navigate to it \u2014 frontend/src/pages/AnalysisPage.tsx", "shortDescription": {"text": "Frontend route `failed-orders` has no Link/navigate to it \u2014 frontend/src/pages/AnalysisPage.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2fc37064f9d6fdd7", "name": "Frontend route `pin-codes` has no Link/navigate to it \u2014 frontend/src/pages/AnalysisPage.tsx", "shortDescription": {"text": "Frontend route `pin-codes` has no Link/navigate to it \u2014 frontend/src/pages/AnalysisPage.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2fe0c1acfc22efc8", "name": "Frontend route `stuck-orders` has no Link/navigate to it \u2014 frontend/src/pages/AnalysisPage.tsx", "shortDescription": {"text": "Frontend route `stuck-orders` has no Link/navigate to it \u2014 frontend/src/pages/AnalysisPage.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c080fd8c5ed555f7", "name": "Frontend route `tickets` has no Link/navigate to it \u2014 frontend/src/pages/AnalysisPage.tsx", "shortDescription": {"text": "Frontend route `tickets` has no Link/navigate to it \u2014 frontend/src/pages/AnalysisPage.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7d82b81f5c89147e", "name": "Frontend route `tickets/new` has no Link/navigate to it \u2014 frontend/src/pages/AnalysisPage.tsx", "shortDescription": {"text": "Frontend route `tickets/new` has no Link/navigate to it \u2014 frontend/src/pages/AnalysisPage.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5a8aa359df5f479d", "name": "Frontend route `stock-prediction` has no Link/navigate to it \u2014 frontend/src/pages/ToolsPage.tsx", "shortDescription": {"text": "Frontend route `stock-prediction` has no Link/navigate to it \u2014 frontend/src/pages/ToolsPage.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e18d97e2b00d03e1", "name": "Frontend route `gst-reports` has no Link/navigate to it \u2014 frontend/src/pages/ToolsPage.tsx", "shortDescription": {"text": "Frontend route `gst-reports` has no Link/navigate to it \u2014 frontend/src/pages/ToolsPage.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4a4cb7a3c2773f03", "name": "Frontend route `variant-performance` has no Link/navigate to it \u2014 frontend/src/pages/ToolsPage.tsx", "shortDescription": {"text": "Frontend route `variant-performance` has no Link/navigate to it \u2014 frontend/src/pages/ToolsPage.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cc5ee6c9b260dd7e", "name": "Frontend route `labels` has no Link/navigate to it \u2014 frontend/src/pages/ToolsPage.tsx", "shortDescription": {"text": "Frontend route `labels` has no Link/navigate to it \u2014 frontend/src/pages/ToolsPage.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4b2847899d667105", "name": "Frontend route `/monthly` has no Link/navigate to it \u2014 frontend/src/pages/GSTReportsPage.tsx", "shortDescription": {"text": "Frontend route `/monthly` has no Link/navigate to it \u2014 frontend/src/pages/GSTReportsPage.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ee947ea21d6bc6e5", "name": "Frontend route `meta-ads` has no Link/navigate to it \u2014 frontend/src/pages/ExpensesPage.tsx", "shortDescription": {"text": "Frontend route `meta-ads` has no Link/navigate to it \u2014 frontend/src/pages/ExpensesPage.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-540efaa087368082", "name": "Frontend route `cogs` has no Link/navigate to it \u2014 frontend/src/pages/ExpensesPage.tsx", "shortDescription": {"text": "Frontend route `cogs` has no Link/navigate to it \u2014 frontend/src/pages/ExpensesPage.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-48d8628f16a0fff1", "name": "Frontend route `fixed-monthly` has no Link/navigate to it \u2014 frontend/src/pages/ExpensesPage.tsx", "shortDescription": {"text": "Frontend route `fixed-monthly` has no Link/navigate to it \u2014 frontend/src/pages/ExpensesPage.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-346fceec99ffca9c", "name": "Frontend route `bank-account` has no Link/navigate to it \u2014 frontend/src/pages/ExpensesPage.tsx", "shortDescription": {"text": "Frontend route `bank-account` has no Link/navigate to it \u2014 frontend/src/pages/ExpensesPage.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3760a9def51b2936", "name": "Dangling fetch: POST http://localhost:3001/api/admin/auth/login (test-api.js:3)", "shortDescription": {"text": "Dangling fetch: POST http://localhost:3001/api/admin/auth/login (test-api.js:3)"}, "fullDescription": {"text": "`test-api.js:3` calls `POST http://localhost:3001/api/admin/auth/login` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3001/api/admin/auth/login`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-32976f81aabc7cf7", "name": "Dangling fetch: POST /api/admin/auth/login (frontend/src/services/api.ts:221)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/auth/login (frontend/src/services/api.ts:221)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:221` calls `POST /api/admin/auth/login` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/auth/login`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-454931e289d736a3", "name": "Dangling fetch: POST /api/admin/auth/register (frontend/src/services/api.ts:234)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/auth/register (frontend/src/services/api.ts:234)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:234` calls `POST /api/admin/auth/register` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/auth/register`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-653de62ae32e55f9", "name": "Dangling fetch: GET /api/admin/auth/me (frontend/src/services/api.ts:247)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/auth/me (frontend/src/services/api.ts:247)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:247` calls `GET /api/admin/auth/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/auth/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b8d0bc3d42bbc908", "name": "Dangling fetch: GET /api/admin/magic-links?page=${page}&limit=${limit} (frontend/src/services/api.ts:256)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/magic-links?page=${page}&limit=${limit} (frontend/src/services/api.ts:256)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:256` calls `GET /api/admin/magic-links?page=${page}&limit=${limit}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/magic-links`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-408b87ad7281f4c1", "name": "Dangling fetch: POST /api/admin/magic-links (frontend/src/services/api.ts:266)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/magic-links (frontend/src/services/api.ts:266)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:266` calls `POST /api/admin/magic-links` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/magic-links`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0068cb26ea4488db", "name": "Dangling fetch: DELETE /api/admin/magic-links/${token} (frontend/src/services/api.ts:273)", "shortDescription": {"text": "Dangling fetch: DELETE /api/admin/magic-links/${token} (frontend/src/services/api.ts:273)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:273` calls `DELETE /api/admin/magic-links/${token}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/magic-links/<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-3146a0cca6f1574f", "name": "Dangling fetch: DELETE /api/admin/magic-links/${token}/delete-images (frontend/src/services/api.ts:318)", "shortDescription": {"text": "Dangling fetch: DELETE /api/admin/magic-links/${token}/delete-images (frontend/src/services/api.ts:318)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:318` calls `DELETE /api/admin/magic-links/${token}/delete-images` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/magic-links/<p>/delete-images`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-12a836da771e80ac", "name": "Dangling fetch: GET /api/admin/magic-links/shopify/orders?limit=${limit}${allParam}${dateParam}${monthParam} (frontend/s", "shortDescription": {"text": "Dangling fetch: GET /api/admin/magic-links/shopify/orders?limit=${limit}${allParam}${dateParam}${monthParam} (frontend/src/services/api.ts:328)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:328` calls `GET /api/admin/magic-links/shopify/orders?limit=${limit}${allParam}${dateParam}${monthParam}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/magic-links/shopify/orders`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f4258f5e2108536e", "name": "Dangling fetch: GET /api/admin/sales/backlog-orders (frontend/src/services/api.ts:332)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/sales/backlog-orders (frontend/src/services/api.ts:332)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:332` calls `GET /api/admin/sales/backlog-orders` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/sales/backlog-orders`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8dca17b4509a7c1b", "name": "Dangling fetch: GET /api/admin/magic-links/shopify/orders/${encodeURIComponent(orderNumber)} (frontend/src/services/api.", "shortDescription": {"text": "Dangling fetch: GET /api/admin/magic-links/shopify/orders/${encodeURIComponent(orderNumber)} (frontend/src/services/api.ts:336)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:336` calls `GET /api/admin/magic-links/shopify/orders/${encodeURIComponent(orderNumber)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/magic-links/shopify/orders/<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-7fca64004335f5f2", "name": "Dangling fetch: POST /api/admin/magic-links/shopify/orders/clear-cache (frontend/src/services/api.ts:340)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/magic-links/shopify/orders/clear-cache (frontend/src/services/api.ts:340)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:340` calls `POST /api/admin/magic-links/shopify/orders/clear-cache` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/magic-links/shopify/orders/clear-cache`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fc063ca2142f441c", "name": "Dangling fetch: POST /api/admin/magic-links/shiprocket/fetch-shipping-charge (frontend/src/services/api.ts:350)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/magic-links/shiprocket/fetch-shipping-charge (frontend/src/services/api.ts:350)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:350` calls `POST /api/admin/magic-links/shiprocket/fetch-shipping-charge` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/magic-links/shiprocket/fetch-shipping-charge`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-90903fa364d19fd3", "name": "Dangling fetch: POST /api/admin/magic-links/shiprocket/clear-cache (frontend/src/services/api.ts:360)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/magic-links/shiprocket/clear-cache (frontend/src/services/api.ts:360)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:360` calls `POST /api/admin/magic-links/shiprocket/clear-cache` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/magic-links/shiprocket/clear-cache`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-defe212d7ecf1bcf", "name": "Dangling fetch: POST /api/admin/magic-links/shiprocket/sync-shipping-charges (frontend/src/services/api.ts:369)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/magic-links/shiprocket/sync-shipping-charges (frontend/src/services/api.ts:369)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:369` calls `POST /api/admin/magic-links/shiprocket/sync-shipping-charges` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/magic-links/shiprocket/sync-shipping-charges`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2f6d9889356dbdc7", "name": "Dangling fetch: POST /api/admin/magic-links/shopify/update-delivery-status (frontend/src/services/api.ts:379)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/magic-links/shopify/update-delivery-status (frontend/src/services/api.ts:379)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:379` calls `POST /api/admin/magic-links/shopify/update-delivery-status` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/magic-links/shopify/update-delivery-status`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3d5dd53e1a60a9a4", "name": "Dangling fetch: POST /api/admin/magic-links/shopify/customers/bulk-tags (frontend/src/services/api.ts:393)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/magic-links/shopify/customers/bulk-tags (frontend/src/services/api.ts:393)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:393` calls `POST /api/admin/magic-links/shopify/customers/bulk-tags` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/magic-links/shopify/customers/bulk-tags`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-34de321f09be3297", "name": "Dangling fetch: POST /api/admin/magic-links/shopify/customers/${customerId}/tags (frontend/src/services/api.ts:404)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/magic-links/shopify/customers/${customerId}/tags (frontend/src/services/api.ts:404)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:404` calls `POST /api/admin/magic-links/shopify/customers/${customerId}/tags` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/magic-links/shopify/customers/<p>/tags`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8a36aa48d055a62d", "name": "Dangling fetch: POST /api/admin/sales/acknowledge-orders (frontend/src/services/api.ts:431)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/sales/acknowledge-orders (frontend/src/services/api.ts:431)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:431` calls `POST /api/admin/sales/acknowledge-orders` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/sales/acknowledge-orders`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-99aecc20e7bbe4bc", "name": "Dangling fetch: DELETE /api/admin/sales/acknowledge-orders (frontend/src/services/api.ts:441)", "shortDescription": {"text": "Dangling fetch: DELETE /api/admin/sales/acknowledge-orders (frontend/src/services/api.ts:441)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:441` calls `DELETE /api/admin/sales/acknowledge-orders` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/sales/acknowledge-orders`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c4979352c8bd786d", "name": "Dangling fetch: POST /api/admin/sales/ticket-raised-orders (frontend/src/services/api.ts:458)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/sales/ticket-raised-orders (frontend/src/services/api.ts:458)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:458` calls `POST /api/admin/sales/ticket-raised-orders` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/sales/ticket-raised-orders`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-10f9ad5dcda1240c", "name": "Dangling fetch: DELETE /api/admin/sales/ticket-raised-orders (frontend/src/services/api.ts:468)", "shortDescription": {"text": "Dangling fetch: DELETE /api/admin/sales/ticket-raised-orders (frontend/src/services/api.ts:468)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:468` calls `DELETE /api/admin/sales/ticket-raised-orders` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/sales/ticket-raised-orders`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b2dc23ef1ee5dedb", "name": "Dangling fetch: POST /api/admin/sales/discard-orders (frontend/src/services/api.ts:485)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/sales/discard-orders (frontend/src/services/api.ts:485)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:485` calls `POST /api/admin/sales/discard-orders` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/sales/discard-orders`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d00a8c770cf57d34", "name": "Dangling fetch: DELETE /api/admin/sales/discard-orders (frontend/src/services/api.ts:495)", "shortDescription": {"text": "Dangling fetch: DELETE /api/admin/sales/discard-orders (frontend/src/services/api.ts:495)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:495` calls `DELETE /api/admin/sales/discard-orders` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/sales/discard-orders`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-eddb88a5409ff56e", "name": "Dangling fetch: POST /api/admin/sales/mark-rto (frontend/src/services/api.ts:512)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/sales/mark-rto (frontend/src/services/api.ts:512)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:512` calls `POST /api/admin/sales/mark-rto` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/sales/mark-rto`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fc2247f99c61f5da", "name": "Dangling fetch: DELETE /api/admin/sales/mark-rto (frontend/src/services/api.ts:522)", "shortDescription": {"text": "Dangling fetch: DELETE /api/admin/sales/mark-rto (frontend/src/services/api.ts:522)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:522` calls `DELETE /api/admin/sales/mark-rto` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/sales/mark-rto`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4c032e2546199e26", "name": "Dangling fetch: GET /api/admin/magic-links/shopify/products (frontend/src/services/api.ts:552)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/magic-links/shopify/products (frontend/src/services/api.ts:552)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:552` calls `GET /api/admin/magic-links/shopify/products` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/magic-links/shopify/products`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-979bfbef90194c26", "name": "Dangling fetch: GET /api/admin/magic-links/shopify/products/${productId} (frontend/src/services/api.ts:556)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/magic-links/shopify/products/${productId} (frontend/src/services/api.ts:556)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:556` calls `GET /api/admin/magic-links/shopify/products/${productId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/magic-links/shopify/products/<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-46852b08becf7c51", "name": "Dangling fetch: PUT /api/admin/magic-links/shopify/products/bulk-update-prices (frontend/src/services/api.ts:574)", "shortDescription": {"text": "Dangling fetch: PUT /api/admin/magic-links/shopify/products/bulk-update-prices (frontend/src/services/api.ts:574)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:574` calls `PUT /api/admin/magic-links/shopify/products/bulk-update-prices` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/magic-links/shopify/products/bulk-update-prices`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-13bccc8d0384d2da", "name": "Dangling fetch: GET /api/admin/expenses/sources (frontend/src/services/api.ts:586)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/expenses/sources (frontend/src/services/api.ts:586)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:586` calls `GET /api/admin/expenses/sources` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/expenses/sources`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-85c6bee73a088e6b", "name": "Dangling fetch: POST /api/admin/expenses/sources (frontend/src/services/api.ts:594)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/expenses/sources (frontend/src/services/api.ts:594)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:594` calls `POST /api/admin/expenses/sources` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/expenses/sources`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5b9c7c9cea414e3c", "name": "Dangling fetch: GET /api/admin/expenses/meta-ads?page=${page}&limit=${limit} (frontend/src/services/api.ts:615)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/expenses/meta-ads?page=${page}&limit=${limit} (frontend/src/services/api.ts:615)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:615` calls `GET /api/admin/expenses/meta-ads?page=${page}&limit=${limit}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/expenses/meta-ads`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a964c7750bcb5faf", "name": "Dangling fetch: POST /api/admin/expenses/meta-ads (frontend/src/services/api.ts:638)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/expenses/meta-ads (frontend/src/services/api.ts:638)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:638` calls `POST /api/admin/expenses/meta-ads` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/expenses/meta-ads`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f45f98c443c03615", "name": "Dangling fetch: DELETE /api/admin/expenses/meta-ads/${expenseId} (frontend/src/services/api.ts:645)", "shortDescription": {"text": "Dangling fetch: DELETE /api/admin/expenses/meta-ads/${expenseId} (frontend/src/services/api.ts:645)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:645` calls `DELETE /api/admin/expenses/meta-ads/${expenseId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/expenses/meta-ads/<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-390a53da4731edfb", "name": "Dangling fetch: GET /api/admin/expenses/daily-ad-spend (frontend/src/services/api.ts:662)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/expenses/daily-ad-spend (frontend/src/services/api.ts:662)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:662` calls `GET /api/admin/expenses/daily-ad-spend` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/expenses/daily-ad-spend`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-71fcc1a415b692b6", "name": "Dangling fetch: POST /api/admin/expenses/daily-ad-spend (frontend/src/services/api.ts:680)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/expenses/daily-ad-spend (frontend/src/services/api.ts:680)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:680` calls `POST /api/admin/expenses/daily-ad-spend` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/expenses/daily-ad-spend`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f26fe73914b708a8", "name": "Dangling fetch: DELETE /api/admin/expenses/daily-ad-spend/${entryId} (frontend/src/services/api.ts:687)", "shortDescription": {"text": "Dangling fetch: DELETE /api/admin/expenses/daily-ad-spend/${entryId} (frontend/src/services/api.ts:687)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:687` calls `DELETE /api/admin/expenses/daily-ad-spend/${entryId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/expenses/daily-ad-spend/<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-56150558d5b29dbc", "name": "Dangling fetch: POST /api/admin/sales/daily-roas/backfill (frontend/src/services/api.ts:705)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/sales/daily-roas/backfill (frontend/src/services/api.ts:705)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:705` calls `POST /api/admin/sales/daily-roas/backfill` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/sales/daily-roas/backfill`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e31cbcad2da84d33", "name": "Dangling fetch: POST /api/admin/sales/daily-shipping/backfill (frontend/src/services/api.ts:729)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/sales/daily-shipping/backfill (frontend/src/services/api.ts:729)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:729` calls `POST /api/admin/sales/daily-shipping/backfill` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/sales/daily-shipping/backfill`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b8c9f6843255743d", "name": "Dangling fetch: GET /api/upload/${token} (frontend/src/services/api.ts:734)", "shortDescription": {"text": "Dangling fetch: GET /api/upload/${token} (frontend/src/services/api.ts:734)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:734` calls `GET /api/upload/${token}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/upload/<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-b8f06d6d52744f15", "name": "Dangling fetch: GET /api/upload/${token}/images (frontend/src/services/api.ts:750)", "shortDescription": {"text": "Dangling fetch: GET /api/upload/${token}/images (frontend/src/services/api.ts:750)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:750` calls `GET /api/upload/${token}/images` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/upload/<p>/images`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-60effc1f596b441f", "name": "Dangling fetch: GET /api/admin/cogs/configuration/versions (frontend/src/services/api.ts:840)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/cogs/configuration/versions (frontend/src/services/api.ts:840)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:840` calls `GET /api/admin/cogs/configuration/versions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/cogs/configuration/versions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1f653f092a68a03f", "name": "Dangling fetch: GET /api/admin/fixed-monthly-expenses${qs} (frontend/src/services/api.ts:880)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/fixed-monthly-expenses${qs} (frontend/src/services/api.ts:880)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:880` calls `GET /api/admin/fixed-monthly-expenses${qs}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/fixed-monthly-expenses/<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-1118ae498e2edf71", "name": "Dangling fetch: POST /api/admin/fixed-monthly-expenses (frontend/src/services/api.ts:884)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/fixed-monthly-expenses (frontend/src/services/api.ts:884)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:884` calls `POST /api/admin/fixed-monthly-expenses` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/fixed-monthly-expenses`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1212fe3a4b3709f7", "name": "Dangling fetch: PUT /api/admin/fixed-monthly-expenses/${id} (frontend/src/services/api.ts:891)", "shortDescription": {"text": "Dangling fetch: PUT /api/admin/fixed-monthly-expenses/${id} (frontend/src/services/api.ts:891)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:891` calls `PUT /api/admin/fixed-monthly-expenses/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/fixed-monthly-expenses/<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-f5f0b8ef6f02d3ea", "name": "Dangling fetch: DELETE /api/admin/fixed-monthly-expenses/${id} (frontend/src/services/api.ts:898)", "shortDescription": {"text": "Dangling fetch: DELETE /api/admin/fixed-monthly-expenses/${id} (frontend/src/services/api.ts:898)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:898` calls `DELETE /api/admin/fixed-monthly-expenses/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/fixed-monthly-expenses/<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-ac0969ebc3208148", "name": "Dangling fetch: GET /api/admin/bank-account/categories (frontend/src/services/api.ts:903)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/bank-account/categories (frontend/src/services/api.ts:903)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:903` calls `GET /api/admin/bank-account/categories` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/bank-account/categories`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5b61b40fc369dbca", "name": "Dangling fetch: POST /api/admin/bank-account/categories (frontend/src/services/api.ts:907)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/bank-account/categories (frontend/src/services/api.ts:907)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:907` calls `POST /api/admin/bank-account/categories` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/bank-account/categories`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-92e6f67e2c8df16e", "name": "Dangling fetch: PATCH /api/admin/bank-account/categories/${encodeURIComponent(oldName)} (frontend/src/services/api.ts:91", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/bank-account/categories/${encodeURIComponent(oldName)} (frontend/src/services/api.ts:914)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:914` calls `PATCH /api/admin/bank-account/categories/${encodeURIComponent(oldName)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/bank-account/categories/<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-85bb90422ad8a62d", "name": "Dangling fetch: DELETE /api/admin/bank-account/categories/${encodeURIComponent(name)} (frontend/src/services/api.ts:921)", "shortDescription": {"text": "Dangling fetch: DELETE /api/admin/bank-account/categories/${encodeURIComponent(name)} (frontend/src/services/api.ts:921)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:921` calls `DELETE /api/admin/bank-account/categories/${encodeURIComponent(name)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/bank-account/categories/<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-f51764759a89b453", "name": "Dangling fetch: PATCH /api/admin/bank-account/categories/${encodeURIComponent(name)}/tags (frontend/src/services/api.ts:", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/bank-account/categories/${encodeURIComponent(name)}/tags (frontend/src/services/api.ts:927)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:927` calls `PATCH /api/admin/bank-account/categories/${encodeURIComponent(name)}/tags` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/bank-account/categories/<p>/tags`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-391a0513fb6d313b", "name": "Dangling fetch: GET /api/admin/bank-account/transactions (frontend/src/services/api.ts:934)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/bank-account/transactions (frontend/src/services/api.ts:934)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:934` calls `GET /api/admin/bank-account/transactions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/bank-account/transactions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a0e6c9d986341273", "name": "Dangling fetch: POST /api/admin/bank-account/transactions/bulk (frontend/src/services/api.ts:938)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/bank-account/transactions/bulk (frontend/src/services/api.ts:938)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:938` calls `POST /api/admin/bank-account/transactions/bulk` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/bank-account/transactions/bulk`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e12e613d162a8232", "name": "Dangling fetch: DELETE /api/admin/bank-account/transactions/${id} (frontend/src/services/api.ts:945)", "shortDescription": {"text": "Dangling fetch: DELETE /api/admin/bank-account/transactions/${id} (frontend/src/services/api.ts:945)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:945` calls `DELETE /api/admin/bank-account/transactions/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/bank-account/transactions/<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-17b8fe21910c8511", "name": "Dangling fetch: PATCH /api/admin/bank-account/transactions/bulk/tags (frontend/src/services/api.ts:951)", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/bank-account/transactions/bulk/tags (frontend/src/services/api.ts:951)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:951` calls `PATCH /api/admin/bank-account/transactions/bulk/tags` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/bank-account/transactions/bulk/tags`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3c05a90927387d44", "name": "Dangling fetch: PATCH /api/admin/bank-account/transactions/${id} (frontend/src/services/api.ts:958)", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/bank-account/transactions/${id} (frontend/src/services/api.ts:958)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:958` calls `PATCH /api/admin/bank-account/transactions/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/bank-account/transactions/<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-344c60e642831ccf", "name": "Dangling fetch: GET /api/admin/bank-account/narration-rules (frontend/src/services/api.ts:965)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/bank-account/narration-rules (frontend/src/services/api.ts:965)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:965` calls `GET /api/admin/bank-account/narration-rules` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/bank-account/narration-rules`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-46aefa05f1343152", "name": "Dangling fetch: POST /api/admin/bank-account/narration-rules (frontend/src/services/api.ts:969)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/bank-account/narration-rules (frontend/src/services/api.ts:969)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:969` calls `POST /api/admin/bank-account/narration-rules` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/bank-account/narration-rules`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-578322d423e68290", "name": "Dangling fetch: DELETE /api/admin/bank-account/narration-rules/${id} (frontend/src/services/api.ts:976)", "shortDescription": {"text": "Dangling fetch: DELETE /api/admin/bank-account/narration-rules/${id} (frontend/src/services/api.ts:976)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:976` calls `DELETE /api/admin/bank-account/narration-rules/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/bank-account/narration-rules/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3d3c31ffaceceee5", "name": "Dangling fetch: GET /api/admin/pincodes/blocked (frontend/src/services/api.ts:991)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/pincodes/blocked (frontend/src/services/api.ts:991)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:991` calls `GET /api/admin/pincodes/blocked` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/pincodes/blocked`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0613205df8a97fbd", "name": "Dangling fetch: POST /api/admin/pincodes/blocked (frontend/src/services/api.ts:995)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/pincodes/blocked (frontend/src/services/api.ts:995)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:995` calls `POST /api/admin/pincodes/blocked` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/pincodes/blocked`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7613c4aa76828377", "name": "Dangling fetch: DELETE /api/admin/pincodes/blocked/${encodeURIComponent(pinCode)} (frontend/src/services/api.ts:1002)", "shortDescription": {"text": "Dangling fetch: DELETE /api/admin/pincodes/blocked/${encodeURIComponent(pinCode)} (frontend/src/services/api.ts:1002)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:1002` calls `DELETE /api/admin/pincodes/blocked/${encodeURIComponent(pinCode)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/pincodes/blocked/<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-29f1e55cb3280e79", "name": "Dangling fetch: GET /api/admin/magic-links/tracking/${awb} (frontend/src/services/api.ts:1008)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/magic-links/tracking/${awb} (frontend/src/services/api.ts:1008)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:1008` calls `GET /api/admin/magic-links/tracking/${awb}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/magic-links/tracking/<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-55cd31cb4b3af378", "name": "Dangling fetch: GET /api/admin/magic-links/tickets (frontend/src/services/api.ts:1012)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/magic-links/tickets (frontend/src/services/api.ts:1012)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:1012` calls `GET /api/admin/magic-links/tickets` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/magic-links/tickets`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-27ae68a9568bced9", "name": "Dangling fetch: POST /api/admin/magic-links/tickets (frontend/src/services/api.ts:1016)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/magic-links/tickets (frontend/src/services/api.ts:1016)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:1016` calls `POST /api/admin/magic-links/tickets` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/magic-links/tickets`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-71a79152d14008e9", "name": "Dangling fetch: PATCH /api/admin/magic-links/tickets/${id} (frontend/src/services/api.ts:1023)", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/magic-links/tickets/${id} (frontend/src/services/api.ts:1023)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:1023` calls `PATCH /api/admin/magic-links/tickets/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/magic-links/tickets/<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-549d4e18f32bf8be", "name": "Dangling fetch: GET /api/admin/magic-links/tickets/${awb} (frontend/src/services/api.ts:1030)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/magic-links/tickets/${awb} (frontend/src/services/api.ts:1030)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:1030` calls `GET /api/admin/magic-links/tickets/${awb}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/magic-links/tickets/<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-15b51bf6ed5974d7", "name": "Dangling fetch: POST /api/admin/magic-links/generate-complaint (frontend/src/services/api.ts:1034)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/magic-links/generate-complaint (frontend/src/services/api.ts:1034)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:1034` calls `POST /api/admin/magic-links/generate-complaint` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/magic-links/generate-complaint`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-14afd0ec6eea4fda", "name": "Dangling fetch: POST /api/admin/sales/generate-incomplete-address-message (frontend/src/services/api.ts:1041)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/sales/generate-incomplete-address-message (frontend/src/services/api.ts:1041)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:1041` calls `POST /api/admin/sales/generate-incomplete-address-message` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/sales/generate-incomplete-address-message`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ed984563d0c158dd", "name": "Dangling fetch: POST /api/admin/sales/generate-multiple-orders-message (frontend/src/services/api.ts:1048)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/sales/generate-multiple-orders-message (frontend/src/services/api.ts:1048)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:1048` calls `POST /api/admin/sales/generate-multiple-orders-message` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/sales/generate-multiple-orders-message`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ffd0006dd3ad3dff", "name": "Dangling fetch: GET /api/admin/sales/search-orders?query=${encodeURIComponent(query)} (frontend/src/services/api.ts:1055", "shortDescription": {"text": "Dangling fetch: GET /api/admin/sales/search-orders?query=${encodeURIComponent(query)} (frontend/src/services/api.ts:1055)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:1055` calls `GET /api/admin/sales/search-orders?query=${encodeURIComponent(query)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/sales/search-orders`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4a0bc06dde312c2c", "name": "Dangling fetch: GET /api/admin/sales/prediction/${monthYear} (frontend/src/services/api.ts:1059)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/sales/prediction/${monthYear} (frontend/src/services/api.ts:1059)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:1059` calls `GET /api/admin/sales/prediction/${monthYear}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/sales/prediction/<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-5a440bd015d46f05", "name": "Dangling fetch: POST /api/admin/sales/predict (frontend/src/services/api.ts:1063)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/sales/predict (frontend/src/services/api.ts:1063)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:1063` calls `POST /api/admin/sales/predict` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/sales/predict`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cb6f2ba226f7ba82", "name": "Dangling fetch: POST /api/admin/sales/predict-stock (frontend/src/services/api.ts:1074)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/sales/predict-stock (frontend/src/services/api.ts:1074)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:1074` calls `POST /api/admin/sales/predict-stock` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/sales/predict-stock`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e8b3070660327cac", "name": "Dangling fetch: POST /api/admin/sales/analyze-ads (frontend/src/services/api.ts:1081)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/sales/analyze-ads (frontend/src/services/api.ts:1081)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:1081` calls `POST /api/admin/sales/analyze-ads` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/sales/analyze-ads`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-07aa36f347996899", "name": "Dangling fetch: POST /api/admin/sales/ads-performance (frontend/src/services/api.ts:1088)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/sales/ads-performance (frontend/src/services/api.ts:1088)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:1088` calls `POST /api/admin/sales/ads-performance` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/sales/ads-performance`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-820c0754115e4200", "name": "Dangling fetch: GET /api/admin/sales/ads-performance/status (frontend/src/services/api.ts:1095)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/sales/ads-performance/status (frontend/src/services/api.ts:1095)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:1095` calls `GET /api/admin/sales/ads-performance/status` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/sales/ads-performance/status`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-450cb7f5cd83c790", "name": "Dangling fetch: DELETE /api/admin/sales/ads-performance (frontend/src/services/api.ts:1099)", "shortDescription": {"text": "Dangling fetch: DELETE /api/admin/sales/ads-performance (frontend/src/services/api.ts:1099)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:1099` calls `DELETE /api/admin/sales/ads-performance` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/sales/ads-performance`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-41cf40e91c890db1", "name": "Dangling fetch: DELETE /api/admin/sales/ads-performance/${date} (frontend/src/services/api.ts:1103)", "shortDescription": {"text": "Dangling fetch: DELETE /api/admin/sales/ads-performance/${date} (frontend/src/services/api.ts:1103)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:1103` calls `DELETE /api/admin/sales/ads-performance/${date}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/sales/ads-performance/<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-5c2d418348c6dae4", "name": "Dangling fetch: GET /api/admin/sales/ads-performance/daily (frontend/src/services/api.ts:1107)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/sales/ads-performance/daily (frontend/src/services/api.ts:1107)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:1107` calls `GET /api/admin/sales/ads-performance/daily` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/sales/ads-performance/daily`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4a34a51cecaf965a", "name": "Dangling fetch: GET /api/admin/sales/ads-analysis/${date} (frontend/src/services/api.ts:1111)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/sales/ads-analysis/${date} (frontend/src/services/api.ts:1111)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:1111` calls `GET /api/admin/sales/ads-analysis/${date}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/sales/ads-analysis/<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-0f1b3a70a30d1384", "name": "Dangling fetch: GET /api/admin/sales/ads-analysis-latest (frontend/src/services/api.ts:1115)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/sales/ads-analysis-latest (frontend/src/services/api.ts:1115)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:1115` calls `GET /api/admin/sales/ads-analysis-latest` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/sales/ads-analysis-latest`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c280353729732e07", "name": "Dangling fetch: GET /api/admin/sales/ads-analysis-dates (frontend/src/services/api.ts:1119)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/sales/ads-analysis-dates (frontend/src/services/api.ts:1119)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:1119` calls `GET /api/admin/sales/ads-analysis-dates` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/sales/ads-analysis-dates`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-077e170ff27f2b4b", "name": "Dangling fetch: GET /api/admin/sales/ads-performance/${date} (frontend/src/services/api.ts:1123)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/sales/ads-performance/${date} (frontend/src/services/api.ts:1123)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:1123` calls `GET /api/admin/sales/ads-performance/${date}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/sales/ads-performance/<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-cc6bd5ebe8c31af2", "name": "Dangling fetch: GET /api/admin/sales/ads-performance-all (frontend/src/services/api.ts:1127)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/sales/ads-performance-all (frontend/src/services/api.ts:1127)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:1127` calls `GET /api/admin/sales/ads-performance-all` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/sales/ads-performance-all`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bd7831a898d9c119", "name": "Dangling fetch: POST /api/admin/sales/ads-chat (frontend/src/services/api.ts:1131)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/sales/ads-chat (frontend/src/services/api.ts:1131)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:1131` calls `POST /api/admin/sales/ads-chat` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/sales/ads-chat`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dbd09becf05e12b6", "name": "Dangling fetch: GET /api/admin/abandoned-checkouts (frontend/src/services/api.ts:1139)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/abandoned-checkouts (frontend/src/services/api.ts:1139)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:1139` calls `GET /api/admin/abandoned-checkouts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/abandoned-checkouts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f264ec7a2858fa8a", "name": "Dangling fetch: GET /api/admin/abandoned-checkouts/template (frontend/src/services/api.ts:1143)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/abandoned-checkouts/template (frontend/src/services/api.ts:1143)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:1143` calls `GET /api/admin/abandoned-checkouts/template` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/abandoned-checkouts/template`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-699c5d557fe17fd8", "name": "Dangling fetch: POST /api/admin/abandoned-checkouts/template (frontend/src/services/api.ts:1147)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/abandoned-checkouts/template (frontend/src/services/api.ts:1147)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:1147` calls `POST /api/admin/abandoned-checkouts/template` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/abandoned-checkouts/template`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fcac79a5362df7b9", "name": "Dangling fetch: POST /api/admin/abandoned-checkouts (frontend/src/services/api.ts:1157)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/abandoned-checkouts (frontend/src/services/api.ts:1157)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:1157` calls `POST /api/admin/abandoned-checkouts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/abandoned-checkouts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-966b7433124db723", "name": "Dangling fetch: PUT /api/admin/abandoned-checkouts/${id}/status (frontend/src/services/api.ts:1167)", "shortDescription": {"text": "Dangling fetch: PUT /api/admin/abandoned-checkouts/${id}/status (frontend/src/services/api.ts:1167)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:1167` calls `PUT /api/admin/abandoned-checkouts/${id}/status` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/abandoned-checkouts/<p>/status`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0e2a855f040ca8f1", "name": "Dangling fetch: GET /api/admin/attendance/employees/stats?month=${month} (frontend/src/services/api.ts:1176)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/attendance/employees/stats?month=${month} (frontend/src/services/api.ts:1176)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:1176` calls `GET /api/admin/attendance/employees/stats?month=${month}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/attendance/employees/stats`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2bcb0fbc2a11d7cb", "name": "Dangling fetch: GET /api/admin/attendance/employees (frontend/src/services/api.ts:1180)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/attendance/employees (frontend/src/services/api.ts:1180)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:1180` calls `GET /api/admin/attendance/employees` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/attendance/employees`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3b13152218e7cd57", "name": "Dangling fetch: POST /api/admin/attendance/employees (frontend/src/services/api.ts:1184)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/attendance/employees (frontend/src/services/api.ts:1184)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:1184` calls `POST /api/admin/attendance/employees` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/attendance/employees`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-93f79f3058bfa45c", "name": "Dangling fetch: PUT /api/admin/attendance/employees/${id} (frontend/src/services/api.ts:1191)", "shortDescription": {"text": "Dangling fetch: PUT /api/admin/attendance/employees/${id} (frontend/src/services/api.ts:1191)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:1191` calls `PUT /api/admin/attendance/employees/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/attendance/employees/<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-ae13c79b21a82e12", "name": "Dangling fetch: GET /api/admin/attendance/records?dateStr=${dateStr} (frontend/src/services/api.ts:1198)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/attendance/records?dateStr=${dateStr} (frontend/src/services/api.ts:1198)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:1198` calls `GET /api/admin/attendance/records?dateStr=${dateStr}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/attendance/records`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-aa8a959d08dcf63c", "name": "Dangling fetch: GET /api/admin/attendance/records/month/${month} (frontend/src/services/api.ts:1202)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/attendance/records/month/${month} (frontend/src/services/api.ts:1202)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:1202` calls `GET /api/admin/attendance/records/month/${month}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/attendance/records/month/<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-2d0bc5e44cfc05cf", "name": "Dangling fetch: POST /api/admin/attendance/records (frontend/src/services/api.ts:1206)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/attendance/records (frontend/src/services/api.ts:1206)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:1206` calls `POST /api/admin/attendance/records` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/attendance/records`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2916c0aa50a1832a", "name": "Dangling fetch: POST /api/admin/attendance/advances (frontend/src/services/api.ts:1213)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/attendance/advances (frontend/src/services/api.ts:1213)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:1213` calls `POST /api/admin/attendance/advances` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/attendance/advances`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-54426c3e50496685", "name": "Dangling fetch: POST /api/admin/attendance/payments (frontend/src/services/api.ts:1220)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/attendance/payments (frontend/src/services/api.ts:1220)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:1220` calls `POST /api/admin/attendance/payments` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/attendance/payments`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c22024737a4858ab", "name": "Dangling fetch: POST /api/admin/attendance/hourly-logs (frontend/src/services/api.ts:1227)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/attendance/hourly-logs (frontend/src/services/api.ts:1227)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:1227` calls `POST /api/admin/attendance/hourly-logs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/attendance/hourly-logs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7c9ff5897656a5ce", "name": "Dangling fetch: DELETE /api/admin/attendance/hourly-logs/${employeeId}/${dateStr} (frontend/src/services/api.ts:1234)", "shortDescription": {"text": "Dangling fetch: DELETE /api/admin/attendance/hourly-logs/${employeeId}/${dateStr} (frontend/src/services/api.ts:1234)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:1234` calls `DELETE /api/admin/attendance/hourly-logs/${employeeId}/${dateStr}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/attendance/hourly-logs/<p>/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a8306e32ba03748a", "name": "Dangling fetch: GET /api/admin/attendance/hourly-logs/month/${month} (frontend/src/services/api.ts:1240)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/attendance/hourly-logs/month/${month} (frontend/src/services/api.ts:1240)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:1240` calls `GET /api/admin/attendance/hourly-logs/month/${month}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/attendance/hourly-logs/month/<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-1a646b3306c710a2", "name": "Dangling fetch: GET /api/admin/attendance/hourly-logs/all (frontend/src/services/api.ts:1244)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/attendance/hourly-logs/all (frontend/src/services/api.ts:1244)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:1244` calls `GET /api/admin/attendance/hourly-logs/all` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/attendance/hourly-logs/all`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-37c67e3ca9d99716", "name": "Dangling fetch: POST /api/admin/sales/daily-order-stats/backfill (frontend/src/services/api.ts:1281)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/sales/daily-order-stats/backfill (frontend/src/services/api.ts:1281)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:1281` calls `POST /api/admin/sales/daily-order-stats/backfill` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/sales/daily-order-stats/backfill`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-aa5ac86160e9b53b", "name": "Dangling fetch: GET /api/admin/sales/daily-averages?days=${days} (frontend/src/services/api.ts:1315)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/sales/daily-averages?days=${days} (frontend/src/services/api.ts:1315)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:1315` calls `GET /api/admin/sales/daily-averages?days=${days}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/sales/daily-averages`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c660f5ede4a88bf3", "name": "Dangling fetch: GET /api/admin/sales/failed-orders-analysis (frontend/src/services/api.ts:1326)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/sales/failed-orders-analysis (frontend/src/services/api.ts:1326)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:1326` calls `GET /api/admin/sales/failed-orders-analysis` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/sales/failed-orders-analysis`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e14857fd4effe763", "name": "Dangling fetch: GET /api/admin/pincodes/cod-added-cities (frontend/src/services/api.ts:1330)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/pincodes/cod-added-cities (frontend/src/services/api.ts:1330)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:1330` calls `GET /api/admin/pincodes/cod-added-cities` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/pincodes/cod-added-cities`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-75b854ada70b044a", "name": "Dangling fetch: POST /api/admin/pincodes/cod-added-cities (frontend/src/services/api.ts:1334)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/pincodes/cod-added-cities (frontend/src/services/api.ts:1334)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:1334` calls `POST /api/admin/pincodes/cod-added-cities` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/pincodes/cod-added-cities`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ee01025b0dcbeb5c", "name": "Dangling fetch: DELETE /api/admin/pincodes/cod-added-cities/${encodeURIComponent(city)} (frontend/src/services/api.ts:13", "shortDescription": {"text": "Dangling fetch: DELETE /api/admin/pincodes/cod-added-cities/${encodeURIComponent(city)} (frontend/src/services/api.ts:1338)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:1338` calls `DELETE /api/admin/pincodes/cod-added-cities/${encodeURIComponent(city)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/pincodes/cod-added-cities/<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-10871a57053b8669", "name": "Dangling fetch: GET /api/admin/sales/variant-performance?days=${days} (frontend/src/services/api.ts:1362)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/sales/variant-performance?days=${days} (frontend/src/services/api.ts:1362)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:1362` calls `GET /api/admin/sales/variant-performance?days=${days}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/sales/variant-performance`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-71e07ec47694664a", "name": "Dangling fetch: POST /api/admin/sales/daily-pnl/backfill (frontend/src/services/api.ts:1387)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/sales/daily-pnl/backfill (frontend/src/services/api.ts:1387)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:1387` calls `POST /api/admin/sales/daily-pnl/backfill` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/sales/daily-pnl/backfill`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-198df1e9f9a0c3a2", "name": "Dangling fetch: GET /api/admin/sales/ai-prediction-data?startDate=${startDate} (frontend/src/services/api.ts:1408)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/sales/ai-prediction-data?startDate=${startDate} (frontend/src/services/api.ts:1408)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:1408` calls `GET /api/admin/sales/ai-prediction-data?startDate=${startDate}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/sales/ai-prediction-data`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e6acd43b8d64d59d", "name": "Dangling fetch: GET /api/admin/sales/breakeven-metrics (frontend/src/services/api.ts:1425)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/sales/breakeven-metrics (frontend/src/services/api.ts:1425)"}, "fullDescription": {"text": "`frontend/src/services/api.ts:1425` calls `GET /api/admin/sales/breakeven-metrics` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/sales/breakeven-metrics`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fb249c271605d179", "name": "Unused endpoint: USE /api/admin/auth", "shortDescription": {"text": "Unused endpoint: USE /api/admin/auth"}, "fullDescription": {"text": "`backend/src/index.ts` declares `USE /api/admin/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-3ad05cd497b90b46", "name": "Unused endpoint: USE /api/admin/magic-links", "shortDescription": {"text": "Unused endpoint: USE /api/admin/magic-links"}, "fullDescription": {"text": "`backend/src/index.ts` declares `USE /api/admin/magic-links` 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-02bb5ce96f064b2c", "name": "Unused endpoint: USE /api/admin/expenses", "shortDescription": {"text": "Unused endpoint: USE /api/admin/expenses"}, "fullDescription": {"text": "`backend/src/index.ts` declares `USE /api/admin/expenses` 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-08054452f3229037", "name": "Unused endpoint: USE /api/admin/sales", "shortDescription": {"text": "Unused endpoint: USE /api/admin/sales"}, "fullDescription": {"text": "`backend/src/index.ts` declares `USE /api/admin/sales` 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-bb130c10cb764f8b", "name": "Unused endpoint: USE /api/admin/cogs", "shortDescription": {"text": "Unused endpoint: USE /api/admin/cogs"}, "fullDescription": {"text": "`backend/src/index.ts` declares `USE /api/admin/cogs` 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-30f0fa42b7a47526", "name": "Unused endpoint: USE /api/admin/fixed-monthly-expenses", "shortDescription": {"text": "Unused endpoint: USE /api/admin/fixed-monthly-expenses"}, "fullDescription": {"text": "`backend/src/index.ts` declares `USE /api/admin/fixed-monthly-expenses` 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-2f947f118f48e48c", "name": "Unused endpoint: USE /api/admin/bank-account", "shortDescription": {"text": "Unused endpoint: USE /api/admin/bank-account"}, "fullDescription": {"text": "`backend/src/index.ts` declares `USE /api/admin/bank-account` 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-cd977b919e6001e4", "name": "Unused endpoint: USE /api/admin/delivery-dates", "shortDescription": {"text": "Unused endpoint: USE /api/admin/delivery-dates"}, "fullDescription": {"text": "`backend/src/index.ts` declares `USE /api/admin/delivery-dates` 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-20688a0fcdfe9d71", "name": "Unused endpoint: USE /api/admin/pincodes", "shortDescription": {"text": "Unused endpoint: USE /api/admin/pincodes"}, "fullDescription": {"text": "`backend/src/index.ts` declares `USE /api/admin/pincodes` 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-f95fb117974bfc92", "name": "Unused endpoint: USE /api/admin/abandoned-checkouts", "shortDescription": {"text": "Unused endpoint: USE /api/admin/abandoned-checkouts"}, "fullDescription": {"text": "`backend/src/index.ts` declares `USE /api/admin/abandoned-checkouts` 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-ebf1698736720618", "name": "Unused endpoint: USE /api/admin/attendance", "shortDescription": {"text": "Unused endpoint: USE /api/admin/attendance"}, "fullDescription": {"text": "`backend/src/index.ts` declares `USE /api/admin/attendance` 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-6f643fbf10ab5803", "name": "Unused endpoint: USE /api/upload", "shortDescription": {"text": "Unused endpoint: USE /api/upload"}, "fullDescription": {"text": "`backend/src/index.ts` declares `USE /api/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-4756b4c4da7d2088", "name": "Unused endpoint: GET /api/health", "shortDescription": {"text": "Unused endpoint: GET /api/health"}, "fullDescription": {"text": "`backend/src/index.ts` declares `GET /api/health` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5baa8971ebe192a1", "name": "Unused endpoint: GET /", "shortDescription": {"text": "Unused endpoint: GET /"}, "fullDescription": {"text": "`backend/src/routes/abandonedCheckouts.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-81aa8a98d84fb76a", "name": "Unused endpoint: GET /template", "shortDescription": {"text": "Unused endpoint: GET /template"}, "fullDescription": {"text": "`backend/src/routes/abandonedCheckouts.ts` declares `GET /template` 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-b1a03666fe702028", "name": "Unused endpoint: POST /template", "shortDescription": {"text": "Unused endpoint: POST /template"}, "fullDescription": {"text": "`backend/src/routes/abandonedCheckouts.ts` declares `POST /template` 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/abandonedCheckouts.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-515fbe87c0208d90", "name": "Unused endpoint: PUT /:id/status", "shortDescription": {"text": "Unused endpoint: PUT /:id/status"}, "fullDescription": {"text": "`backend/src/routes/abandonedCheckouts.ts` declares `PUT /:id/status` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4a66d271b39b318e", "name": "Unused endpoint: POST /employees", "shortDescription": {"text": "Unused endpoint: POST /employees"}, "fullDescription": {"text": "`backend/src/routes/attendance.ts` declares `POST /employees` 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-9a003fe02a32f98d", "name": "Unused endpoint: PUT /employees/:id", "shortDescription": {"text": "Unused endpoint: PUT /employees/:id"}, "fullDescription": {"text": "`backend/src/routes/attendance.ts` declares `PUT /employees/: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-cf5cac8cd64fc789", "name": "Unused endpoint: GET /employees", "shortDescription": {"text": "Unused endpoint: GET /employees"}, "fullDescription": {"text": "`backend/src/routes/attendance.ts` declares `GET /employees` 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-4446080bf3493f6e", "name": "Unused endpoint: GET /employees/stats", "shortDescription": {"text": "Unused endpoint: GET /employees/stats"}, "fullDescription": {"text": "`backend/src/routes/attendance.ts` declares `GET /employees/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-a300923b068adcba", "name": "Unused endpoint: GET /records", "shortDescription": {"text": "Unused endpoint: GET /records"}, "fullDescription": {"text": "`backend/src/routes/attendance.ts` declares `GET /records` 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-5c94aa3d8439e384", "name": "Unused endpoint: GET /records/month/:month", "shortDescription": {"text": "Unused endpoint: GET /records/month/:month"}, "fullDescription": {"text": "`backend/src/routes/attendance.ts` declares `GET /records/month/:month` 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-655614c94139f993", "name": "Unused endpoint: POST /records", "shortDescription": {"text": "Unused endpoint: POST /records"}, "fullDescription": {"text": "`backend/src/routes/attendance.ts` declares `POST /records` 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-17238bbcc9c6895a", "name": "Unused endpoint: POST /advances", "shortDescription": {"text": "Unused endpoint: POST /advances"}, "fullDescription": {"text": "`backend/src/routes/attendance.ts` declares `POST /advances` 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-e5006457a4f69d46", "name": "Unused endpoint: POST /payments", "shortDescription": {"text": "Unused endpoint: POST /payments"}, "fullDescription": {"text": "`backend/src/routes/attendance.ts` declares `POST /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-7a201de6d725b5f3", "name": "Unused endpoint: POST /hourly-logs", "shortDescription": {"text": "Unused endpoint: POST /hourly-logs"}, "fullDescription": {"text": "`backend/src/routes/attendance.ts` declares `POST /hourly-logs` 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-b3dc12b685a2bf36", "name": "Unused endpoint: DELETE /hourly-logs/:employeeId/:dateStr", "shortDescription": {"text": "Unused endpoint: DELETE /hourly-logs/:employeeId/:dateStr"}, "fullDescription": {"text": "`backend/src/routes/attendance.ts` declares `DELETE /hourly-logs/:employeeId/:dateStr` 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-b08c8c3829e79cc0", "name": "Unused endpoint: GET /hourly-logs/month/:month", "shortDescription": {"text": "Unused endpoint: GET /hourly-logs/month/:month"}, "fullDescription": {"text": "`backend/src/routes/attendance.ts` declares `GET /hourly-logs/month/:month` 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-c5c788e3e543ec56", "name": "Unused endpoint: GET /hourly-logs/all", "shortDescription": {"text": "Unused endpoint: GET /hourly-logs/all"}, "fullDescription": {"text": "`backend/src/routes/attendance.ts` declares `GET /hourly-logs/all` 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-cecae8513787227b", "name": "Unused endpoint: GET /configuration", "shortDescription": {"text": "Unused endpoint: GET /configuration"}, "fullDescription": {"text": "`backend/src/routes/cogs.ts` declares `GET /configuration` 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-cee0657fbb9ed5b8", "name": "Unused endpoint: GET /configuration/versions", "shortDescription": {"text": "Unused endpoint: GET /configuration/versions"}, "fullDescription": {"text": "`backend/src/routes/cogs.ts` declares `GET /configuration/versions` 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-7ac3935621287448", "name": "Unused endpoint: POST /configuration", "shortDescription": {"text": "Unused endpoint: POST /configuration"}, "fullDescription": {"text": "`backend/src/routes/cogs.ts` declares `POST /configuration` 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-8b5f1ab538f83f0d", "name": "Unused endpoint: PUT /configuration/:id", "shortDescription": {"text": "Unused endpoint: PUT /configuration/:id"}, "fullDescription": {"text": "`backend/src/routes/cogs.ts` declares `PUT /configuration/: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-74281ee023693a59", "name": "Unused endpoint: DELETE /configuration/:id", "shortDescription": {"text": "Unused endpoint: DELETE /configuration/:id"}, "fullDescription": {"text": "`backend/src/routes/cogs.ts` declares `DELETE /configuration/: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-6236b283b79811b8", "name": "Unused endpoint: POST /upload", "shortDescription": {"text": "Unused endpoint: POST /upload"}, "fullDescription": {"text": "`backend/src/routes/deliveryDates.ts` declares `POST /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-cd8dc4599ec52a08", "name": "Unused endpoint: GET /stats", "shortDescription": {"text": "Unused endpoint: GET /stats"}, "fullDescription": {"text": "`backend/src/routes/deliveryDates.ts` declares `GET /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-c0a4de35c39d7bf9", "name": "Unused endpoint: GET /blocked", "shortDescription": {"text": "Unused endpoint: GET /blocked"}, "fullDescription": {"text": "`backend/src/routes/pincodes.ts` declares `GET /blocked` 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-6252480dad5c77a1", "name": "Unused endpoint: POST /blocked", "shortDescription": {"text": "Unused endpoint: POST /blocked"}, "fullDescription": {"text": "`backend/src/routes/pincodes.ts` declares `POST /blocked` 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-b860111811aaf2b9", "name": "Unused endpoint: DELETE /blocked/:pinCode", "shortDescription": {"text": "Unused endpoint: DELETE /blocked/:pinCode"}, "fullDescription": {"text": "`backend/src/routes/pincodes.ts` declares `DELETE /blocked/:pinCode` 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-9b9852c70505ceef", "name": "Unused endpoint: GET /cod-added-cities", "shortDescription": {"text": "Unused endpoint: GET /cod-added-cities"}, "fullDescription": {"text": "`backend/src/routes/pincodes.ts` declares `GET /cod-added-cities` 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-2a382c23be687278", "name": "Unused endpoint: POST /cod-added-cities", "shortDescription": {"text": "Unused endpoint: POST /cod-added-cities"}, "fullDescription": {"text": "`backend/src/routes/pincodes.ts` declares `POST /cod-added-cities` 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-d05d0fa35abd1f0b", "name": "Unused endpoint: DELETE /cod-added-cities/:city", "shortDescription": {"text": "Unused endpoint: DELETE /cod-added-cities/:city"}, "fullDescription": {"text": "`backend/src/routes/pincodes.ts` declares `DELETE /cod-added-cities/:city` 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-64d57215472ded0b", "name": "Unused endpoint: GET /narration-rules", "shortDescription": {"text": "Unused endpoint: GET /narration-rules"}, "fullDescription": {"text": "`backend/src/routes/bankAccount.ts` declares `GET /narration-rules` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4b020e39dd503404", "name": "Unused endpoint: POST /narration-rules", "shortDescription": {"text": "Unused endpoint: POST /narration-rules"}, "fullDescription": {"text": "`backend/src/routes/bankAccount.ts` declares `POST /narration-rules` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-90c6c34f24c18536", "name": "Unused endpoint: DELETE /narration-rules/:id", "shortDescription": {"text": "Unused endpoint: DELETE /narration-rules/:id"}, "fullDescription": {"text": "`backend/src/routes/bankAccount.ts` declares `DELETE /narration-rules/: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-9260174de75b32ba", "name": "Unused endpoint: GET /categories", "shortDescription": {"text": "Unused endpoint: GET /categories"}, "fullDescription": {"text": "`backend/src/routes/bankAccount.ts` declares `GET /categories` 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-1033c7a1d3884505", "name": "Unused endpoint: POST /categories", "shortDescription": {"text": "Unused endpoint: POST /categories"}, "fullDescription": {"text": "`backend/src/routes/bankAccount.ts` declares `POST /categories` 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-52f939032aab887f", "name": "Unused endpoint: GET /transactions", "shortDescription": {"text": "Unused endpoint: GET /transactions"}, "fullDescription": {"text": "`backend/src/routes/bankAccount.ts` declares `GET /transactions` 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/24226"}, "properties": {"repository": "ankitsrivas14/upload-photobookx", "repoUrl": "https://github.com/ankitsrivas14/upload-photobookx", "branch": "main"}, "results": [{"ruleId": "scanner-ee4c066d18ad8b4f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test-api.js:8"}, "properties": {"repobilityId": "dc441aec79063f2d", "scanner": "scanner-primary", "fingerprint": "ee4c066d18ad8b4f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fa104c15bc4fc8fb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test-local.js:4"}, "properties": {"repobilityId": "a8ae684b3f033313", "scanner": "scanner-primary", "fingerprint": "fa104c15bc4fc8fb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-810653d81165d234", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/check_db_history.js:25"}, "properties": {"repobilityId": "08bc2ef336de5f20", "scanner": "scanner-primary", "fingerprint": "810653d81165d234", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0e42a1931e11b46e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/scripts/testShiprocketQuery.ts:17"}, "properties": {"repobilityId": "7ee89fb222cdd750", "scanner": "scanner-primary", "fingerprint": "0e42a1931e11b46e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fab1c4b3689cd151", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/scripts/listMissingOrders.ts:30"}, "properties": {"repobilityId": "3895703e9e1e8266", "scanner": "scanner-primary", "fingerprint": "fab1c4b3689cd151", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e56d26dc16ff9bb4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/scripts/listSync153.ts:20"}, "properties": {"repobilityId": "14d4db391aba1f8f", "scanner": "scanner-primary", "fingerprint": "e56d26dc16ff9bb4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b7c19ed1abfacc3f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/scripts/testShiprocketHistory.ts:17"}, "properties": {"repobilityId": "34d925b8177393a8", "scanner": "scanner-primary", "fingerprint": "b7c19ed1abfacc3f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fd4f6378e98bc1ab", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/scripts/debugSync.ts:27"}, "properties": {"repobilityId": "9fb3b091b2776c4e", "scanner": "scanner-primary", "fingerprint": "fd4f6378e98bc1ab", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-98140b5e1a94f05e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/scripts/testShipmentId.ts:17"}, "properties": {"repobilityId": "e9f45c2052ba69a1", "scanner": "scanner-primary", "fingerprint": "98140b5e1a94f05e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3f39b1072ca18473", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/scripts/backfill-roas.ts:14"}, "properties": {"repobilityId": "33e0bbea37bd54db", "scanner": "scanner-primary", "fingerprint": "3f39b1072ca18473", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4a1ef65ab214a3f6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/scripts/fixViaAWB.ts:24"}, "properties": {"repobilityId": "ce6be556307b7cdb", "scanner": "scanner-primary", "fingerprint": "4a1ef65ab214a3f6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2fb70351c72de4ec", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/scripts/testAWBEndpoint.ts:16"}, "properties": {"repobilityId": "f04d3dfc01b3ab49", "scanner": "scanner-primary", "fingerprint": "2fb70351c72de4ec", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-499de5ada0e2810d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/scripts/fixOldFailedOrders.ts:29"}, "properties": {"repobilityId": "d4a6096eeaee16c1", "scanner": "scanner-primary", "fingerprint": "499de5ada0e2810d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c0743920a225b706", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/scripts/debugPB1118S.ts:14"}, "properties": {"repobilityId": "2f91a28cf06e6515", "scanner": "scanner-primary", "fingerprint": "c0743920a225b706", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-28acdecbda334540", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/scripts/migrate-pincodes-full.ts:10"}, "properties": {"repobilityId": "9ffc04ca53116c17", "scanner": "scanner-primary", "fingerprint": "28acdecbda334540", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-386cbf135d2471c0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/scripts/testShiprocketDates.ts:17"}, "properties": {"repobilityId": "4a7c646b47a0b8b6", "scanner": "scanner-primary", "fingerprint": "386cbf135d2471c0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9378a3348d41deb0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/scripts/exploreShiprocket.ts:16"}, "properties": {"repobilityId": "38e88f5fce0b5f66", "scanner": "scanner-primary", "fingerprint": "9378a3348d41deb0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9acbcffc8fb6cd0d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/scripts/testCloneFetch.ts:14"}, "properties": {"repobilityId": "9ded3065720ca8b2", "scanner": "scanner-primary", "fingerprint": "9acbcffc8fb6cd0d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8cb1e93f6ca3caa6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/scripts/listTerminalSync.ts:22"}, "properties": {"repobilityId": "36eb5f8ec7c750ea", "scanner": "scanner-primary", "fingerprint": "8cb1e93f6ca3caa6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-365898262f341508", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/scripts/historicalSync.ts:15"}, "properties": {"repobilityId": "86e22b5ec2a98303", "scanner": "scanner-primary", "fingerprint": "365898262f341508", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e75eecb6de77cda9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/scripts/testShiprocketFetch.ts:14"}, "properties": {"repobilityId": "2e3a8cbfb7ba3395", "scanner": "scanner-primary", "fingerprint": "e75eecb6de77cda9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e27397977c8d1eec", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/scripts/deepSyncWallet.ts:15"}, "properties": {"repobilityId": "bb61da6a8b10ee42", "scanner": "scanner-primary", "fingerprint": "e27397977c8d1eec", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5ebd1fe4f3503fe0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/scripts/backfill-shipping.ts:11"}, "properties": {"repobilityId": "1026d3e3682c08ff", "scanner": "scanner-primary", "fingerprint": "5ebd1fe4f3503fe0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-52b46324c6f0d5c9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/scripts/backfill-pnl.ts:11"}, "properties": {"repobilityId": "3ae2eb824c46acc5", "scanner": "scanner-primary", "fingerprint": "52b46324c6f0d5c9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d88b18306efaf8c6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/scripts/backfill-order-stats.ts:11"}, "properties": {"repobilityId": "9109c7bcdb9cffef", "scanner": "scanner-primary", "fingerprint": "d88b18306efaf8c6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-01d3bcd11f66abca", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/scripts/testAwbSearch.ts:17"}, "properties": {"repobilityId": "4f0de12c2d5471fd", "scanner": "scanner-primary", "fingerprint": "01d3bcd11f66abca", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-00a833268c36cd14", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/index.ts:25"}, "properties": {"repobilityId": "db2171a39601fa41", "scanner": "scanner-primary", "fingerprint": "00a833268c36cd14", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1f966cb4b4a4cab1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/test_shiprocket_delivery.ts:15"}, "properties": {"repobilityId": "fb7dd0c2af7486e1", "scanner": "scanner-primary", "fingerprint": "1f966cb4b4a4cab1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-100ed9fca5ab1c41", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/services/shiprocketService.ts:171"}, "properties": {"repobilityId": "3e62fa9963a82cca", "scanner": "scanner-primary", "fingerprint": "100ed9fca5ab1c41", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-39e09056f73faee7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/services/shopifyService.ts:205"}, "properties": {"repobilityId": "ef1b7fee602482f7", "scanner": "scanner-primary", "fingerprint": "39e09056f73faee7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-67c94f4968f2c235", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/services/aiService.ts:88"}, "properties": {"repobilityId": "85c8cc8554ad8d9d", "scanner": "scanner-primary", "fingerprint": "67c94f4968f2c235", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-597796fd59e3d103", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/routes/sales.ts:705"}, "properties": {"repobilityId": "2c35534e3c4e8f1d", "scanner": "scanner-primary", "fingerprint": "597796fd59e3d103", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7f6e92f89073cbcb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/routes/magicLinks.ts:870"}, "properties": {"repobilityId": "0e873b6b7dbb51f0", "scanner": "scanner-primary", "fingerprint": "7f6e92f89073cbcb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0d3b03a0823578c5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/src/pages/GSTMonthlyReports.tsx:40"}, "properties": {"repobilityId": "db6ab4a786e952ab", "scanner": "scanner-primary", "fingerprint": "0d3b03a0823578c5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-79a88eb5d394e171", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 frontend/src/pages/BankAccountPage.tsx:918"}, "properties": {"repobilityId": "3e84637d6bb8ff28", "scanner": "scanner-primary", "fingerprint": "79a88eb5d394e171", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-3512998ab90bf4af", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/src/pages/BankAccountPage.tsx:254"}, "properties": {"repobilityId": "d08677ba4baa1383", "scanner": "scanner-primary", "fingerprint": "3512998ab90bf4af", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ce16c2869d1759c6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/src/pages/analysis/AdsAnalysis.tsx:230"}, "properties": {"repobilityId": "777df507fa80c417", "scanner": "scanner-primary", "fingerprint": "ce16c2869d1759c6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-05b28ea28cb36125", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 frontend/src/pages/analysis/StuckOrdersAnalysis.tsx:122"}, "properties": {"repobilityId": "695b29d01cf6313c", "scanner": "scanner-primary", "fingerprint": "05b28ea28cb36125", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-f3ed4ca908bd0af7", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in frontend/src/pages/analysis/StuckOrdersAnalysis.tsx:122"}, "properties": {"repobilityId": "5a67fb3e79d12585", "scanner": "scanner-primary", "fingerprint": "f3ed4ca908bd0af7", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/src/pages/analysis/StuckOrdersAnalysis.tsx"}, "region": {"startLine": 122}}}]}, {"ruleId": "scanner-d9dc03bc173f8284", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in frontend/src/services/api.ts:188"}, "properties": {"repobilityId": "3ded031fe9bd2df7", "scanner": "scanner-primary", "fingerprint": "d9dc03bc173f8284", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/src/services/api.ts"}, "region": {"startLine": 188}}}]}, {"ruleId": "scanner-b3368be0e16eaf38", "level": "note", "message": {"text": "Very large file: backend/src/routes/sales.ts (1834 lines)"}, "properties": {"repobilityId": "e1c56d77d23f44f9", "scanner": "scanner-primary", "fingerprint": "b3368be0e16eaf38", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c30cbbfaeea6b110", "level": "note", "message": {"text": "Very large file: frontend/src/pages/DashboardPage.tsx (1859 lines)"}, "properties": {"repobilityId": "580247094b34b005", "scanner": "scanner-primary", "fingerprint": "c30cbbfaeea6b110", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f5e602591c8d25ea", "level": "note", "message": {"text": "Very large file: frontend/src/pages/BankAccountPage.tsx (1211 lines)"}, "properties": {"repobilityId": "ed2f6a0992f465cc", "scanner": "scanner-primary", "fingerprint": "f5e602591c8d25ea", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a48511d77cfc6c9c", "level": "note", "message": {"text": "Very large file: frontend/src/pages/SalesPage.tsx (2829 lines)"}, "properties": {"repobilityId": "81fccaa900f48be0", "scanner": "scanner-primary", "fingerprint": "a48511d77cfc6c9c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ea3b5e389d8c9c0f", "level": "note", "message": {"text": "Low test-to-source ratio"}, "properties": {"repobilityId": "ef7b2552cc00a375", "scanner": "scanner-primary", "fingerprint": "ea3b5e389d8c9c0f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["tests"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "25a10c69bea96a55", "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": "f63e300310f3ae8e", "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": "3ecfe4c64ede5ef2", "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": "faed74c97e6d15dd", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "note", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "0d4b186bf86c97c6", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-c8f46f3d20338fb5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 test-api.js:3"}, "properties": {"repobilityId": "9aa78addcc67edf6", "scanner": "scanner-primary", "fingerprint": "c8f46f3d20338fb5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7a883452d866280c", "level": "note", "message": {"text": "Legacy-named symbol `fixViaAWB_v2` in backend/scripts/fixViaAWB.ts:125"}, "properties": {"repobilityId": "412bb8ec8b91e04a", "scanner": "scanner-primary", "fingerprint": "7a883452d866280c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-98319212435f02ad", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 backend/src/services/shiprocketService.ts:143"}, "properties": {"repobilityId": "a9f8840bef3ae83c", "scanner": "scanner-primary", "fingerprint": "98319212435f02ad", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5f1baac89997f2c5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 backend/src/services/shopifyService.ts:43"}, "properties": {"repobilityId": "b0d74b3adf2a6242", "scanner": "scanner-primary", "fingerprint": "5f1baac89997f2c5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a9b0b06e433b807b", "level": "note", "message": {"text": "Legacy-named symbol `hasOld` in backend/src/routes/cogs.ts:12"}, "properties": {"repobilityId": "0aafca8b883c300b", "scanner": "scanner-primary", "fingerprint": "a9b0b06e433b807b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-a0dad9e704a39a98", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/pages/SalesPage.tsx:433"}, "properties": {"repobilityId": "eccc18ffeec8d8e1", "scanner": "scanner-primary", "fingerprint": "a0dad9e704a39a98", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3001d5bcf83281df", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/services/api.ts:211"}, "properties": {"repobilityId": "366ace1880603dd1", "scanner": "scanner-primary", "fingerprint": "3001d5bcf83281df", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8e11138a9f634ca9", "level": "warning", "message": {"text": "Frontend route `dashboard` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "c97671d7cb9bdc13", "scanner": "scanner-primary", "fingerprint": "8e11138a9f634ca9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-0747c82b2d5230fa", "level": "warning", "message": {"text": "Frontend route `sales-management` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "c1157084c91ef44e", "scanner": "scanner-primary", "fingerprint": "0747c82b2d5230fa", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-8f2f2eae0ca9fed3", "level": "warning", "message": {"text": "Frontend route `backlog` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "204e4fff6b828c0d", "scanner": "scanner-primary", "fingerprint": "8f2f2eae0ca9fed3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-8c65fa295d42f7ba", "level": "warning", "message": {"text": "Frontend route `abandoned-checkouts` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "7ad19f105e554e3b", "scanner": "scanner-primary", "fingerprint": "8c65fa295d42f7ba", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-74351003f37fca4a", "level": "warning", "message": {"text": "Frontend route `expenses/*` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "dda87c4913082c87", "scanner": "scanner-primary", "fingerprint": "74351003f37fca4a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-e0fcc9b27bab88dc", "level": "warning", "message": {"text": "Frontend route `analysis/*` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "4f238137cb31e55f", "scanner": "scanner-primary", "fingerprint": "e0fcc9b27bab88dc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-a8a8dbf19e5b54dc", "level": "warning", "message": {"text": "Frontend route `attendance/*` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "e930f8696219e16e", "scanner": "scanner-primary", "fingerprint": "a8a8dbf19e5b54dc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-174559f2bd808ccd", "level": "warning", "message": {"text": "Frontend route `tools/*` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "537109fc4b05d41a", "scanner": "scanner-primary", "fingerprint": "174559f2bd808ccd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-2abe858d207e2f5b", "level": "warning", "message": {"text": "Frontend route `products` has no Link/navigate to it \u2014 frontend/src/pages/ToolsPage.tsx"}, "properties": {"repobilityId": "a412fbda0690737e", "scanner": "scanner-primary", "fingerprint": "2abe858d207e2f5b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-4010179d53c2adc4", "level": "warning", "message": {"text": "Frontend route `gst-reports/*` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "b85e3097299e7597", "scanner": "scanner-primary", "fingerprint": "4010179d53c2adc4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-18d560e145721f72", "level": "warning", "message": {"text": "Frontend route `/upload/:token` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "32dba09b6da0c78f", "scanner": "scanner-primary", "fingerprint": "18d560e145721f72", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-a048c17761830bb6", "level": "warning", "message": {"text": "Frontend route `failed-orders` has no Link/navigate to it \u2014 frontend/src/pages/AnalysisPage.tsx"}, "properties": {"repobilityId": "89681f1876b5bc8d", "scanner": "scanner-primary", "fingerprint": "a048c17761830bb6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-2fc37064f9d6fdd7", "level": "warning", "message": {"text": "Frontend route `pin-codes` has no Link/navigate to it \u2014 frontend/src/pages/AnalysisPage.tsx"}, "properties": {"repobilityId": "619fd6279c2e14c9", "scanner": "scanner-primary", "fingerprint": "2fc37064f9d6fdd7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-2fe0c1acfc22efc8", "level": "warning", "message": {"text": "Frontend route `stuck-orders` has no Link/navigate to it \u2014 frontend/src/pages/AnalysisPage.tsx"}, "properties": {"repobilityId": "97dd245cb24e9675", "scanner": "scanner-primary", "fingerprint": "2fe0c1acfc22efc8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-c080fd8c5ed555f7", "level": "warning", "message": {"text": "Frontend route `tickets` has no Link/navigate to it \u2014 frontend/src/pages/AnalysisPage.tsx"}, "properties": {"repobilityId": "50c728851f567bd2", "scanner": "scanner-primary", "fingerprint": "c080fd8c5ed555f7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-7d82b81f5c89147e", "level": "warning", "message": {"text": "Frontend route `tickets/new` has no Link/navigate to it \u2014 frontend/src/pages/AnalysisPage.tsx"}, "properties": {"repobilityId": "de848702f6916c3f", "scanner": "scanner-primary", "fingerprint": "7d82b81f5c89147e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-5a8aa359df5f479d", "level": "warning", "message": {"text": "Frontend route `stock-prediction` has no Link/navigate to it \u2014 frontend/src/pages/ToolsPage.tsx"}, "properties": {"repobilityId": "6a643912d3615e14", "scanner": "scanner-primary", "fingerprint": "5a8aa359df5f479d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-e18d97e2b00d03e1", "level": "warning", "message": {"text": "Frontend route `gst-reports` has no Link/navigate to it \u2014 frontend/src/pages/ToolsPage.tsx"}, "properties": {"repobilityId": "cd8f0eb24c9c57f5", "scanner": "scanner-primary", "fingerprint": "e18d97e2b00d03e1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-4a4cb7a3c2773f03", "level": "warning", "message": {"text": "Frontend route `variant-performance` has no Link/navigate to it \u2014 frontend/src/pages/ToolsPage.tsx"}, "properties": {"repobilityId": "262221b25cfd872d", "scanner": "scanner-primary", "fingerprint": "4a4cb7a3c2773f03", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-cc5ee6c9b260dd7e", "level": "warning", "message": {"text": "Frontend route `labels` has no Link/navigate to it \u2014 frontend/src/pages/ToolsPage.tsx"}, "properties": {"repobilityId": "8f31893249d3ab17", "scanner": "scanner-primary", "fingerprint": "cc5ee6c9b260dd7e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-4b2847899d667105", "level": "warning", "message": {"text": "Frontend route `/monthly` has no Link/navigate to it \u2014 frontend/src/pages/GSTReportsPage.tsx"}, "properties": {"repobilityId": "d77882bce85b39a4", "scanner": "scanner-primary", "fingerprint": "4b2847899d667105", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-ee947ea21d6bc6e5", "level": "warning", "message": {"text": "Frontend route `meta-ads` has no Link/navigate to it \u2014 frontend/src/pages/ExpensesPage.tsx"}, "properties": {"repobilityId": "a1ca0482d2a181f0", "scanner": "scanner-primary", "fingerprint": "ee947ea21d6bc6e5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-540efaa087368082", "level": "warning", "message": {"text": "Frontend route `cogs` has no Link/navigate to it \u2014 frontend/src/pages/ExpensesPage.tsx"}, "properties": {"repobilityId": "3aba89deb9c20742", "scanner": "scanner-primary", "fingerprint": "540efaa087368082", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-48d8628f16a0fff1", "level": "warning", "message": {"text": "Frontend route `fixed-monthly` has no Link/navigate to it \u2014 frontend/src/pages/ExpensesPage.tsx"}, "properties": {"repobilityId": "6ce50c980246da31", "scanner": "scanner-primary", "fingerprint": "48d8628f16a0fff1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-346fceec99ffca9c", "level": "warning", "message": {"text": "Frontend route `bank-account` has no Link/navigate to it \u2014 frontend/src/pages/ExpensesPage.tsx"}, "properties": {"repobilityId": "4b5f615e08f31d50", "scanner": "scanner-primary", "fingerprint": "346fceec99ffca9c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-3760a9def51b2936", "level": "error", "message": {"text": "Dangling fetch: POST http://localhost:3001/api/admin/auth/login (test-api.js:3)"}, "properties": {"repobilityId": "2b613e5c0d348013", "scanner": "scanner-primary", "fingerprint": "3760a9def51b2936", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-32976f81aabc7cf7", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/auth/login (frontend/src/services/api.ts:221)"}, "properties": {"repobilityId": "65a8a042ee1b895e", "scanner": "scanner-primary", "fingerprint": "32976f81aabc7cf7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-454931e289d736a3", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/auth/register (frontend/src/services/api.ts:234)"}, "properties": {"repobilityId": "8680deb2a2513a6c", "scanner": "scanner-primary", "fingerprint": "454931e289d736a3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-653de62ae32e55f9", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/auth/me (frontend/src/services/api.ts:247)"}, "properties": {"repobilityId": "d82609a8c50211e1", "scanner": "scanner-primary", "fingerprint": "653de62ae32e55f9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-b8d0bc3d42bbc908", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/magic-links?page=${page}&limit=${limit} (frontend/src/services/api.ts:256)"}, "properties": {"repobilityId": "ad55ff5f3af8ff39", "scanner": "scanner-primary", "fingerprint": "b8d0bc3d42bbc908", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-408b87ad7281f4c1", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/magic-links (frontend/src/services/api.ts:266)"}, "properties": {"repobilityId": "69b1f2e8c7143d22", "scanner": "scanner-primary", "fingerprint": "408b87ad7281f4c1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-0068cb26ea4488db", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/admin/magic-links/${token} (frontend/src/services/api.ts:273)"}, "properties": {"repobilityId": "cc17fd0124cef227", "scanner": "scanner-primary", "fingerprint": "0068cb26ea4488db", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-3146a0cca6f1574f", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/admin/magic-links/${token}/delete-images (frontend/src/services/api.ts:318)"}, "properties": {"repobilityId": "8077e5c81775e4fa", "scanner": "scanner-primary", "fingerprint": "3146a0cca6f1574f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-12a836da771e80ac", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/magic-links/shopify/orders?limit=${limit}${allParam}${dateParam}${monthParam} (frontend/src/services/api.ts:328)"}, "properties": {"repobilityId": "dbde904a7449b7f4", "scanner": "scanner-primary", "fingerprint": "12a836da771e80ac", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-f4258f5e2108536e", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/sales/backlog-orders (frontend/src/services/api.ts:332)"}, "properties": {"repobilityId": "a9f9bafb641a83ed", "scanner": "scanner-primary", "fingerprint": "f4258f5e2108536e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-8dca17b4509a7c1b", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/magic-links/shopify/orders/${encodeURIComponent(orderNumber)} (frontend/src/services/api.ts:336)"}, "properties": {"repobilityId": "141d0496e2d0d04c", "scanner": "scanner-primary", "fingerprint": "8dca17b4509a7c1b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-7fca64004335f5f2", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/magic-links/shopify/orders/clear-cache (frontend/src/services/api.ts:340)"}, "properties": {"repobilityId": "560a301a98fe7fef", "scanner": "scanner-primary", "fingerprint": "7fca64004335f5f2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-fc063ca2142f441c", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/magic-links/shiprocket/fetch-shipping-charge (frontend/src/services/api.ts:350)"}, "properties": {"repobilityId": "2ca47aad7b6c8015", "scanner": "scanner-primary", "fingerprint": "fc063ca2142f441c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-90903fa364d19fd3", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/magic-links/shiprocket/clear-cache (frontend/src/services/api.ts:360)"}, "properties": {"repobilityId": "432bdd9570ed58b4", "scanner": "scanner-primary", "fingerprint": "90903fa364d19fd3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-defe212d7ecf1bcf", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/magic-links/shiprocket/sync-shipping-charges (frontend/src/services/api.ts:369)"}, "properties": {"repobilityId": "555ba61ba148922b", "scanner": "scanner-primary", "fingerprint": "defe212d7ecf1bcf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-2f6d9889356dbdc7", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/magic-links/shopify/update-delivery-status (frontend/src/services/api.ts:379)"}, "properties": {"repobilityId": "8b4bb1236d3df06f", "scanner": "scanner-primary", "fingerprint": "2f6d9889356dbdc7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-3d5dd53e1a60a9a4", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/magic-links/shopify/customers/bulk-tags (frontend/src/services/api.ts:393)"}, "properties": {"repobilityId": "74fb9afee6387951", "scanner": "scanner-primary", "fingerprint": "3d5dd53e1a60a9a4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-34de321f09be3297", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/magic-links/shopify/customers/${customerId}/tags (frontend/src/services/api.ts:404)"}, "properties": {"repobilityId": "0fd9d6e9a1a4e1f6", "scanner": "scanner-primary", "fingerprint": "34de321f09be3297", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-8a36aa48d055a62d", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/sales/acknowledge-orders (frontend/src/services/api.ts:431)"}, "properties": {"repobilityId": "52cda1a891b9709f", "scanner": "scanner-primary", "fingerprint": "8a36aa48d055a62d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-99aecc20e7bbe4bc", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/admin/sales/acknowledge-orders (frontend/src/services/api.ts:441)"}, "properties": {"repobilityId": "87c5daa9c23a3d48", "scanner": "scanner-primary", "fingerprint": "99aecc20e7bbe4bc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-c4979352c8bd786d", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/sales/ticket-raised-orders (frontend/src/services/api.ts:458)"}, "properties": {"repobilityId": "794a6148c2761e44", "scanner": "scanner-primary", "fingerprint": "c4979352c8bd786d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-10f9ad5dcda1240c", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/admin/sales/ticket-raised-orders (frontend/src/services/api.ts:468)"}, "properties": {"repobilityId": "6974668cd58296aa", "scanner": "scanner-primary", "fingerprint": "10f9ad5dcda1240c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-b2dc23ef1ee5dedb", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/sales/discard-orders (frontend/src/services/api.ts:485)"}, "properties": {"repobilityId": "361a3721aeb75d81", "scanner": "scanner-primary", "fingerprint": "b2dc23ef1ee5dedb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-d00a8c770cf57d34", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/admin/sales/discard-orders (frontend/src/services/api.ts:495)"}, "properties": {"repobilityId": "035bd166587864a8", "scanner": "scanner-primary", "fingerprint": "d00a8c770cf57d34", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-eddb88a5409ff56e", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/sales/mark-rto (frontend/src/services/api.ts:512)"}, "properties": {"repobilityId": "752607c291976952", "scanner": "scanner-primary", "fingerprint": "eddb88a5409ff56e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-fc2247f99c61f5da", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/admin/sales/mark-rto (frontend/src/services/api.ts:522)"}, "properties": {"repobilityId": "e3fd859f4309c1ca", "scanner": "scanner-primary", "fingerprint": "fc2247f99c61f5da", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-4c032e2546199e26", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/magic-links/shopify/products (frontend/src/services/api.ts:552)"}, "properties": {"repobilityId": "ce3f486b354745ec", "scanner": "scanner-primary", "fingerprint": "4c032e2546199e26", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-979bfbef90194c26", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/magic-links/shopify/products/${productId} (frontend/src/services/api.ts:556)"}, "properties": {"repobilityId": "b2c79d3e7ec77944", "scanner": "scanner-primary", "fingerprint": "979bfbef90194c26", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-46852b08becf7c51", "level": "error", "message": {"text": "Dangling fetch: PUT /api/admin/magic-links/shopify/products/bulk-update-prices (frontend/src/services/api.ts:574)"}, "properties": {"repobilityId": "d6313193200d39f5", "scanner": "scanner-primary", "fingerprint": "46852b08becf7c51", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-13bccc8d0384d2da", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/expenses/sources (frontend/src/services/api.ts:586)"}, "properties": {"repobilityId": "1d94507342ab90cb", "scanner": "scanner-primary", "fingerprint": "13bccc8d0384d2da", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-85c6bee73a088e6b", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/expenses/sources (frontend/src/services/api.ts:594)"}, "properties": {"repobilityId": "1170ba5a6e5b72e1", "scanner": "scanner-primary", "fingerprint": "85c6bee73a088e6b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-5b9c7c9cea414e3c", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/expenses/meta-ads?page=${page}&limit=${limit} (frontend/src/services/api.ts:615)"}, "properties": {"repobilityId": "a29d6729a4c671c2", "scanner": "scanner-primary", "fingerprint": "5b9c7c9cea414e3c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-a964c7750bcb5faf", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/expenses/meta-ads (frontend/src/services/api.ts:638)"}, "properties": {"repobilityId": "bcbf54b0d8620b3e", "scanner": "scanner-primary", "fingerprint": "a964c7750bcb5faf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-f45f98c443c03615", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/admin/expenses/meta-ads/${expenseId} (frontend/src/services/api.ts:645)"}, "properties": {"repobilityId": "9200949ee7547928", "scanner": "scanner-primary", "fingerprint": "f45f98c443c03615", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-390a53da4731edfb", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/expenses/daily-ad-spend (frontend/src/services/api.ts:662)"}, "properties": {"repobilityId": "7ae7aa70d9402d02", "scanner": "scanner-primary", "fingerprint": "390a53da4731edfb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-71fcc1a415b692b6", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/expenses/daily-ad-spend (frontend/src/services/api.ts:680)"}, "properties": {"repobilityId": "93547c5394b7d3c0", "scanner": "scanner-primary", "fingerprint": "71fcc1a415b692b6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-f26fe73914b708a8", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/admin/expenses/daily-ad-spend/${entryId} (frontend/src/services/api.ts:687)"}, "properties": {"repobilityId": "c32dd8d6f9b8a3a5", "scanner": "scanner-primary", "fingerprint": "f26fe73914b708a8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-56150558d5b29dbc", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/sales/daily-roas/backfill (frontend/src/services/api.ts:705)"}, "properties": {"repobilityId": "c706542c018076f7", "scanner": "scanner-primary", "fingerprint": "56150558d5b29dbc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-e31cbcad2da84d33", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/sales/daily-shipping/backfill (frontend/src/services/api.ts:729)"}, "properties": {"repobilityId": "906f92798f4e5799", "scanner": "scanner-primary", "fingerprint": "e31cbcad2da84d33", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-b8c9f6843255743d", "level": "error", "message": {"text": "Dangling fetch: GET /api/upload/${token} (frontend/src/services/api.ts:734)"}, "properties": {"repobilityId": "93066fa7c6a55b08", "scanner": "scanner-primary", "fingerprint": "b8c9f6843255743d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-b8f06d6d52744f15", "level": "error", "message": {"text": "Dangling fetch: GET /api/upload/${token}/images (frontend/src/services/api.ts:750)"}, "properties": {"repobilityId": "8ce97283c4d57ebd", "scanner": "scanner-primary", "fingerprint": "b8f06d6d52744f15", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-60effc1f596b441f", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/cogs/configuration/versions (frontend/src/services/api.ts:840)"}, "properties": {"repobilityId": "75c4c6d1ce731c7c", "scanner": "scanner-primary", "fingerprint": "60effc1f596b441f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-1f653f092a68a03f", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/fixed-monthly-expenses${qs} (frontend/src/services/api.ts:880)"}, "properties": {"repobilityId": "7e70a97a73e7834d", "scanner": "scanner-primary", "fingerprint": "1f653f092a68a03f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-1118ae498e2edf71", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/fixed-monthly-expenses (frontend/src/services/api.ts:884)"}, "properties": {"repobilityId": "e09b5235beafebf7", "scanner": "scanner-primary", "fingerprint": "1118ae498e2edf71", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-1212fe3a4b3709f7", "level": "error", "message": {"text": "Dangling fetch: PUT /api/admin/fixed-monthly-expenses/${id} (frontend/src/services/api.ts:891)"}, "properties": {"repobilityId": "4ad226d1799a0e16", "scanner": "scanner-primary", "fingerprint": "1212fe3a4b3709f7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-f5f0b8ef6f02d3ea", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/admin/fixed-monthly-expenses/${id} (frontend/src/services/api.ts:898)"}, "properties": {"repobilityId": "3b00e9369a3ed616", "scanner": "scanner-primary", "fingerprint": "f5f0b8ef6f02d3ea", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-ac0969ebc3208148", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/bank-account/categories (frontend/src/services/api.ts:903)"}, "properties": {"repobilityId": "0250f4a2727cbe2a", "scanner": "scanner-primary", "fingerprint": "ac0969ebc3208148", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-5b61b40fc369dbca", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/bank-account/categories (frontend/src/services/api.ts:907)"}, "properties": {"repobilityId": "be415814418164b1", "scanner": "scanner-primary", "fingerprint": "5b61b40fc369dbca", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-92e6f67e2c8df16e", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/bank-account/categories/${encodeURIComponent(oldName)} (frontend/src/services/api.ts:914)"}, "properties": {"repobilityId": "1d4c25c60c37b4e8", "scanner": "scanner-primary", "fingerprint": "92e6f67e2c8df16e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-85bb90422ad8a62d", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/admin/bank-account/categories/${encodeURIComponent(name)} (frontend/src/services/api.ts:921)"}, "properties": {"repobilityId": "0334cfeccc1a02e5", "scanner": "scanner-primary", "fingerprint": "85bb90422ad8a62d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-f51764759a89b453", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/bank-account/categories/${encodeURIComponent(name)}/tags (frontend/src/services/api.ts:927)"}, "properties": {"repobilityId": "ee9cad02e2ba919f", "scanner": "scanner-primary", "fingerprint": "f51764759a89b453", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-391a0513fb6d313b", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/bank-account/transactions (frontend/src/services/api.ts:934)"}, "properties": {"repobilityId": "d96eac5473cbc598", "scanner": "scanner-primary", "fingerprint": "391a0513fb6d313b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-a0e6c9d986341273", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/bank-account/transactions/bulk (frontend/src/services/api.ts:938)"}, "properties": {"repobilityId": "8d31b1a187f00c10", "scanner": "scanner-primary", "fingerprint": "a0e6c9d986341273", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-e12e613d162a8232", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/admin/bank-account/transactions/${id} (frontend/src/services/api.ts:945)"}, "properties": {"repobilityId": "1241841da34c7c84", "scanner": "scanner-primary", "fingerprint": "e12e613d162a8232", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-17b8fe21910c8511", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/bank-account/transactions/bulk/tags (frontend/src/services/api.ts:951)"}, "properties": {"repobilityId": "3ccb1e7127e4174f", "scanner": "scanner-primary", "fingerprint": "17b8fe21910c8511", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-3c05a90927387d44", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/bank-account/transactions/${id} (frontend/src/services/api.ts:958)"}, "properties": {"repobilityId": "e0f5909b2a922592", "scanner": "scanner-primary", "fingerprint": "3c05a90927387d44", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-344c60e642831ccf", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/bank-account/narration-rules (frontend/src/services/api.ts:965)"}, "properties": {"repobilityId": "a0a43945994c9a66", "scanner": "scanner-primary", "fingerprint": "344c60e642831ccf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-46aefa05f1343152", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/bank-account/narration-rules (frontend/src/services/api.ts:969)"}, "properties": {"repobilityId": "9075932387d01017", "scanner": "scanner-primary", "fingerprint": "46aefa05f1343152", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-578322d423e68290", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/admin/bank-account/narration-rules/${id} (frontend/src/services/api.ts:976)"}, "properties": {"repobilityId": "7254947e8622171f", "scanner": "scanner-primary", "fingerprint": "578322d423e68290", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-3d3c31ffaceceee5", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/pincodes/blocked (frontend/src/services/api.ts:991)"}, "properties": {"repobilityId": "eda0c07843480577", "scanner": "scanner-primary", "fingerprint": "3d3c31ffaceceee5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-0613205df8a97fbd", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/pincodes/blocked (frontend/src/services/api.ts:995)"}, "properties": {"repobilityId": "e6efe3bda8441a73", "scanner": "scanner-primary", "fingerprint": "0613205df8a97fbd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-7613c4aa76828377", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/admin/pincodes/blocked/${encodeURIComponent(pinCode)} (frontend/src/services/api.ts:1002)"}, "properties": {"repobilityId": "55080d87d2b8553c", "scanner": "scanner-primary", "fingerprint": "7613c4aa76828377", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-29f1e55cb3280e79", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/magic-links/tracking/${awb} (frontend/src/services/api.ts:1008)"}, "properties": {"repobilityId": "de7100f7ed30c9ed", "scanner": "scanner-primary", "fingerprint": "29f1e55cb3280e79", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-55cd31cb4b3af378", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/magic-links/tickets (frontend/src/services/api.ts:1012)"}, "properties": {"repobilityId": "ec3f4ad7ee116aae", "scanner": "scanner-primary", "fingerprint": "55cd31cb4b3af378", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-27ae68a9568bced9", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/magic-links/tickets (frontend/src/services/api.ts:1016)"}, "properties": {"repobilityId": "32a3bd2065a2623e", "scanner": "scanner-primary", "fingerprint": "27ae68a9568bced9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-71a79152d14008e9", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/magic-links/tickets/${id} (frontend/src/services/api.ts:1023)"}, "properties": {"repobilityId": "740905003578a0b2", "scanner": "scanner-primary", "fingerprint": "71a79152d14008e9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-549d4e18f32bf8be", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/magic-links/tickets/${awb} (frontend/src/services/api.ts:1030)"}, "properties": {"repobilityId": "69dd31040a38c1c2", "scanner": "scanner-primary", "fingerprint": "549d4e18f32bf8be", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-15b51bf6ed5974d7", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/magic-links/generate-complaint (frontend/src/services/api.ts:1034)"}, "properties": {"repobilityId": "b68d6a42324064fb", "scanner": "scanner-primary", "fingerprint": "15b51bf6ed5974d7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-14afd0ec6eea4fda", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/sales/generate-incomplete-address-message (frontend/src/services/api.ts:1041)"}, "properties": {"repobilityId": "14150de3c6421ae4", "scanner": "scanner-primary", "fingerprint": "14afd0ec6eea4fda", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-ed984563d0c158dd", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/sales/generate-multiple-orders-message (frontend/src/services/api.ts:1048)"}, "properties": {"repobilityId": "9d25d97610218510", "scanner": "scanner-primary", "fingerprint": "ed984563d0c158dd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-ffd0006dd3ad3dff", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/sales/search-orders?query=${encodeURIComponent(query)} (frontend/src/services/api.ts:1055)"}, "properties": {"repobilityId": "2abf8bf68bbcacc9", "scanner": "scanner-primary", "fingerprint": "ffd0006dd3ad3dff", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-4a0bc06dde312c2c", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/sales/prediction/${monthYear} (frontend/src/services/api.ts:1059)"}, "properties": {"repobilityId": "7e3a9bb6f26448e5", "scanner": "scanner-primary", "fingerprint": "4a0bc06dde312c2c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-5a440bd015d46f05", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/sales/predict (frontend/src/services/api.ts:1063)"}, "properties": {"repobilityId": "0a8edd3c93da6922", "scanner": "scanner-primary", "fingerprint": "5a440bd015d46f05", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-cb6f2ba226f7ba82", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/sales/predict-stock (frontend/src/services/api.ts:1074)"}, "properties": {"repobilityId": "d6d749a01f6c1925", "scanner": "scanner-primary", "fingerprint": "cb6f2ba226f7ba82", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-e8b3070660327cac", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/sales/analyze-ads (frontend/src/services/api.ts:1081)"}, "properties": {"repobilityId": "dc19976f18d98ed0", "scanner": "scanner-primary", "fingerprint": "e8b3070660327cac", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-07aa36f347996899", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/sales/ads-performance (frontend/src/services/api.ts:1088)"}, "properties": {"repobilityId": "e3ddc58344fdc152", "scanner": "scanner-primary", "fingerprint": "07aa36f347996899", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-820c0754115e4200", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/sales/ads-performance/status (frontend/src/services/api.ts:1095)"}, "properties": {"repobilityId": "26c32fe243192cac", "scanner": "scanner-primary", "fingerprint": "820c0754115e4200", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-450cb7f5cd83c790", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/admin/sales/ads-performance (frontend/src/services/api.ts:1099)"}, "properties": {"repobilityId": "ae23944242b4fa70", "scanner": "scanner-primary", "fingerprint": "450cb7f5cd83c790", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-41cf40e91c890db1", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/admin/sales/ads-performance/${date} (frontend/src/services/api.ts:1103)"}, "properties": {"repobilityId": "5c147870925e84b0", "scanner": "scanner-primary", "fingerprint": "41cf40e91c890db1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-5c2d418348c6dae4", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/sales/ads-performance/daily (frontend/src/services/api.ts:1107)"}, "properties": {"repobilityId": "6b57a938a6b10e17", "scanner": "scanner-primary", "fingerprint": "5c2d418348c6dae4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-4a34a51cecaf965a", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/sales/ads-analysis/${date} (frontend/src/services/api.ts:1111)"}, "properties": {"repobilityId": "fbbd3e980eb9c034", "scanner": "scanner-primary", "fingerprint": "4a34a51cecaf965a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-0f1b3a70a30d1384", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/sales/ads-analysis-latest (frontend/src/services/api.ts:1115)"}, "properties": {"repobilityId": "f730f5c28f568ab9", "scanner": "scanner-primary", "fingerprint": "0f1b3a70a30d1384", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-c280353729732e07", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/sales/ads-analysis-dates (frontend/src/services/api.ts:1119)"}, "properties": {"repobilityId": "54c4bf1311e79881", "scanner": "scanner-primary", "fingerprint": "c280353729732e07", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-077e170ff27f2b4b", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/sales/ads-performance/${date} (frontend/src/services/api.ts:1123)"}, "properties": {"repobilityId": "c975cd9661766d5c", "scanner": "scanner-primary", "fingerprint": "077e170ff27f2b4b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-cc6bd5ebe8c31af2", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/sales/ads-performance-all (frontend/src/services/api.ts:1127)"}, "properties": {"repobilityId": "eb750bfc8c7e6f64", "scanner": "scanner-primary", "fingerprint": "cc6bd5ebe8c31af2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-bd7831a898d9c119", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/sales/ads-chat (frontend/src/services/api.ts:1131)"}, "properties": {"repobilityId": "829bcee1aac1c16c", "scanner": "scanner-primary", "fingerprint": "bd7831a898d9c119", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-dbd09becf05e12b6", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/abandoned-checkouts (frontend/src/services/api.ts:1139)"}, "properties": {"repobilityId": "02c958378420f792", "scanner": "scanner-primary", "fingerprint": "dbd09becf05e12b6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-f264ec7a2858fa8a", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/abandoned-checkouts/template (frontend/src/services/api.ts:1143)"}, "properties": {"repobilityId": "52c227753447642b", "scanner": "scanner-primary", "fingerprint": "f264ec7a2858fa8a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-699c5d557fe17fd8", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/abandoned-checkouts/template (frontend/src/services/api.ts:1147)"}, "properties": {"repobilityId": "433f3879b162e012", "scanner": "scanner-primary", "fingerprint": "699c5d557fe17fd8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-fcac79a5362df7b9", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/abandoned-checkouts (frontend/src/services/api.ts:1157)"}, "properties": {"repobilityId": "202918f23b22b079", "scanner": "scanner-primary", "fingerprint": "fcac79a5362df7b9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-966b7433124db723", "level": "error", "message": {"text": "Dangling fetch: PUT /api/admin/abandoned-checkouts/${id}/status (frontend/src/services/api.ts:1167)"}, "properties": {"repobilityId": "4bdb306f0089fdf4", "scanner": "scanner-primary", "fingerprint": "966b7433124db723", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-0e2a855f040ca8f1", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/attendance/employees/stats?month=${month} (frontend/src/services/api.ts:1176)"}, "properties": {"repobilityId": "dfac37993428b2eb", "scanner": "scanner-primary", "fingerprint": "0e2a855f040ca8f1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-2bcb0fbc2a11d7cb", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/attendance/employees (frontend/src/services/api.ts:1180)"}, "properties": {"repobilityId": "0baff9eb75fcb323", "scanner": "scanner-primary", "fingerprint": "2bcb0fbc2a11d7cb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-3b13152218e7cd57", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/attendance/employees (frontend/src/services/api.ts:1184)"}, "properties": {"repobilityId": "f59b355a85ec23db", "scanner": "scanner-primary", "fingerprint": "3b13152218e7cd57", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-93f79f3058bfa45c", "level": "error", "message": {"text": "Dangling fetch: PUT /api/admin/attendance/employees/${id} (frontend/src/services/api.ts:1191)"}, "properties": {"repobilityId": "e4747a2b39d42cd2", "scanner": "scanner-primary", "fingerprint": "93f79f3058bfa45c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-ae13c79b21a82e12", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/attendance/records?dateStr=${dateStr} (frontend/src/services/api.ts:1198)"}, "properties": {"repobilityId": "b743382695fcb5aa", "scanner": "scanner-primary", "fingerprint": "ae13c79b21a82e12", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-aa8a959d08dcf63c", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/attendance/records/month/${month} (frontend/src/services/api.ts:1202)"}, "properties": {"repobilityId": "ecd0c86e239d0ecf", "scanner": "scanner-primary", "fingerprint": "aa8a959d08dcf63c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-2d0bc5e44cfc05cf", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/attendance/records (frontend/src/services/api.ts:1206)"}, "properties": {"repobilityId": "704739e99e206e21", "scanner": "scanner-primary", "fingerprint": "2d0bc5e44cfc05cf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-2916c0aa50a1832a", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/attendance/advances (frontend/src/services/api.ts:1213)"}, "properties": {"repobilityId": "125d7c356c15695c", "scanner": "scanner-primary", "fingerprint": "2916c0aa50a1832a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-54426c3e50496685", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/attendance/payments (frontend/src/services/api.ts:1220)"}, "properties": {"repobilityId": "41f3534854401471", "scanner": "scanner-primary", "fingerprint": "54426c3e50496685", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-c22024737a4858ab", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/attendance/hourly-logs (frontend/src/services/api.ts:1227)"}, "properties": {"repobilityId": "dc224ef274fc125a", "scanner": "scanner-primary", "fingerprint": "c22024737a4858ab", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-7c9ff5897656a5ce", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/admin/attendance/hourly-logs/${employeeId}/${dateStr} (frontend/src/services/api.ts:1234)"}, "properties": {"repobilityId": "9562709286f962dd", "scanner": "scanner-primary", "fingerprint": "7c9ff5897656a5ce", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-a8306e32ba03748a", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/attendance/hourly-logs/month/${month} (frontend/src/services/api.ts:1240)"}, "properties": {"repobilityId": "58b653407b05d4a7", "scanner": "scanner-primary", "fingerprint": "a8306e32ba03748a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-1a646b3306c710a2", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/attendance/hourly-logs/all (frontend/src/services/api.ts:1244)"}, "properties": {"repobilityId": "8c057c05783a3cc3", "scanner": "scanner-primary", "fingerprint": "1a646b3306c710a2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-37c67e3ca9d99716", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/sales/daily-order-stats/backfill (frontend/src/services/api.ts:1281)"}, "properties": {"repobilityId": "119431aa45c30666", "scanner": "scanner-primary", "fingerprint": "37c67e3ca9d99716", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-aa5ac86160e9b53b", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/sales/daily-averages?days=${days} (frontend/src/services/api.ts:1315)"}, "properties": {"repobilityId": "761c4f7f5dd30877", "scanner": "scanner-primary", "fingerprint": "aa5ac86160e9b53b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-c660f5ede4a88bf3", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/sales/failed-orders-analysis (frontend/src/services/api.ts:1326)"}, "properties": {"repobilityId": "1f341cde1d1dcc46", "scanner": "scanner-primary", "fingerprint": "c660f5ede4a88bf3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-e14857fd4effe763", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/pincodes/cod-added-cities (frontend/src/services/api.ts:1330)"}, "properties": {"repobilityId": "715944e3b62bbbe1", "scanner": "scanner-primary", "fingerprint": "e14857fd4effe763", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-75b854ada70b044a", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/pincodes/cod-added-cities (frontend/src/services/api.ts:1334)"}, "properties": {"repobilityId": "0032f03b09719e51", "scanner": "scanner-primary", "fingerprint": "75b854ada70b044a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-ee01025b0dcbeb5c", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/admin/pincodes/cod-added-cities/${encodeURIComponent(city)} (frontend/src/services/api.ts:1338)"}, "properties": {"repobilityId": "006fc82552929683", "scanner": "scanner-primary", "fingerprint": "ee01025b0dcbeb5c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-10871a57053b8669", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/sales/variant-performance?days=${days} (frontend/src/services/api.ts:1362)"}, "properties": {"repobilityId": "e78a2ca63dc02860", "scanner": "scanner-primary", "fingerprint": "10871a57053b8669", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-71e07ec47694664a", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/sales/daily-pnl/backfill (frontend/src/services/api.ts:1387)"}, "properties": {"repobilityId": "4fe2da0d24b5d70f", "scanner": "scanner-primary", "fingerprint": "71e07ec47694664a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-198df1e9f9a0c3a2", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/sales/ai-prediction-data?startDate=${startDate} (frontend/src/services/api.ts:1408)"}, "properties": {"repobilityId": "d60fd4fc06b62678", "scanner": "scanner-primary", "fingerprint": "198df1e9f9a0c3a2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-e6acd43b8d64d59d", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/sales/breakeven-metrics (frontend/src/services/api.ts:1425)"}, "properties": {"repobilityId": "0fb61152367fb37c", "scanner": "scanner-primary", "fingerprint": "e6acd43b8d64d59d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-fb249c271605d179", "level": "note", "message": {"text": "Unused endpoint: USE /api/admin/auth"}, "properties": {"repobilityId": "40fcde0be8da6d59", "scanner": "scanner-primary", "fingerprint": "fb249c271605d179", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3ad05cd497b90b46", "level": "note", "message": {"text": "Unused endpoint: USE /api/admin/magic-links"}, "properties": {"repobilityId": "f71d4779e10e65d6", "scanner": "scanner-primary", "fingerprint": "3ad05cd497b90b46", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-02bb5ce96f064b2c", "level": "note", "message": {"text": "Unused endpoint: USE /api/admin/expenses"}, "properties": {"repobilityId": "d1cb017d1bda0550", "scanner": "scanner-primary", "fingerprint": "02bb5ce96f064b2c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-08054452f3229037", "level": "note", "message": {"text": "Unused endpoint: USE /api/admin/sales"}, "properties": {"repobilityId": "5fe07037e8b9ca0d", "scanner": "scanner-primary", "fingerprint": "08054452f3229037", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-bb130c10cb764f8b", "level": "note", "message": {"text": "Unused endpoint: USE /api/admin/cogs"}, "properties": {"repobilityId": "07ef0ce40f6300bf", "scanner": "scanner-primary", "fingerprint": "bb130c10cb764f8b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-30f0fa42b7a47526", "level": "note", "message": {"text": "Unused endpoint: USE /api/admin/fixed-monthly-expenses"}, "properties": {"repobilityId": "cb7d1c91e5b4867b", "scanner": "scanner-primary", "fingerprint": "30f0fa42b7a47526", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2f947f118f48e48c", "level": "note", "message": {"text": "Unused endpoint: USE /api/admin/bank-account"}, "properties": {"repobilityId": "e086015b3a59da97", "scanner": "scanner-primary", "fingerprint": "2f947f118f48e48c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cd977b919e6001e4", "level": "note", "message": {"text": "Unused endpoint: USE /api/admin/delivery-dates"}, "properties": {"repobilityId": "815794e9eefa63db", "scanner": "scanner-primary", "fingerprint": "cd977b919e6001e4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-20688a0fcdfe9d71", "level": "note", "message": {"text": "Unused endpoint: USE /api/admin/pincodes"}, "properties": {"repobilityId": "313072767d2ffaeb", "scanner": "scanner-primary", "fingerprint": "20688a0fcdfe9d71", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f95fb117974bfc92", "level": "note", "message": {"text": "Unused endpoint: USE /api/admin/abandoned-checkouts"}, "properties": {"repobilityId": "d16a06060b010163", "scanner": "scanner-primary", "fingerprint": "f95fb117974bfc92", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ebf1698736720618", "level": "note", "message": {"text": "Unused endpoint: USE /api/admin/attendance"}, "properties": {"repobilityId": "fa465874ac97ea9e", "scanner": "scanner-primary", "fingerprint": "ebf1698736720618", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6f643fbf10ab5803", "level": "note", "message": {"text": "Unused endpoint: USE /api/upload"}, "properties": {"repobilityId": "db3481b9028206a2", "scanner": "scanner-primary", "fingerprint": "6f643fbf10ab5803", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4756b4c4da7d2088", "level": "note", "message": {"text": "Unused endpoint: GET /api/health"}, "properties": {"repobilityId": "ec6d36014b57104d", "scanner": "scanner-primary", "fingerprint": "4756b4c4da7d2088", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5baa8971ebe192a1", "level": "note", "message": {"text": "Unused endpoint: GET /"}, "properties": {"repobilityId": "7b5ce703331ffb67", "scanner": "scanner-primary", "fingerprint": "5baa8971ebe192a1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-81aa8a98d84fb76a", "level": "note", "message": {"text": "Unused endpoint: GET /template"}, "properties": {"repobilityId": "83a97dd2d7402829", "scanner": "scanner-primary", "fingerprint": "81aa8a98d84fb76a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b1a03666fe702028", "level": "note", "message": {"text": "Unused endpoint: POST /template"}, "properties": {"repobilityId": "ebc3ffd613637f53", "scanner": "scanner-primary", "fingerprint": "b1a03666fe702028", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7a009b1a56794f45", "level": "note", "message": {"text": "Unused endpoint: POST /"}, "properties": {"repobilityId": "56e67dbf50b6a0bd", "scanner": "scanner-primary", "fingerprint": "7a009b1a56794f45", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-515fbe87c0208d90", "level": "note", "message": {"text": "Unused endpoint: PUT /:id/status"}, "properties": {"repobilityId": "95f0686bb67642c1", "scanner": "scanner-primary", "fingerprint": "515fbe87c0208d90", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4a66d271b39b318e", "level": "note", "message": {"text": "Unused endpoint: POST /employees"}, "properties": {"repobilityId": "c27deaeaa78130b5", "scanner": "scanner-primary", "fingerprint": "4a66d271b39b318e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9a003fe02a32f98d", "level": "note", "message": {"text": "Unused endpoint: PUT /employees/:id"}, "properties": {"repobilityId": "c3147cb574615964", "scanner": "scanner-primary", "fingerprint": "9a003fe02a32f98d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cf5cac8cd64fc789", "level": "note", "message": {"text": "Unused endpoint: GET /employees"}, "properties": {"repobilityId": "01e867a8ec3c65db", "scanner": "scanner-primary", "fingerprint": "cf5cac8cd64fc789", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4446080bf3493f6e", "level": "note", "message": {"text": "Unused endpoint: GET /employees/stats"}, "properties": {"repobilityId": "0e4ae49f1c5a8e73", "scanner": "scanner-primary", "fingerprint": "4446080bf3493f6e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a300923b068adcba", "level": "note", "message": {"text": "Unused endpoint: GET /records"}, "properties": {"repobilityId": "b5b1a671d81e0889", "scanner": "scanner-primary", "fingerprint": "a300923b068adcba", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5c94aa3d8439e384", "level": "note", "message": {"text": "Unused endpoint: GET /records/month/:month"}, "properties": {"repobilityId": "566cc6c30a117d09", "scanner": "scanner-primary", "fingerprint": "5c94aa3d8439e384", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-655614c94139f993", "level": "note", "message": {"text": "Unused endpoint: POST /records"}, "properties": {"repobilityId": "8c267485ef4fc370", "scanner": "scanner-primary", "fingerprint": "655614c94139f993", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-17238bbcc9c6895a", "level": "note", "message": {"text": "Unused endpoint: POST /advances"}, "properties": {"repobilityId": "76df5795396ceb14", "scanner": "scanner-primary", "fingerprint": "17238bbcc9c6895a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e5006457a4f69d46", "level": "note", "message": {"text": "Unused endpoint: POST /payments"}, "properties": {"repobilityId": "40bf1a3e634bde3f", "scanner": "scanner-primary", "fingerprint": "e5006457a4f69d46", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7a201de6d725b5f3", "level": "note", "message": {"text": "Unused endpoint: POST /hourly-logs"}, "properties": {"repobilityId": "ab61f1281d5c7eff", "scanner": "scanner-primary", "fingerprint": "7a201de6d725b5f3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b3dc12b685a2bf36", "level": "note", "message": {"text": "Unused endpoint: DELETE /hourly-logs/:employeeId/:dateStr"}, "properties": {"repobilityId": "f36cd4acb4af6c62", "scanner": "scanner-primary", "fingerprint": "b3dc12b685a2bf36", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b08c8c3829e79cc0", "level": "note", "message": {"text": "Unused endpoint: GET /hourly-logs/month/:month"}, "properties": {"repobilityId": "058a8a2cb942c0bb", "scanner": "scanner-primary", "fingerprint": "b08c8c3829e79cc0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c5c788e3e543ec56", "level": "note", "message": {"text": "Unused endpoint: GET /hourly-logs/all"}, "properties": {"repobilityId": "933f382e9ba8df45", "scanner": "scanner-primary", "fingerprint": "c5c788e3e543ec56", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cecae8513787227b", "level": "note", "message": {"text": "Unused endpoint: GET /configuration"}, "properties": {"repobilityId": "a725ed87e691fd20", "scanner": "scanner-primary", "fingerprint": "cecae8513787227b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cee0657fbb9ed5b8", "level": "note", "message": {"text": "Unused endpoint: GET /configuration/versions"}, "properties": {"repobilityId": "270b72b34b5a5842", "scanner": "scanner-primary", "fingerprint": "cee0657fbb9ed5b8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7ac3935621287448", "level": "note", "message": {"text": "Unused endpoint: POST /configuration"}, "properties": {"repobilityId": "da1f7e9ba67c110a", "scanner": "scanner-primary", "fingerprint": "7ac3935621287448", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8b5f1ab538f83f0d", "level": "note", "message": {"text": "Unused endpoint: PUT /configuration/:id"}, "properties": {"repobilityId": "0d1cf0fc61a57ca4", "scanner": "scanner-primary", "fingerprint": "8b5f1ab538f83f0d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-74281ee023693a59", "level": "note", "message": {"text": "Unused endpoint: DELETE /configuration/:id"}, "properties": {"repobilityId": "5f940d279dea8f37", "scanner": "scanner-primary", "fingerprint": "74281ee023693a59", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6236b283b79811b8", "level": "note", "message": {"text": "Unused endpoint: POST /upload"}, "properties": {"repobilityId": "e0a767082a56b342", "scanner": "scanner-primary", "fingerprint": "6236b283b79811b8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cd8dc4599ec52a08", "level": "note", "message": {"text": "Unused endpoint: GET /stats"}, "properties": {"repobilityId": "3885aeb43d720cc5", "scanner": "scanner-primary", "fingerprint": "cd8dc4599ec52a08", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c0a4de35c39d7bf9", "level": "note", "message": {"text": "Unused endpoint: GET /blocked"}, "properties": {"repobilityId": "f9ca3c2630cc3040", "scanner": "scanner-primary", "fingerprint": "c0a4de35c39d7bf9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6252480dad5c77a1", "level": "note", "message": {"text": "Unused endpoint: POST /blocked"}, "properties": {"repobilityId": "5a18064d6efbf13a", "scanner": "scanner-primary", "fingerprint": "6252480dad5c77a1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b860111811aaf2b9", "level": "note", "message": {"text": "Unused endpoint: DELETE /blocked/:pinCode"}, "properties": {"repobilityId": "d3155cb1dcb74c9d", "scanner": "scanner-primary", "fingerprint": "b860111811aaf2b9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9b9852c70505ceef", "level": "note", "message": {"text": "Unused endpoint: GET /cod-added-cities"}, "properties": {"repobilityId": "595c15794b0e7092", "scanner": "scanner-primary", "fingerprint": "9b9852c70505ceef", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2a382c23be687278", "level": "note", "message": {"text": "Unused endpoint: POST /cod-added-cities"}, "properties": {"repobilityId": "a10dd4bea40f39d3", "scanner": "scanner-primary", "fingerprint": "2a382c23be687278", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d05d0fa35abd1f0b", "level": "note", "message": {"text": "Unused endpoint: DELETE /cod-added-cities/:city"}, "properties": {"repobilityId": "6b61d4c09dd0b1eb", "scanner": "scanner-primary", "fingerprint": "d05d0fa35abd1f0b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-64d57215472ded0b", "level": "note", "message": {"text": "Unused endpoint: GET /narration-rules"}, "properties": {"repobilityId": "418bca858649e962", "scanner": "scanner-primary", "fingerprint": "64d57215472ded0b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4b020e39dd503404", "level": "note", "message": {"text": "Unused endpoint: POST /narration-rules"}, "properties": {"repobilityId": "10496ea45b30eaa6", "scanner": "scanner-primary", "fingerprint": "4b020e39dd503404", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-90c6c34f24c18536", "level": "note", "message": {"text": "Unused endpoint: DELETE /narration-rules/:id"}, "properties": {"repobilityId": "9f340a958f5c1cdc", "scanner": "scanner-primary", "fingerprint": "90c6c34f24c18536", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9260174de75b32ba", "level": "note", "message": {"text": "Unused endpoint: GET /categories"}, "properties": {"repobilityId": "3c2551c0110d052a", "scanner": "scanner-primary", "fingerprint": "9260174de75b32ba", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1033c7a1d3884505", "level": "note", "message": {"text": "Unused endpoint: POST /categories"}, "properties": {"repobilityId": "6e8adf271eb26436", "scanner": "scanner-primary", "fingerprint": "1033c7a1d3884505", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-52f939032aab887f", "level": "note", "message": {"text": "Unused endpoint: GET /transactions"}, "properties": {"repobilityId": "992688875eac5131", "scanner": "scanner-primary", "fingerprint": "52f939032aab887f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}