{"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-4c3c63c2928142ed", "name": "Stray `console.log` in TS/JS \u2014 scripts/sync_full_system.js:23", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/sync_full_system.js:23"}, "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-3d2928f26cc751ed", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/ErrorBoundary.jsx:22", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/ErrorBoundary.jsx:22"}, "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-7f82abc2ef914eeb", "name": "Stray `console.log` in TS/JS \u2014 src/other/gestao/GestaoPageModular.jsx:54", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/other/gestao/GestaoPageModular.jsx:54"}, "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-5ca7f720cb9ad0c8", "name": "Stray `console.log` in TS/JS \u2014 src/other/gestao/utils/testApi.js:5", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/other/gestao/utils/testApi.js:5"}, "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-4fbf7643bff959a0", "name": "Stray `console.log` in TS/JS \u2014 src/other/gestao/utils/testAuth.js:3", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/other/gestao/utils/testAuth.js:3"}, "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-3890189b94f5bb97", "name": "Stray `console.log` in TS/JS \u2014 src/other/gestao/utils/authManager.js:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/other/gestao/utils/authManager.js: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-ba376c10fc20a547", "name": "Stray `console.log` in TS/JS \u2014 src/other/gestao/utils/formatters.js:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/other/gestao/utils/formatters.js: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-c8d3b4c0097c12e0", "name": "Stray `console.log` in TS/JS \u2014 src/other/gestao/utils/authDiagnostic.js:3", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/other/gestao/utils/authDiagnostic.js:3"}, "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-6bdd1d1ff20d548f", "name": "Stray `console.log` in TS/JS \u2014 src/other/gestao/hooks/useGestaoData.js:38", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/other/gestao/hooks/useGestaoData.js:38"}, "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-6d264779caa2cdf7", "name": "Stray `console.log` in TS/JS \u2014 src/other/gestao/hooks/useRefuels.js:93", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/other/gestao/hooks/useRefuels.js:93"}, "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-51b631df389ddf6f", "name": "Stray `console.log` in TS/JS \u2014 src/other/gestao/components/DriversTab.jsx:142", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/other/gestao/components/DriversTab.jsx:142"}, "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-7d12cdd582cdc0b7", "name": "Stray `console.log` in TS/JS \u2014 src/other/gestao/components/DebugTab.jsx:76", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/other/gestao/components/DebugTab.jsx:76"}, "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-c694aaa90941443a", "name": "TODO/FIXME marker in shipping code \u2014 src/other/gestao/components/ExtraCostsTab.jsx:423", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/other/gestao/components/ExtraCostsTab.jsx:423"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f29671bd473071be", "name": "Stray `console.log` in TS/JS \u2014 src/other/gestao/components/ExtraCostsTab.jsx:76", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/other/gestao/components/ExtraCostsTab.jsx:76"}, "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-6300820eac1128ed", "name": "Stray `console.log` in TS/JS \u2014 src/other/gestao/components/RefuelsTab.jsx:74", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/other/gestao/components/RefuelsTab.jsx:74"}, "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-e52c434e2bc88b31", "name": "Stray `console.log` in TS/JS \u2014 src/other/gestao/components/ReportsTab.jsx:96", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/other/gestao/components/ReportsTab.jsx:96"}, "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-41556becd4e68273", "name": "Stray `console.log` in TS/JS \u2014 src/other/gestao/components/AuthStatusIndicator.jsx:28", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/other/gestao/components/AuthStatusIndicator.jsx:28"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3650fa65993032f1", "name": "Stray `console.log` in TS/JS \u2014 src/other/gestao/components/MaintenancesTab.jsx:74", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/other/gestao/components/MaintenancesTab.jsx:74"}, "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-20f95fe3fcb00573", "name": "Stray `console.log` in TS/JS \u2014 src/other/gestao/components/RefuelingReportsTab.jsx:50", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/other/gestao/components/RefuelingReportsTab.jsx:50"}, "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-ef9b899bb061554d", "name": "Stray `console.log` in TS/JS \u2014 src/other/gestao/components/AuthDiagnostic.jsx:46", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/other/gestao/components/AuthDiagnostic.jsx:46"}, "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-d6792885f853dee8", "name": "Stray `console.log` in TS/JS \u2014 src/components/ModernDeviceList.jsx:172", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/ModernDeviceList.jsx:172"}, "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-511913049bf006ba", "name": "Stray `console.log` in TS/JS \u2014 src/components/FloatingStatusCard.jsx:368", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/FloatingStatusCard.jsx:368"}, "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-d0d98998045b333b", "name": "Stray `console.log` in TS/JS \u2014 src/components/FloatingResellersPopover.jsx:278", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/FloatingResellersPopover.jsx:278"}, "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-2c4884826df2dc6d", "name": "Stray `console.log` in TS/JS \u2014 src/components/FloatingDeviceList.jsx:2525", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/FloatingDeviceList.jsx:2525"}, "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-b7d3cceaa2bd278b", "name": "Stray `console.log` in TS/JS \u2014 src/components/ModernMainPage.jsx:220", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/ModernMainPage.jsx:220"}, "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-368dc53f4c029357", "name": "Stray `console.log` in TS/JS \u2014 src/components/FloatingReportsPopover.jsx:1145", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/FloatingReportsPopover.jsx:1145"}, "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-f3b81981d7a2be28", "name": "Stray `console.log` in TS/JS \u2014 src/components/FloatingDevicesPopover.jsx:292", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/FloatingDevicesPopover.jsx:292"}, "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-c8397960f99be3b6", "name": "Stray `console.log` in TS/JS \u2014 src/addons/gestao_backend/server.js:83", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/addons/gestao_backend/server.js:83"}, "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-f05a41b37825055c", "name": "Stray `console.log` in TS/JS \u2014 src/addons/gestao_backend/schedulers/doorPush.js:156", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/addons/gestao_backend/schedulers/doorPush.js:156"}, "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-0c5bfc99e478a69f", "name": "Stray `console.log` in TS/JS \u2014 src/addons/gestao_backend/schedulers/commandEventMonitor.js:109", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/addons/gestao_backend/schedulers/commandEventMonitor.js:109"}, "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-add4ee1b72fc223b", "name": "Stray `console.log` in TS/JS \u2014 src/addons/gestao_backend/schedulers/routeBlockMonitor.js:207", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/addons/gestao_backend/schedulers/routeBlockMonitor.js:207"}, "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-9e973b38cbe9b306", "name": "Stray `console.log` in TS/JS \u2014 src/addons/gestao_backend/schedulers/j16DoorMonitor.js:76", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/addons/gestao_backend/schedulers/j16DoorMonitor.js:76"}, "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-be99121513401847", "name": "Stray `console.log` in TS/JS \u2014 src/addons/gestao_backend/schedulers/commandScheduler.js:151", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/addons/gestao_backend/schedulers/commandScheduler.js:151"}, "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-aa31de8d361f4bdf", "name": "Stray `console.log` in TS/JS \u2014 src/addons/tags/tag.js:35", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/addons/tags/tag.js:35"}, "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-c0db1546eeb8a21c", "name": "Stray `console.log` in TS/JS \u2014 src/addons/traccar_wrapper/db/index.js:46", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/addons/traccar_wrapper/db/index.js:46"}, "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-6a44f3ca5249fdd7", "name": "Stray `console.log` in TS/JS \u2014 src/addons/traccar_wrapper/db/migrate_consolidate_users.js:36", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/addons/traccar_wrapper/db/migrate_consolidate_users.js:36"}, "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-846547d834ed3e4f", "name": "Stray `console.log` in TS/JS \u2014 src/addons/traccar_wrapper/core/core.js:47", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/addons/traccar_wrapper/core/core.js:47"}, "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-a9887f3f6434045e", "name": "Stray `console.log` in TS/JS \u2014 src/addons/telecom/scripts/syncDevicesToChips.js:75", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/addons/telecom/scripts/syncDevicesToChips.js:75"}, "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-52960d73498e0176", "name": "Stray `console.log` in TS/JS \u2014 src/addons/telecom/scripts/verifyVoxterCredentials.js:20", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/addons/telecom/scripts/verifyVoxterCredentials.js: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-314f15a74cec867a", "name": "Stray `console.log` in TS/JS \u2014 src/common/hooks/useFriendlyNotifications.js:53", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/common/hooks/useFriendlyNotifications.js:53"}, "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-6160c020cf5321bb", "name": "Stray `console.log` in TS/JS \u2014 src/middleware/authMiddleware.js:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/middleware/authMiddleware.js: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-ffc436f88e67cb35", "name": "Stray `console.log` in TS/JS \u2014 src/services/financialScheduler.js:117", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/services/financialScheduler.js:117"}, "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-e5fbe1ffcfa992d3", "name": "Stray `console.log` in TS/JS \u2014 src/routes/traccarPermissions.js:42", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/routes/traccarPermissions.js:42"}, "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-6ff94413eae4fe4d", "name": "Stray `console.log` in TS/JS \u2014 src/routes/fleetRoutes.js:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/routes/fleetRoutes.js: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-04c54436489e797c", "name": "Stray `console.log` in TS/JS \u2014 src/routes/gestaoRoutes.js:144", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/routes/gestaoRoutes.js:144"}, "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-a4bdfb8c8b1ec67a", "name": "Stray `console.log` in TS/JS \u2014 src/routes/vehiclesRoutes.js:153", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/routes/vehiclesRoutes.js:153"}, "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-f1082a771d7cc93b", "name": "Privileged port 91 in use", "shortDescription": {"text": "Privileged port 91 in use"}, "fullDescription": {"text": "Port 91 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e78db4dfa161f722", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/SharedDevicePage.jsx:39", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/SharedDevicePage.jsx:39"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-65cb364792d2bdad", "name": "Insecure pattern 'dangerous_innerhtml' in src/ErrorBoundary.jsx:22", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/ErrorBoundary.jsx:22"}, "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-2cd981d8472baa08", "name": "Possible secret in src/other/gestao/components/DriverCreateModal.jsx", "shortDescription": {"text": "Possible secret in src/other/gestao/components/DriverCreateModal.jsx"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-6ceb885a50058021", "name": "Possible secret in src/other/gestao/components/DriverCompleteModal.jsx", "shortDescription": {"text": "Possible secret in src/other/gestao/components/DriverCompleteModal.jsx"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-b55d229f3c6a3726", "name": "Insecure pattern 'new_function_used' in src/components/FloatingDataAnalyticsPopover.jsx:1744", "shortDescription": {"text": "Insecure pattern 'new_function_used' in src/components/FloatingDataAnalyticsPopover.jsx:1744"}, "fullDescription": {"text": "Found a known-risky pattern (new_function_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4aefd2229ae7c86f", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/components/FloatingDataAnalyticsPopover.jsx:852", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/FloatingDataAnalyticsPopover.jsx:852"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7324e3fb3ef6bbe2", "name": "Insecure pattern 'cors_wildcard' in src/addons/rbac/rbacServer.mjs:28", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in src/addons/rbac/rbacServer.mjs:28"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-eeab658b075825d8", "name": "Possible secret in src/addons/gestao_backend/schedulers/commandEventMonitor.js", "shortDescription": {"text": "Possible secret in src/addons/gestao_backend/schedulers/commandEventMonitor.js"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-54c5d4363af8b899", "name": "Possible secret in src/addons/gestao_backend/schedulers/j16DoorMonitor.js", "shortDescription": {"text": "Possible secret in src/addons/gestao_backend/schedulers/j16DoorMonitor.js"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-9f980ff9269b9152", "name": "Insecure pattern 'node_child_process' in src/addons/jtt-server/jtt-server.mjs:6", "shortDescription": {"text": "Insecure pattern 'node_child_process' in src/addons/jtt-server/jtt-server.mjs:6"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2cbbb6760679a254", "name": "Possible secret in src/addons/tags/tags.mjs", "shortDescription": {"text": "Possible secret in src/addons/tags/tags.mjs"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-92efbf134fa6cddc", "name": "Possible secret in src/addons/tags/tag.js", "shortDescription": {"text": "Possible secret in src/addons/tags/tag.js"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-a2b6a60bfadec2dc", "name": "Possible secret in src/addons/reseller/resellersServer.mjs", "shortDescription": {"text": "Possible secret in src/addons/reseller/resellersServer.mjs"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-f1024b01426ecf7b", "name": "Insecure pattern 'exec_used' in src/addons/reseller/resellersServer.mjs:2235", "shortDescription": {"text": "Insecure pattern 'exec_used' in src/addons/reseller/resellersServer.mjs:2235"}, "fullDescription": {"text": "Found a known-risky pattern (exec_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-59b3c0e41dbe69a6", "name": "Insecure pattern 'node_child_process' in src/addons/reseller/resellersServer.mjs:11", "shortDescription": {"text": "Insecure pattern 'node_child_process' in src/addons/reseller/resellersServer.mjs:11"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8576d7a8de1be77d", "name": "Insecure pattern 'cors_wildcard' in src/addons/reseller/resellersServer.mjs:671", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in src/addons/reseller/resellersServer.mjs:671"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-df806312cdc2faef", "name": "Insecure pattern 'cors_wildcard' in src/addons/traccar_wrapper/core/core.js:26", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in src/addons/traccar_wrapper/core/core.js:26"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f57f5c51d372ac32", "name": "Insecure pattern 'cors_wildcard' in src/addons/dataAnalytics/dataAnalyticsServer.mjs:50", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in src/addons/dataAnalytics/dataAnalyticsServer.mjs:50"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-08473fac32a0ab1d", "name": "Insecure pattern 'local_storage_auth_token' in src/common/components/NativeInterface.js:66", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in src/common/components/NativeInterface.js:66"}, "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-f320c9f474444d90", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/j16-door-status.js:62", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/j16-door-status.js:62"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e599726a5f9a5e50", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-043b8412ab96fec9", "name": "Very large file: src/main/MainPage.jsx (5017 lines)", "shortDescription": {"text": "Very large file: src/main/MainPage.jsx (5017 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-9a30789a827ab6af", "name": "Very large file: src/other/HistoryPanel.jsx (1810 lines)", "shortDescription": {"text": "Very large file: src/other/HistoryPanel.jsx (1810 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-b7c4b1cde88fccbf", "name": "Very large file: src/components/FloatingStatusCard.jsx (10831 lines)", "shortDescription": {"text": "Very large file: src/components/FloatingStatusCard.jsx (10831 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-1de92645954e5875", "name": "Very large file: src/components/FloatingResellersPopover.jsx (5412 lines)", "shortDescription": {"text": "Very large file: src/components/FloatingResellersPopover.jsx (5412 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-0cb618910c17ec65", "name": "Very large file: src/components/FloatingDeviceList.jsx (3724 lines)", "shortDescription": {"text": "Very large file: src/components/FloatingDeviceList.jsx (3724 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-87bac363b2e15ae0", "name": "Very large file: src/components/FloatingDataAnalyticsPopover.jsx (4880 lines)", "shortDescription": {"text": "Very large file: src/components/FloatingDataAnalyticsPopover.jsx (4880 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-67d6ea9e225474b7", "name": "Very large file: src/components/UserManagementPopover.jsx (2832 lines)", "shortDescription": {"text": "Very large file: src/components/UserManagementPopover.jsx (2832 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-1a519539e32194c7", "name": "Very large file: src/components/FloatingReportsPopover.jsx (3946 lines)", "shortDescription": {"text": "Very large file: src/components/FloatingReportsPopover.jsx (3946 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-fa354671255d13fc", "name": "Very large file: src/components/FloatingCalendarsPopover.jsx (1724 lines)", "shortDescription": {"text": "Very large file: src/components/FloatingCalendarsPopover.jsx (1724 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-0b86647a00eb2712", "name": "Very large file: src/components/FloatingComputedAttributesPopover.jsx (1207 lines)", "shortDescription": {"text": "Very large file: src/components/FloatingComputedAttributesPopover.jsx (1207 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-d7dc054f5bff5e68", "name": "Very large file: src/components/FloatingDevicesPopover.jsx (2727 lines)", "shortDescription": {"text": "Very large file: src/components/FloatingDevicesPopover.jsx (2727 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-374bd3fdfa149cc8", "name": "Very large file: src/components/FloatingGeofencesPopover.jsx (3828 lines)", "shortDescription": {"text": "Very large file: src/components/FloatingGeofencesPopover.jsx (3828 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-589512e0d2b1e5a9", "name": "Very large file: src/components/FloatingNotificationsPopover.jsx (1305 lines)", "shortDescription": {"text": "Very large file: src/components/FloatingNotificationsPopover.jsx (1305 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-176e94330a27a711", "name": "Very large file: src/components/fleet/FleetVehicleCard.jsx (1385 lines)", "shortDescription": {"text": "Very large file: src/components/fleet/FleetVehicleCard.jsx (1385 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-1b0394da57a0fb27", "name": "Very large file: src/settings/FinancialPage.jsx (1072 lines)", "shortDescription": {"text": "Very large file: src/settings/FinancialPage.jsx (1072 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-c7af8ba640b202ec", "name": "Very large file: src/settings/components/VehicleDetailsModal.jsx (1836 lines)", "shortDescription": {"text": "Very large file: src/settings/components/VehicleDetailsModal.jsx (1836 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-13d58a19a1fac8fc", "name": "Very large file: src/addons/jtt-server/jtt-server.mjs (2574 lines)", "shortDescription": {"text": "Very large file: src/addons/jtt-server/jtt-server.mjs (2574 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-7dda0191fe4fea66", "name": "Very large file: src/addons/reseller/resellersServer.mjs (4086 lines)", "shortDescription": {"text": "Very large file: src/addons/reseller/resellersServer.mjs (4086 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-bc9ff4e31e8db492", "name": "Very large file: src/routes/financialRoutes.js (1520 lines)", "shortDescription": {"text": "Very large file: src/routes/financialRoutes.js (1520 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-1e8f3cb1c48c95a2", "name": "Very large file: src/routes/vehiclesRoutes.js (1454 lines)", "shortDescription": {"text": "Very large file: src/routes/vehiclesRoutes.js (1454 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "2 test file(s) for 445 source file(s) (ratio 0.00). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2a85ecf3f5d29543", "name": "Node manifest has dependencies but no lockfile: src/addons/rbac/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: src/addons/rbac/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d71d15bf7464f200", "name": "Node manifest has dependencies but no lockfile: src/addons/jtt-server/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: src/addons/jtt-server/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-07e59c1532ca616e", "name": "Node manifest has dependencies but no lockfile: src/addons/dataAnalytics/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: src/addons/dataAnalytics/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 889 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 143 placeholder/mock markers across 64 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-11825279136b53a3", "name": "CI is configured but no tests are detected", "shortDescription": {"text": "CI is configured but no tests are detected"}, "fullDescription": {"text": "A CI pipeline exists, but the scan found no test files to gate. Opus labeled this generated-code pattern as config theater: release machinery exists, but it has little behavioral signal."}, "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: tests, lockfile. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9ea1c49db01041b7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/Navigation.jsx:106", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/Navigation.jsx:106"}, "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-c2cba5ad8c2768a1", "name": "Commented-code block (8 lines) in src/SocketController.jsx:86", "shortDescription": {"text": "Commented-code block (8 lines) in src/SocketController.jsx:86"}, "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-7fa06c7c8b15524f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/SocketController.jsx:154", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/SocketController.jsx:154"}, "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-ac316080d4146f50", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/UpdateController.jsx:28", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/UpdateController.jsx:28"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9ae813917af2e115", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/App.jsx:53", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/App.jsx:53"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-adfbf9015886489d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/main/MainPage.jsx:316", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/main/MainPage.jsx:316"}, "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-cd077004ea14f3c6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/main/hooks/useServerData.js:11", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/main/hooks/useServerData.js:11"}, "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-d0591c6192160766", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/main/hooks/usePreferencesDrawer.js:58", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/main/hooks/usePreferencesDrawer.js:58"}, "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-644de189f48c05fd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/map/MapRoutePath.js:227", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/map/MapRoutePath.js:227"}, "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-47a57f18af1b0239", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/map/main/PoiMap.js:20", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/map/main/PoiMap.js:20"}, "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-fe46a7046b49e034", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/utils/cloudinary.js:94", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/utils/cloudinary.js:94"}, "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-2771c49993d749c1", "name": "Commented-code block (12 lines) in src/other/gestao/GestaoPageModular.jsx:112", "shortDescription": {"text": "Commented-code block (12 lines) in src/other/gestao/GestaoPageModular.jsx:112"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0a566af4f8101684", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/other/gestao/GestaoPageModular.jsx:336", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/other/gestao/GestaoPageModular.jsx:336"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-27581406dfa3206f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/other/gestao/utils/authManager.js:172", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/other/gestao/utils/authManager.js:172"}, "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-67cc2a8f97fef19f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/other/gestao/hooks/useDrivers.js:216", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/other/gestao/hooks/useDrivers.js:216"}, "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-a171400f0dff2a01", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/other/gestao/hooks/useMaintenances.js:36", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/other/gestao/hooks/useMaintenances.js:36"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-575fcf23f8242ac4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/other/gestao/hooks/useGestaoData.js:79", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/other/gestao/hooks/useGestaoData.js:79"}, "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-5ed19d864b69919b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/other/gestao/hooks/useRefuels.js:113", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/other/gestao/hooks/useRefuels.js:113"}, "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-2cb84b023470c709", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/other/gestao/hooks/useExtraCosts.js:35", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/other/gestao/hooks/useExtraCosts.js:35"}, "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-71c5c6353d5d0dff", "name": "Commented-code block (5 lines) in src/components/FloatingStatusCard.jsx:3494", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/FloatingStatusCard.jsx:3494"}, "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-a64cebe34d3afc1f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/FloatingStatusCard.jsx:458", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/FloatingStatusCard.jsx:458"}, "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-c2a171a5d0793c65", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/FloatingResellersPopover.jsx:265", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/FloatingResellersPopover.jsx:265"}, "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-2b6668556ec5a115", "name": "Commented-code block (8 lines) in src/components/FloatingDataAnalyticsPopover.jsx:1735", "shortDescription": {"text": "Commented-code block (8 lines) in src/components/FloatingDataAnalyticsPopover.jsx:1735"}, "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-1caf08b6ea3ac2ad", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/FloatingDataAnalyticsPopover.jsx:2783", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/FloatingDataAnalyticsPopover.jsx:2783"}, "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-8347fd9b86c48b39", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/FloatingCalendarsPopover.jsx:161", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/FloatingCalendarsPopover.jsx:161"}, "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-2d03400db789ed22", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/FloatingGroupsPopover.jsx:95", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/FloatingGroupsPopover.jsx:95"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f3eb05b4c0a4aecf", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/FloatingDevicesPopover.jsx:439", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/FloatingDevicesPopover.jsx:439"}, "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-414d6866ae7e176a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/FloatingGeofencesPopover.jsx:1235", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/FloatingGeofencesPopover.jsx:1235"}, "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-fb4979106ef4010d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/FloatingDriversPopover.jsx:64", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/FloatingDriversPopover.jsx:64"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e7430f17388e1bbe", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/settings/PreferencesPage.jsx:85", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/settings/PreferencesPage.jsx:85"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-655123d85b0d69a5", "name": "Commented-code block (5 lines) in src/addons/jtt-server/jtt-server.mjs:237", "shortDescription": {"text": "Commented-code block (5 lines) in src/addons/jtt-server/jtt-server.mjs:237"}, "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-135859cdfa8758b8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/addons/jtt-server/jtt-server.mjs:2283", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/addons/jtt-server/jtt-server.mjs:2283"}, "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-e25e46b96881d550", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/addons/tags/nanotag.mjs:107", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/addons/tags/nanotag.mjs:107"}, "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-223980525c17f4c0", "name": "Commented-code block (5 lines) in src/addons/reseller/resellersServer.mjs:2524", "shortDescription": {"text": "Commented-code block (5 lines) in src/addons/reseller/resellersServer.mjs:2524"}, "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-4f4ab2ccca821e8f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/addons/telecom/scripts/syncDevicesToChips.js:33", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/addons/telecom/scripts/syncDevicesToChips.js:33"}, "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-de1fb5ea06f39585", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/store/fleet.js:29", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/store/fleet.js:29"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c12abc5800ca3044", "name": "Commented-code block (8 lines) in src/common/util/formatter.js:106", "shortDescription": {"text": "Commented-code block (8 lines) in src/common/util/formatter.js:106"}, "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-1babb7f199587d56", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/common/util/formatter.js:189", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/common/util/formatter.js:189"}, "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-51bc4a551a2071ee", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/common/util/fetchOrThrow.js:2", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/common/util/fetchOrThrow.js:2"}, "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-d74b45e129b6e5ab", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/common/components/BottomMenu.jsx:66", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/common/components/BottomMenu.jsx:66"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8804cae5633026e2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/config/resellersConfig.js:40", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/config/resellersConfig.js:40"}, "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-da83a1e34a99a7d8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 public/j16-door-status.js:336", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/j16-door-status.js:336"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5f1465bfae94dfc4", "name": "Frontend route `/briefing` has no Link/navigate to it \u2014 src/Navigation.jsx", "shortDescription": {"text": "Frontend route `/briefing` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "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-8413fa727e45c75f", "name": "Frontend route `/shared/:code` has no Link/navigate to it \u2014 src/Navigation.jsx", "shortDescription": {"text": "Frontend route `/shared/:code` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "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-00f74fa5b058b5b0", "name": "Frontend route `position/:id` has no Link/navigate to it \u2014 src/Navigation.jsx", "shortDescription": {"text": "Frontend route `position/:id` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "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-c8afba804ecb0410", "name": "Frontend route `network/:positionId` has no Link/navigate to it \u2014 src/Navigation.jsx", "shortDescription": {"text": "Frontend route `network/:positionId` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "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-16dc29bd4d7efe5e", "name": "Frontend route `event/:id` has no Link/navigate to it \u2014 src/Navigation.jsx", "shortDescription": {"text": "Frontend route `event/:id` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "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-6e27ba41c71657a3", "name": "Frontend route `replay` has no Link/navigate to it \u2014 src/Navigation.jsx", "shortDescription": {"text": "Frontend route `replay` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "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-27eccd3d4ab806ea", "name": "Frontend route `stream` has no Link/navigate to it \u2014 src/Navigation.jsx", "shortDescription": {"text": "Frontend route `stream` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "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-75cd41b85a6242d3", "name": "Frontend route `geofences` has no Link/navigate to it \u2014 src/Navigation.jsx", "shortDescription": {"text": "Frontend route `geofences` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "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-8f92f6fb56693e03", "name": "Frontend route `emulator` has no Link/navigate to it \u2014 src/Navigation.jsx", "shortDescription": {"text": "Frontend route `emulator` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "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-a3a58b792f79c1ef", "name": "Frontend route `os` has no Link/navigate to it \u2014 src/Navigation.jsx", "shortDescription": {"text": "Frontend route `os` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "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-7ef59054ce43148a", "name": "Frontend route `meu-financeiro` has no Link/navigate to it \u2014 src/Navigation.jsx", "shortDescription": {"text": "Frontend route `meu-financeiro` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "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-aef811c685a0b472", "name": "Frontend route `settings` has no Link/navigate to it \u2014 src/Navigation.jsx", "shortDescription": {"text": "Frontend route `settings` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "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-f5f2cb4f878fb059", "name": "Frontend route `accumulators/:deviceId` has no Link/navigate to it \u2014 src/Navigation.jsx", "shortDescription": {"text": "Frontend route `accumulators/:deviceId` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "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-b935a7a43067fcc4", "name": "Frontend route `announcement` has no Link/navigate to it \u2014 src/Navigation.jsx", "shortDescription": {"text": "Frontend route `announcement` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "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-420457909f8662ba", "name": "Frontend route `calendars` has no Link/navigate to it \u2014 src/Navigation.jsx", "shortDescription": {"text": "Frontend route `calendars` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "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-ec2c493e2a340498", "name": "Frontend route `calendar/:id` has no Link/navigate to it \u2014 src/Navigation.jsx", "shortDescription": {"text": "Frontend route `calendar/:id` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "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-0284647bae0a7d7e", "name": "Frontend route `calendar` has no Link/navigate to it \u2014 src/Navigation.jsx", "shortDescription": {"text": "Frontend route `calendar` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "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-fc7a6fe6822023fa", "name": "Frontend route `commands` has no Link/navigate to it \u2014 src/Navigation.jsx", "shortDescription": {"text": "Frontend route `commands` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "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-449d1d573ac098c7", "name": "Frontend route `command/:id` has no Link/navigate to it \u2014 src/Navigation.jsx", "shortDescription": {"text": "Frontend route `command/:id` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "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-9895cf56ce77a3ba", "name": "Frontend route `command` has no Link/navigate to it \u2014 src/Navigation.jsx", "shortDescription": {"text": "Frontend route `command` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "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-f2b76a1ba414bf14", "name": "Frontend route `attributes` has no Link/navigate to it \u2014 src/Navigation.jsx", "shortDescription": {"text": "Frontend route `attributes` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "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-f59881b1dbc0ec5a", "name": "Frontend route `attribute/:id` has no Link/navigate to it \u2014 src/Navigation.jsx", "shortDescription": {"text": "Frontend route `attribute/:id` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "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-88b6ba729bcadc0a", "name": "Frontend route `attribute` has no Link/navigate to it \u2014 src/Navigation.jsx", "shortDescription": {"text": "Frontend route `attribute` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "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-1155d6c40afbb5ee", "name": "Frontend route `devices` has no Link/navigate to it \u2014 src/Navigation.jsx", "shortDescription": {"text": "Frontend route `devices` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "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-3a7b0ce03ad5a6d3", "name": "Frontend route `chips` has no Link/navigate to it \u2014 src/Navigation.jsx", "shortDescription": {"text": "Frontend route `chips` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "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-b04abac3a5da7a3a", "name": "Frontend route `sms-templates` has no Link/navigate to it \u2014 src/Navigation.jsx", "shortDescription": {"text": "Frontend route `sms-templates` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "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-a18c02d3c97c49e4", "name": "Frontend route `financial` has no Link/navigate to it \u2014 src/Navigation.jsx", "shortDescription": {"text": "Frontend route `financial` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "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-1589e219d9002308", "name": "Frontend route `device/:id/connections` has no Link/navigate to it \u2014 src/Navigation.jsx", "shortDescription": {"text": "Frontend route `device/:id/connections` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "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-2ceb4b2218a9c25d", "name": "Frontend route `device/:id/command` has no Link/navigate to it \u2014 src/Navigation.jsx", "shortDescription": {"text": "Frontend route `device/:id/command` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "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-332611c5d6f189b7", "name": "Frontend route `device/:id/share` has no Link/navigate to it \u2014 src/Navigation.jsx", "shortDescription": {"text": "Frontend route `device/:id/share` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "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-ea4b0e33587281ba", "name": "Frontend route `device/:id` has no Link/navigate to it \u2014 src/Navigation.jsx", "shortDescription": {"text": "Frontend route `device/:id` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "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-ab78f30f2526cb77", "name": "Frontend route `device` has no Link/navigate to it \u2014 src/Navigation.jsx", "shortDescription": {"text": "Frontend route `device` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "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-1818d25c71b35b83", "name": "Frontend route `drivers` has no Link/navigate to it \u2014 src/Navigation.jsx", "shortDescription": {"text": "Frontend route `drivers` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "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-a1a1acce1a7cd11b", "name": "Frontend route `driver/:id` has no Link/navigate to it \u2014 src/Navigation.jsx", "shortDescription": {"text": "Frontend route `driver/:id` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "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-572f635bdf4e6aff", "name": "Frontend route `driver` has no Link/navigate to it \u2014 src/Navigation.jsx", "shortDescription": {"text": "Frontend route `driver` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "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-35e90a306c21f16e", "name": "Frontend route `geofence/:id` has no Link/navigate to it \u2014 src/Navigation.jsx", "shortDescription": {"text": "Frontend route `geofence/:id` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "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-1a5b90977814ab4c", "name": "Frontend route `geofence` has no Link/navigate to it \u2014 src/Navigation.jsx", "shortDescription": {"text": "Frontend route `geofence` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "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-a9ae29e9f8c18768", "name": "Frontend route `groups` has no Link/navigate to it \u2014 src/Navigation.jsx", "shortDescription": {"text": "Frontend route `groups` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "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-93479f787b9752dd", "name": "Frontend route `group/:id/connections` has no Link/navigate to it \u2014 src/Navigation.jsx", "shortDescription": {"text": "Frontend route `group/:id/connections` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "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-9540d9275dcfe2f1", "name": "Frontend route `group/:id/command` has no Link/navigate to it \u2014 src/Navigation.jsx", "shortDescription": {"text": "Frontend route `group/:id/command` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "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-31bd88c2e4bcc87e", "name": "Frontend route `group/:id` has no Link/navigate to it \u2014 src/Navigation.jsx", "shortDescription": {"text": "Frontend route `group/:id` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "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-2cf53f4109c330cd", "name": "Frontend route `group` has no Link/navigate to it \u2014 src/Navigation.jsx", "shortDescription": {"text": "Frontend route `group` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "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-d38b73f2e888542a", "name": "Frontend route `maintenances` has no Link/navigate to it \u2014 src/Navigation.jsx", "shortDescription": {"text": "Frontend route `maintenances` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "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-e51640a5bba3e3a9", "name": "Frontend route `maintenance/:id` has no Link/navigate to it \u2014 src/Navigation.jsx", "shortDescription": {"text": "Frontend route `maintenance/:id` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "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-227fdf37f62a783b", "name": "Frontend route `maintenance` has no Link/navigate to it \u2014 src/Navigation.jsx", "shortDescription": {"text": "Frontend route `maintenance` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "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-8d38441660a6559d", "name": "Frontend route `notifications` has no Link/navigate to it \u2014 src/Navigation.jsx", "shortDescription": {"text": "Frontend route `notifications` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "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-40c6d4f7522cc07b", "name": "Frontend route `notification/:id` has no Link/navigate to it \u2014 src/Navigation.jsx", "shortDescription": {"text": "Frontend route `notification/:id` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "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-5ee8bde30b798663", "name": "Frontend route `notification` has no Link/navigate to it \u2014 src/Navigation.jsx", "shortDescription": {"text": "Frontend route `notification` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "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-306ff64b0bc49b0b", "name": "Frontend route `preferences` has no Link/navigate to it \u2014 src/Navigation.jsx", "shortDescription": {"text": "Frontend route `preferences` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "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-922760e4262a1e51", "name": "Frontend route `server` has no Link/navigate to it \u2014 src/Navigation.jsx", "shortDescription": {"text": "Frontend route `server` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "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-04eb54f02b9efc43", "name": "Frontend route `users` has no Link/navigate to it \u2014 src/Navigation.jsx", "shortDescription": {"text": "Frontend route `users` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "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-bffd7772852cbaaf", "name": "Frontend route `custom-users` has no Link/navigate to it \u2014 src/Navigation.jsx", "shortDescription": {"text": "Frontend route `custom-users` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "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-eec7acd65b4e07d7", "name": "Frontend route `clients` has no Link/navigate to it \u2014 src/Navigation.jsx", "shortDescription": {"text": "Frontend route `clients` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "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-55447c45d9b48d6d", "name": "Frontend route `user/:id/connections` has no Link/navigate to it \u2014 src/Navigation.jsx", "shortDescription": {"text": "Frontend route `user/:id/connections` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "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-9fccebcf14dfc8ae", "name": "Frontend route `user/:id` has no Link/navigate to it \u2014 src/Navigation.jsx", "shortDescription": {"text": "Frontend route `user/:id` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "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-46e5465ae029edcf", "name": "Frontend route `user` has no Link/navigate to it \u2014 src/Navigation.jsx", "shortDescription": {"text": "Frontend route `user` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "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-91a19b53c45071c1", "name": "Frontend route `reports` has no Link/navigate to it \u2014 src/Navigation.jsx", "shortDescription": {"text": "Frontend route `reports` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "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-16d30635487561e7", "name": "Frontend route `combined` has no Link/navigate to it \u2014 src/Navigation.jsx", "shortDescription": {"text": "Frontend route `combined` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "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-42c79ff57fc93b7f", "name": "Frontend route `chart` has no Link/navigate to it \u2014 src/Navigation.jsx", "shortDescription": {"text": "Frontend route `chart` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "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-62fafac4cfdd49c4", "name": "Frontend route `events` has no Link/navigate to it \u2014 src/Navigation.jsx", "shortDescription": {"text": "Frontend route `events` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "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-5067db12c6bb6169", "name": "Frontend route `route` has no Link/navigate to it \u2014 src/Navigation.jsx", "shortDescription": {"text": "Frontend route `route` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "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-1818b16292ecee62", "name": "Frontend route `stops` has no Link/navigate to it \u2014 src/Navigation.jsx", "shortDescription": {"text": "Frontend route `stops` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "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-660c87453be99331", "name": "Frontend route `summary` has no Link/navigate to it \u2014 src/Navigation.jsx", "shortDescription": {"text": "Frontend route `summary` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "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-6483c77c6eced6a9", "name": "Frontend route `trips` has no Link/navigate to it \u2014 src/Navigation.jsx", "shortDescription": {"text": "Frontend route `trips` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "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-3caaf8c66b47ee6d", "name": "Frontend route `scheduled` has no Link/navigate to it \u2014 src/Navigation.jsx", "shortDescription": {"text": "Frontend route `scheduled` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "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-b64656ee7063fc0d", "name": "Frontend route `statistics` has no Link/navigate to it \u2014 src/Navigation.jsx", "shortDescription": {"text": "Frontend route `statistics` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "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-33fb0be5cbdebd92", "name": "Frontend route `audit` has no Link/navigate to it \u2014 src/Navigation.jsx", "shortDescription": {"text": "Frontend route `audit` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "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-997b53ac59e4a2d0", "name": "Frontend route `logs` has no Link/navigate to it \u2014 src/Navigation.jsx", "shortDescription": {"text": "Frontend route `logs` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "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-0dc3c82b0ecd1317", "name": "Dangling fetch: GET /api/server (src/ServerProvider.jsx:22)", "shortDescription": {"text": "Dangling fetch: GET /api/server (src/ServerProvider.jsx:22)"}, "fullDescription": {"text": "`src/ServerProvider.jsx:22` calls `GET /api/server` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/server`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-440bb28a025ff06e", "name": "Dangling fetch: GET /api/session?token=${encodeURIComponent(token)} (src/Navigation.jsx:106)", "shortDescription": {"text": "Dangling fetch: GET /api/session?token=${encodeURIComponent(token)} (src/Navigation.jsx:106)"}, "fullDescription": {"text": "`src/Navigation.jsx:106` calls `GET /api/session?token=${encodeURIComponent(token)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/session`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-68a1eceea1ee97e6", "name": "Dangling fetch: GET /api/positions (src/SocketController.jsx:154)", "shortDescription": {"text": "Dangling fetch: GET /api/positions (src/SocketController.jsx:154)"}, "fullDescription": {"text": "`src/SocketController.jsx:154` calls `GET /api/positions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/positions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7b22a58ef93df4f7", "name": "Dangling fetch: GET /api/events/${eventId} (src/SocketController.jsx:215)", "shortDescription": {"text": "Dangling fetch: GET /api/events/${eventId} (src/SocketController.jsx:215)"}, "fullDescription": {"text": "`src/SocketController.jsx:215` calls `GET /api/events/${eventId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/events/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-783eba7c02a6adbf", "name": "Dangling fetch: GET /api/session (src/App.jsx:53)", "shortDescription": {"text": "Dangling fetch: GET /api/session (src/App.jsx:53)"}, "fullDescription": {"text": "`src/App.jsx:53` calls `GET /api/session` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/session`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bd082fcd74ed33dd", "name": "Dangling fetch: DELETE /api/session (src/main/MainPage.jsx:432)", "shortDescription": {"text": "Dangling fetch: DELETE /api/session (src/main/MainPage.jsx:432)"}, "fullDescription": {"text": "`src/main/MainPage.jsx:432` calls `DELETE /api/session` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/session`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-df9b114004b68f47", "name": "Dangling fetch: GET /api/server (src/main/hooks/useServerData.js:11)", "shortDescription": {"text": "Dangling fetch: GET /api/server (src/main/hooks/useServerData.js:11)"}, "fullDescription": {"text": "`src/main/hooks/useServerData.js:11` calls `GET /api/server` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/server`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ff295285ebf5535f", "name": "Dangling fetch: POST /api/server/reboot (src/main/hooks/usePreferencesDrawer.js:58)", "shortDescription": {"text": "Dangling fetch: POST /api/server/reboot (src/main/hooks/usePreferencesDrawer.js:58)"}, "fullDescription": {"text": "`src/main/hooks/usePreferencesDrawer.js:58` calls `POST /api/server/reboot` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/server/reboot`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-76cf9dd54c092b1d", "name": "Dangling fetch: POST /api/session (src/login/LoginPage.jsx:162)", "shortDescription": {"text": "Dangling fetch: POST /api/session (src/login/LoginPage.jsx:162)"}, "fullDescription": {"text": "`src/login/LoginPage.jsx:162` calls `POST /api/session` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/session`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7d6e994543c16bad", "name": "Dangling fetch: POST https://api.cloudinary.com/v1_1/${cloudName}/image/upload (src/utils/cloudinary.js:94)", "shortDescription": {"text": "Dangling fetch: POST https://api.cloudinary.com/v1_1/${cloudName}/image/upload (src/utils/cloudinary.js:94)"}, "fullDescription": {"text": "`src/utils/cloudinary.js:94` calls `POST https://api.cloudinary.com/v1_1/${cloudName}/image/upload` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.cloudinary.com/v1_1/<p>/image/upload`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c57520fbefd4ae12", "name": "Dangling fetch: POST https://api.cloudinary.com/v1_1/${cloudName}/image/destroy (src/utils/cloudinary.js:167)", "shortDescription": {"text": "Dangling fetch: POST https://api.cloudinary.com/v1_1/${cloudName}/image/destroy (src/utils/cloudinary.js:167)"}, "fullDescription": {"text": "`src/utils/cloudinary.js:167` calls `POST https://api.cloudinary.com/v1_1/${cloudName}/image/destroy` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.cloudinary.com/v1_1/<p>/image/destroy`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-61ceeaf1f6c24781", "name": "Dangling fetch: GET /auth/user (src/other/gestao/utils/testApi.js:10)", "shortDescription": {"text": "Dangling fetch: GET /auth/user (src/other/gestao/utils/testApi.js:10)"}, "fullDescription": {"text": "`src/other/gestao/utils/testApi.js:10` calls `GET /auth/user` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/user`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0cccc27919206cb8", "name": "Dangling fetch: GET /api/session (src/other/gestao/utils/testAuth.js:7)", "shortDescription": {"text": "Dangling fetch: GET /api/session (src/other/gestao/utils/testAuth.js:7)"}, "fullDescription": {"text": "`src/other/gestao/utils/testAuth.js:7` calls `GET /api/session` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/session`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3b3bfbbef84efdae", "name": "Dangling fetch: GET /api/server (src/other/gestao/utils/authManager.js:18)", "shortDescription": {"text": "Dangling fetch: GET /api/server (src/other/gestao/utils/authManager.js:18)"}, "fullDescription": {"text": "`src/other/gestao/utils/authManager.js:18` calls `GET /api/server` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/server`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e6e798053d5681fd", "name": "Dangling fetch: GET /api/server (src/other/gestao/utils/authManager.js:45)", "shortDescription": {"text": "Dangling fetch: GET /api/server (src/other/gestao/utils/authManager.js:45)"}, "fullDescription": {"text": "`src/other/gestao/utils/authManager.js:45` calls `GET /api/server` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/server`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e12c0edb732c62f6", "name": "Dangling fetch: DELETE /api/session (src/other/gestao/utils/authManager.js:260)", "shortDescription": {"text": "Dangling fetch: DELETE /api/session (src/other/gestao/utils/authManager.js:260)"}, "fullDescription": {"text": "`src/other/gestao/utils/authManager.js:260` calls `DELETE /api/session` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/session`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8744c7024e9586d1", "name": "Dangling fetch: GET /api/session (src/other/gestao/utils/authDiagnostic.js:16)", "shortDescription": {"text": "Dangling fetch: GET /api/session (src/other/gestao/utils/authDiagnostic.js:16)"}, "fullDescription": {"text": "`src/other/gestao/utils/authDiagnostic.js:16` calls `GET /api/session` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/session`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4c714f2999bad06f", "name": "Dangling fetch: POST /api/session (src/other/gestao/utils/authDiagnostic.js:127)", "shortDescription": {"text": "Dangling fetch: POST /api/session (src/other/gestao/utils/authDiagnostic.js:127)"}, "fullDescription": {"text": "`src/other/gestao/utils/authDiagnostic.js:127` calls `POST /api/session` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/session`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3557ec69a1d1621e", "name": "Dangling fetch: GET /api/vehicles/available-devices (src/other/os/utils/api.js:29)", "shortDescription": {"text": "Dangling fetch: GET /api/vehicles/available-devices (src/other/os/utils/api.js:29)"}, "fullDescription": {"text": "`src/other/os/utils/api.js:29` calls `GET /api/vehicles/available-devices` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/vehicles/available-devices`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d900b003c19599a1", "name": "Dangling fetch: GET /api/vehicles/linked-devices (src/other/os/utils/api.js:31)", "shortDescription": {"text": "Dangling fetch: GET /api/vehicles/linked-devices (src/other/os/utils/api.js:31)"}, "fullDescription": {"text": "`src/other/os/utils/api.js:31` calls `GET /api/vehicles/linked-devices` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/vehicles/linked-devices`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-24e718bb178e4320", "name": "Dangling fetch: POST /api/vehicles/upload (src/other/os/components/OSDashboard.jsx:349)", "shortDescription": {"text": "Dangling fetch: POST /api/vehicles/upload (src/other/os/components/OSDashboard.jsx:349)"}, "fullDescription": {"text": "`src/other/os/components/OSDashboard.jsx:349` calls `POST /api/vehicles/upload` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/vehicles/upload`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-06d69fa87cf42d63", "name": "Dangling fetch: GET /api/positions?id=${position.id} (src/components/FloatingStatusCard.jsx:3350)", "shortDescription": {"text": "Dangling fetch: GET /api/positions?id=${position.id} (src/components/FloatingStatusCard.jsx:3350)"}, "fullDescription": {"text": "`src/components/FloatingStatusCard.jsx:3350` calls `GET /api/positions?id=${position.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/positions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-790a55971a46772b", "name": "Dangling fetch: PUT /api/devices/${device.id} (src/components/FloatingStatusCard.jsx:3782)", "shortDescription": {"text": "Dangling fetch: PUT /api/devices/${device.id} (src/components/FloatingStatusCard.jsx:3782)"}, "fullDescription": {"text": "`src/components/FloatingStatusCard.jsx:3782` calls `PUT /api/devices/${device.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/devices/<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-a3a717250939b802", "name": "Dangling fetch: GET /api/devices/${device.id} (src/components/FloatingStatusCard.jsx:3798)", "shortDescription": {"text": "Dangling fetch: GET /api/devices/${device.id} (src/components/FloatingStatusCard.jsx:3798)"}, "fullDescription": {"text": "`src/components/FloatingStatusCard.jsx:3798` calls `GET /api/devices/${device.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/devices/<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-f185592405389571", "name": "Dangling fetch: PUT /api/devices/${device.id} (src/components/FloatingStatusCard.jsx:3901)", "shortDescription": {"text": "Dangling fetch: PUT /api/devices/${device.id} (src/components/FloatingStatusCard.jsx:3901)"}, "fullDescription": {"text": "`src/components/FloatingStatusCard.jsx:3901` calls `PUT /api/devices/${device.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/devices/<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-499f5504aeeafc7e", "name": "Dangling fetch: GET /api/devices/${device.id} (src/components/FloatingStatusCard.jsx:3919)", "shortDescription": {"text": "Dangling fetch: GET /api/devices/${device.id} (src/components/FloatingStatusCard.jsx:3919)"}, "fullDescription": {"text": "`src/components/FloatingStatusCard.jsx:3919` calls `GET /api/devices/${device.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/devices/<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-504c23b8fb86e681", "name": "Dangling fetch: PUT /api/devices/${device.id} (src/components/FloatingStatusCard.jsx:4059)", "shortDescription": {"text": "Dangling fetch: PUT /api/devices/${device.id} (src/components/FloatingStatusCard.jsx:4059)"}, "fullDescription": {"text": "`src/components/FloatingStatusCard.jsx:4059` calls `PUT /api/devices/${device.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/devices/<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-60dc650c387e52b6", "name": "Dangling fetch: GET /api/server (src/components/UserManagementPopover.jsx:519)", "shortDescription": {"text": "Dangling fetch: GET /api/server (src/components/UserManagementPopover.jsx:519)"}, "fullDescription": {"text": "`src/components/UserManagementPopover.jsx:519` calls `GET /api/server` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/server`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6599307083bbbd24", "name": "Dangling fetch: GET /api/list-files (src/components/ResellersPage.jsx:12)", "shortDescription": {"text": "Dangling fetch: GET /api/list-files (src/components/ResellersPage.jsx:12)"}, "fullDescription": {"text": "`src/components/ResellersPage.jsx:12` calls `GET /api/list-files` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/list-files`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-91eecc65d91ae024", "name": "Dangling fetch: GET /api/calendars (src/components/FloatingCalendarsPopover.jsx:161)", "shortDescription": {"text": "Dangling fetch: GET /api/calendars (src/components/FloatingCalendarsPopover.jsx:161)"}, "fullDescription": {"text": "`src/components/FloatingCalendarsPopover.jsx:161` calls `GET /api/calendars` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/calendars`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-76bcc6856a6a6563", "name": "Dangling fetch: POST /api/calendars (src/components/FloatingCalendarsPopover.jsx:226)", "shortDescription": {"text": "Dangling fetch: POST /api/calendars (src/components/FloatingCalendarsPopover.jsx:226)"}, "fullDescription": {"text": "`src/components/FloatingCalendarsPopover.jsx:226` calls `POST /api/calendars` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/calendars`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0e1041e7aa7590b4", "name": "Dangling fetch: PUT /api/calendars/${calendarData.id} (src/components/FloatingCalendarsPopover.jsx:252)", "shortDescription": {"text": "Dangling fetch: PUT /api/calendars/${calendarData.id} (src/components/FloatingCalendarsPopover.jsx:252)"}, "fullDescription": {"text": "`src/components/FloatingCalendarsPopover.jsx:252` calls `PUT /api/calendars/${calendarData.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/calendars/<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-3b99a205f1a6abd6", "name": "Dangling fetch: DELETE /api/calendars/${calendarId} (src/components/FloatingCalendarsPopover.jsx:278)", "shortDescription": {"text": "Dangling fetch: DELETE /api/calendars/${calendarId} (src/components/FloatingCalendarsPopover.jsx:278)"}, "fullDescription": {"text": "`src/components/FloatingCalendarsPopover.jsx:278` calls `DELETE /api/calendars/${calendarId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/calendars/<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-9a5674e6bc9c9b0c", "name": "Dangling fetch: GET /api/groups (src/components/FloatingGroupsPopover.jsx:95)", "shortDescription": {"text": "Dangling fetch: GET /api/groups (src/components/FloatingGroupsPopover.jsx:95)"}, "fullDescription": {"text": "`src/components/FloatingGroupsPopover.jsx:95` calls `GET /api/groups` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/groups`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c36ad6bb7e22ffea", "name": "Dangling fetch: POST /api/groups (src/components/FloatingGroupsPopover.jsx:160)", "shortDescription": {"text": "Dangling fetch: POST /api/groups (src/components/FloatingGroupsPopover.jsx:160)"}, "fullDescription": {"text": "`src/components/FloatingGroupsPopover.jsx:160` calls `POST /api/groups` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/groups`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9057637989721602", "name": "Dangling fetch: PUT /api/groups/${groupData.id} (src/components/FloatingGroupsPopover.jsx:189)", "shortDescription": {"text": "Dangling fetch: PUT /api/groups/${groupData.id} (src/components/FloatingGroupsPopover.jsx:189)"}, "fullDescription": {"text": "`src/components/FloatingGroupsPopover.jsx:189` calls `PUT /api/groups/${groupData.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/groups/<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-0409121b80e65108", "name": "Dangling fetch: DELETE /api/groups/${groupId} (src/components/FloatingGroupsPopover.jsx:218)", "shortDescription": {"text": "Dangling fetch: DELETE /api/groups/${groupId} (src/components/FloatingGroupsPopover.jsx:218)"}, "fullDescription": {"text": "`src/components/FloatingGroupsPopover.jsx:218` calls `DELETE /api/groups/${groupId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/groups/<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-413a43523c68f015", "name": "Dangling fetch: GET /api/drivers (src/components/FloatingDriversPopover.jsx:64)", "shortDescription": {"text": "Dangling fetch: GET /api/drivers (src/components/FloatingDriversPopover.jsx:64)"}, "fullDescription": {"text": "`src/components/FloatingDriversPopover.jsx:64` calls `GET /api/drivers` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/drivers`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-02dbcb2e1f52c955", "name": "Dangling fetch: POST /api/drivers (src/components/FloatingDriversPopover.jsx:118)", "shortDescription": {"text": "Dangling fetch: POST /api/drivers (src/components/FloatingDriversPopover.jsx:118)"}, "fullDescription": {"text": "`src/components/FloatingDriversPopover.jsx:118` calls `POST /api/drivers` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/drivers`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-85c5d80b846f15b3", "name": "Dangling fetch: POST /api/vehicles/upload (src/components/management/VehicleRegisterModal.jsx:182)", "shortDescription": {"text": "Dangling fetch: POST /api/vehicles/upload (src/components/management/VehicleRegisterModal.jsx:182)"}, "fullDescription": {"text": "`src/components/management/VehicleRegisterModal.jsx:182` calls `POST /api/vehicles/upload` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/vehicles/upload`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-061dfe8dbebdaa04", "name": "Dangling fetch: POST /api/session (src/components/fleet/FleetVehicleCard.jsx:457)", "shortDescription": {"text": "Dangling fetch: POST /api/session (src/components/fleet/FleetVehicleCard.jsx:457)"}, "fullDescription": {"text": "`src/components/fleet/FleetVehicleCard.jsx:457` calls `POST /api/session` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/session`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-330548fe2fed9b27", "name": "Dangling fetch: DELETE /api/session (src/settings/ClientFinancialPage.jsx:98)", "shortDescription": {"text": "Dangling fetch: DELETE /api/session (src/settings/ClientFinancialPage.jsx:98)"}, "fullDescription": {"text": "`src/settings/ClientFinancialPage.jsx:98` calls `DELETE /api/session` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/session`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-da9d3f29ebfa1119", "name": "Dangling fetch: POST /api/server/reboot (src/settings/PreferencesPage.jsx:85)", "shortDescription": {"text": "Dangling fetch: POST /api/server/reboot (src/settings/PreferencesPage.jsx:85)"}, "fullDescription": {"text": "`src/settings/PreferencesPage.jsx:85` calls `POST /api/server/reboot` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/server/reboot`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d7cf08265d9a4107", "name": "Dangling fetch: GET /api/commands/types (src/settings/components/BaseCommandView.jsx:60)", "shortDescription": {"text": "Dangling fetch: GET /api/commands/types (src/settings/components/BaseCommandView.jsx:60)"}, "fullDescription": {"text": "`src/settings/components/BaseCommandView.jsx:60` calls `GET /api/commands/types` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/commands/types`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d4eb9fa54b5e7d86", "name": "Dangling fetch: POST /api/vehicles/upload (src/settings/components/vehicles/VehicleFormDialog.jsx:188)", "shortDescription": {"text": "Dangling fetch: POST /api/vehicles/upload (src/settings/components/vehicles/VehicleFormDialog.jsx:188)"}, "fullDescription": {"text": "`src/settings/components/vehicles/VehicleFormDialog.jsx:188` calls `POST /api/vehicles/upload` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/vehicles/upload`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c29d681b9eeb9b35", "name": "Dangling fetch: POST https://oauth2.googleapis.com/token (src/addons/gestao_backend/schedulers/doorPush.js:58)", "shortDescription": {"text": "Dangling fetch: POST https://oauth2.googleapis.com/token (src/addons/gestao_backend/schedulers/doorPush.js:58)"}, "fullDescription": {"text": "`src/addons/gestao_backend/schedulers/doorPush.js:58` calls `POST https://oauth2.googleapis.com/token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/oauth2.googleapis.com/token`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-91b3da149ad7e989", "name": "Dangling fetch: POST https://fcm.googleapis.com/v1/projects/${PROJECT_ID}/messages:send (src/addons/gestao_backend/sched", "shortDescription": {"text": "Dangling fetch: POST https://fcm.googleapis.com/v1/projects/${PROJECT_ID}/messages:send (src/addons/gestao_backend/schedulers/doorPush.js:73)"}, "fullDescription": {"text": "`src/addons/gestao_backend/schedulers/doorPush.js:73` calls `POST https://fcm.googleapis.com/v1/projects/${PROJECT_ID}/messages:send` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/fcm.googleapis.com/v1/projects/<p>/messages/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d402680d591b7b4d", "name": "Dangling fetch: POST http://localhost:8082/api/session (src/addons/gestao_backend/schedulers/j16DoorMonitor.js:70)", "shortDescription": {"text": "Dangling fetch: POST http://localhost:8082/api/session (src/addons/gestao_backend/schedulers/j16DoorMonitor.js:70)"}, "fullDescription": {"text": "`src/addons/gestao_backend/schedulers/j16DoorMonitor.js:70` calls `POST http://localhost:8082/api/session` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/http:/localhost:8082/api/session`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-667a1fbc93ccabe5", "name": "Dangling fetch: GET http://localhost:8082/api/devices?all=true (src/addons/gestao_backend/schedulers/j16DoorMonitor.js:8", "shortDescription": {"text": "Dangling fetch: GET http://localhost:8082/api/devices?all=true (src/addons/gestao_backend/schedulers/j16DoorMonitor.js:85)"}, "fullDescription": {"text": "`src/addons/gestao_backend/schedulers/j16DoorMonitor.js:85` calls `GET http://localhost:8082/api/devices?all=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/http:/localhost:8082/api/devices`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a3689c0c29f817dd", "name": "Dangling fetch: POST /api/session/token (src/common/components/NativeInterface.js:23)", "shortDescription": {"text": "Dangling fetch: POST /api/session/token (src/common/components/NativeInterface.js:23)"}, "fullDescription": {"text": "`src/common/components/NativeInterface.js:23` calls `POST /api/session/token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/session/token`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cbc24ca01305622f", "name": "Dangling fetch: PUT /api/users/${user.id} (src/common/components/BottomMenu.jsx:66)", "shortDescription": {"text": "Dangling fetch: PUT /api/users/${user.id} (src/common/components/BottomMenu.jsx:66)"}, "fullDescription": {"text": "`src/common/components/BottomMenu.jsx:66` calls `PUT /api/users/${user.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/users/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a9d639179bb0f1b1", "name": "Dangling fetch: DELETE /api/session (src/common/components/BottomMenu.jsx:75)", "shortDescription": {"text": "Dangling fetch: DELETE /api/session (src/common/components/BottomMenu.jsx:75)"}, "fullDescription": {"text": "`src/common/components/BottomMenu.jsx:75` calls `DELETE /api/session` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/session`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f468360344b9dd7b", "name": "Dangling fetch: GET /api/positions (public/j16-door-status.js:347)", "shortDescription": {"text": "Dangling fetch: GET /api/positions (public/j16-door-status.js:347)"}, "fullDescription": {"text": "`public/j16-door-status.js:347` calls `GET /api/positions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/positions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bd1bf89b901179e9", "name": "Unused endpoint: GET /work-orders", "shortDescription": {"text": "Unused endpoint: GET /work-orders"}, "fullDescription": {"text": "`src/other/os/utils/api.js` declares `GET /work-orders` 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-ca968b18012521c4", "name": "Unused endpoint: POST /work-orders", "shortDescription": {"text": "Unused endpoint: POST /work-orders"}, "fullDescription": {"text": "`src/other/os/utils/api.js` declares `POST /work-orders` 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-b1bad868098ab933", "name": "Unused endpoint: POST /checklist", "shortDescription": {"text": "Unused endpoint: POST /checklist"}, "fullDescription": {"text": "`src/other/os/utils/api.js` declares `POST /checklist` 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-841e50bf821e4158", "name": "Unused endpoint: GET /users", "shortDescription": {"text": "Unused endpoint: GET /users"}, "fullDescription": {"text": "`src/other/os/utils/api.js` declares `GET /users` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0729b84d4e27d0b9", "name": "Unused endpoint: GET /clients", "shortDescription": {"text": "Unused endpoint: GET /clients"}, "fullDescription": {"text": "`src/other/os/utils/api.js` declares `GET /clients` 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-354ccc16f39b78dc", "name": "Unused endpoint: POST /toggle-technician", "shortDescription": {"text": "Unused endpoint: POST /toggle-technician"}, "fullDescription": {"text": "`src/other/os/utils/api.js` declares `POST /toggle-technician` 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-84d6e7b9cb92a93d", "name": "Unused endpoint: POST /api/permissions", "shortDescription": {"text": "Unused endpoint: POST /api/permissions"}, "fullDescription": {"text": "`src/addons/os_backend/services/traccar.service.js` declares `POST /api/permissions` 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-156c55785fe9553b", "name": "Unused endpoint: GET /work-orders/by-plate/:plate", "shortDescription": {"text": "Unused endpoint: GET /work-orders/by-plate/:plate"}, "fullDescription": {"text": "`src/addons/os_backend/routes/os.routes.js` declares `GET /work-orders/by-plate/:plate` 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-acab89f98afc6c95", "name": "Unused endpoint: GET /work-orders/:id", "shortDescription": {"text": "Unused endpoint: GET /work-orders/:id"}, "fullDescription": {"text": "`src/addons/os_backend/routes/os.routes.js` declares `GET /work-orders/: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-d57bbea75cc7ad64", "name": "Unused endpoint: PATCH /work-orders/:id", "shortDescription": {"text": "Unused endpoint: PATCH /work-orders/:id"}, "fullDescription": {"text": "`src/addons/os_backend/routes/os.routes.js` declares `PATCH /work-orders/: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-b0c900654246151d", "name": "Unused endpoint: PATCH /work-orders/:id/status", "shortDescription": {"text": "Unused endpoint: PATCH /work-orders/:id/status"}, "fullDescription": {"text": "`src/addons/os_backend/routes/os.routes.js` declares `PATCH /work-orders/: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-38f7ce9d54a77644", "name": "Unused endpoint: DELETE /work-orders/:id", "shortDescription": {"text": "Unused endpoint: DELETE /work-orders/:id"}, "fullDescription": {"text": "`src/addons/os_backend/routes/os.routes.js` declares `DELETE /work-orders/: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-b54d09fbcbbb3789", "name": "Unused endpoint: POST /work-orders/:id/photos", "shortDescription": {"text": "Unused endpoint: POST /work-orders/:id/photos"}, "fullDescription": {"text": "`src/addons/os_backend/routes/os.routes.js` declares `POST /work-orders/:id/photos` 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-f7990ba437b596c9", "name": "Unused endpoint: POST /work-orders/:id/signature", "shortDescription": {"text": "Unused endpoint: POST /work-orders/:id/signature"}, "fullDescription": {"text": "`src/addons/os_backend/routes/os.routes.js` declares `POST /work-orders/:id/signature` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-618721b912bad1c2", "name": "Unused endpoint: POST /login", "shortDescription": {"text": "Unused endpoint: POST /login"}, "fullDescription": {"text": "`src/addons/os_backend/routes/traccar.routes.js` declares `POST /login` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1bca8100a44f7f25", "name": "Unused endpoint: POST /users", "shortDescription": {"text": "Unused endpoint: POST /users"}, "fullDescription": {"text": "`src/addons/os_backend/routes/traccar.routes.js` declares `POST /users` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-041afd16fe4e42c7", "name": "Unused endpoint: POST /link-device", "shortDescription": {"text": "Unused endpoint: POST /link-device"}, "fullDescription": {"text": "`src/addons/os_backend/routes/traccar.routes.js` declares `POST /link-device` 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-9c295226a2209ebf", "name": "Unused endpoint: USE /os-uploads", "shortDescription": {"text": "Unused endpoint: USE /os-uploads"}, "fullDescription": {"text": "`src/addons/os_backend/routes/index.js` declares `USE /os-uploads` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-190f9180055d579a", "name": "Unused endpoint: USE /os-api", "shortDescription": {"text": "Unused endpoint: USE /os-api"}, "fullDescription": {"text": "`src/addons/os_backend/routes/index.js` declares `USE /os-api` 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-c4f847ece21b3923", "name": "Unused endpoint: GET /os-api/clients", "shortDescription": {"text": "Unused endpoint: GET /os-api/clients"}, "fullDescription": {"text": "`src/addons/os_backend/routes/index.js` declares `GET /os-api/clients` 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-dfc8376e5a8af115", "name": "Unused endpoint: USE /traccar-api", "shortDescription": {"text": "Unused endpoint: USE /traccar-api"}, "fullDescription": {"text": "`src/addons/os_backend/routes/index.js` declares `USE /traccar-api` 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-8130fd63320e80bf", "name": "Unused endpoint: GET /api/roles", "shortDescription": {"text": "Unused endpoint: GET /api/roles"}, "fullDescription": {"text": "`src/addons/rbac/rbacServer.mjs` declares `GET /api/roles` 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-3a868fbfa352402c", "name": "Unused endpoint: POST /api/roles", "shortDescription": {"text": "Unused endpoint: POST /api/roles"}, "fullDescription": {"text": "`src/addons/rbac/rbacServer.mjs` declares `POST /api/roles` 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-86d6ec4d0e78d6ca", "name": "Unused endpoint: PUT /api/roles/:id", "shortDescription": {"text": "Unused endpoint: PUT /api/roles/:id"}, "fullDescription": {"text": "`src/addons/rbac/rbacServer.mjs` declares `PUT /api/roles/: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-f0ad627ea17097ac", "name": "Unused endpoint: DELETE /api/roles/:id", "shortDescription": {"text": "Unused endpoint: DELETE /api/roles/:id"}, "fullDescription": {"text": "`src/addons/rbac/rbacServer.mjs` declares `DELETE /api/roles/: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-1bc898b3b7565990", "name": "Unused endpoint: USE /uploads", "shortDescription": {"text": "Unused endpoint: USE /uploads"}, "fullDescription": {"text": "`src/addons/gestao_backend/server.js` declares `USE /uploads` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e059f6361e9b8949", "name": "Unused endpoint: USE /gestao", "shortDescription": {"text": "Unused endpoint: USE /gestao"}, "fullDescription": {"text": "`src/addons/gestao_backend/server.js` declares `USE /gestao` 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-dde3adb27bf7eebe", "name": "Unused endpoint: USE /api", "shortDescription": {"text": "Unused endpoint: USE /api"}, "fullDescription": {"text": "`src/addons/gestao_backend/server.js` declares `USE /api` 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": "`src/addons/gestao_backend/server.js` 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-7d4edb1ad84a20ee", "name": "Unused endpoint: GET /gestao/relatorios/custos-extras", "shortDescription": {"text": "Unused endpoint: GET /gestao/relatorios/custos-extras"}, "fullDescription": {"text": "`src/addons/gestao_backend/routes/reports.js` declares `GET /gestao/relatorios/custos-extras` 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-a61006764a00d4b7", "name": "Unused endpoint: GET /gestao/relatorios/custos-por-viagem", "shortDescription": {"text": "Unused endpoint: GET /gestao/relatorios/custos-por-viagem"}, "fullDescription": {"text": "`src/addons/gestao_backend/routes/reports.js` declares `GET /gestao/relatorios/custos-por-viagem` 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-b9d32396cac219ec", "name": "Unused endpoint: GET /gestao/relatorios/custos-por-categoria", "shortDescription": {"text": "Unused endpoint: GET /gestao/relatorios/custos-por-categoria"}, "fullDescription": {"text": "`src/addons/gestao_backend/routes/reports.js` declares `GET /gestao/relatorios/custos-por-categoria` 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-574cf89f187cbe6e", "name": "Unused endpoint: GET /gestao/relatorios/consumo-medio", "shortDescription": {"text": "Unused endpoint: GET /gestao/relatorios/consumo-medio"}, "fullDescription": {"text": "`src/addons/gestao_backend/routes/reports.js` declares `GET /gestao/relatorios/consumo-medio` 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-800c9d44f6cc7f63", "name": "Unused endpoint: GET /gestao/relatorios/distancia-abastecimentos", "shortDescription": {"text": "Unused endpoint: GET /gestao/relatorios/distancia-abastecimentos"}, "fullDescription": {"text": "`src/addons/gestao_backend/routes/reports.js` declares `GET /gestao/relatorios/distancia-abastecimentos` 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-c4f534f23bcaea0c", "name": "Unused endpoint: GET /gestao/relatorios/custo-abastecimento-total", "shortDescription": {"text": "Unused endpoint: GET /gestao/relatorios/custo-abastecimento-total"}, "fullDescription": {"text": "`src/addons/gestao_backend/routes/reports.js` declares `GET /gestao/relatorios/custo-abastecimento-total` 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-2c2cbeb51f6acb24", "name": "Unused endpoint: GET /app/motorista/trips", "shortDescription": {"text": "Unused endpoint: GET /app/motorista/trips"}, "fullDescription": {"text": "`src/addons/gestao_backend/routes/motorista.js` declares `GET /app/motorista/trips` 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-7e33c20a10fc097e", "name": "Unused endpoint: POST /app/motorista/custos", "shortDescription": {"text": "Unused endpoint: POST /app/motorista/custos"}, "fullDescription": {"text": "`src/addons/gestao_backend/routes/motorista.js` declares `POST /app/motorista/custos` 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-06fd0df013eb20c5", "name": "Unused endpoint: POST /app/motorista/custos-avulsos", "shortDescription": {"text": "Unused endpoint: POST /app/motorista/custos-avulsos"}, "fullDescription": {"text": "`src/addons/gestao_backend/routes/motorista.js` declares `POST /app/motorista/custos-avulsos` 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-0838f15bf144a0b1", "name": "Unused endpoint: PUT /app/motorista/trips/:id/finalizar", "shortDescription": {"text": "Unused endpoint: PUT /app/motorista/trips/:id/finalizar"}, "fullDescription": {"text": "`src/addons/gestao_backend/routes/motorista.js` declares `PUT /app/motorista/trips/:id/finalizar` 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-42799e7514c17472", "name": "Unused endpoint: POST /app/motorista/refuelings", "shortDescription": {"text": "Unused endpoint: POST /app/motorista/refuelings"}, "fullDescription": {"text": "`src/addons/gestao_backend/routes/motorista.js` declares `POST /app/motorista/refuelings` 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-435439750000853d", "name": "Unused endpoint: GET /app/motorista/profile", "shortDescription": {"text": "Unused endpoint: GET /app/motorista/profile"}, "fullDescription": {"text": "`src/addons/gestao_backend/routes/motorista.js` declares `GET /app/motorista/profile` 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-39ae2c0a06871fb4", "name": "Unused endpoint: POST /app/motorista/upload", "shortDescription": {"text": "Unused endpoint: POST /app/motorista/upload"}, "fullDescription": {"text": "`src/addons/gestao_backend/routes/motorista.js` declares `POST /app/motorista/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-84186ca4e58c6f4d", "name": "Unused endpoint: GET /api/reports/route", "shortDescription": {"text": "Unused endpoint: GET /api/reports/route"}, "fullDescription": {"text": "`src/addons/gestao_backend/routes/misc.js` declares `GET /api/reports/route` 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-4314af11d66bb15a", "name": "Unused endpoint: GET /gestao/abastecimentos/image/:filename", "shortDescription": {"text": "Unused endpoint: GET /gestao/abastecimentos/image/:filename"}, "fullDescription": {"text": "`src/addons/gestao_backend/routes/misc.js` declares `GET /gestao/abastecimentos/image/:filename` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-af138ed041178f7b", "name": "Unused endpoint: GET /gestao/uploads/:filename", "shortDescription": {"text": "Unused endpoint: GET /gestao/uploads/:filename"}, "fullDescription": {"text": "`src/addons/gestao_backend/routes/misc.js` declares `GET /gestao/uploads/:filename` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ec57f33b2cabe7a0", "name": "Unused endpoint: GET /gestao/maintenances", "shortDescription": {"text": "Unused endpoint: GET /gestao/maintenances"}, "fullDescription": {"text": "`src/addons/gestao_backend/routes/maintenances.js` declares `GET /gestao/maintenances` 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-588f1f3d0a8c5af3", "name": "Unused endpoint: POST /gestao/maintenances", "shortDescription": {"text": "Unused endpoint: POST /gestao/maintenances"}, "fullDescription": {"text": "`src/addons/gestao_backend/routes/maintenances.js` declares `POST /gestao/maintenances` 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-1bffd8c6e3b781f1", "name": "Unused endpoint: PUT /gestao/maintenances/:id", "shortDescription": {"text": "Unused endpoint: PUT /gestao/maintenances/:id"}, "fullDescription": {"text": "`src/addons/gestao_backend/routes/maintenances.js` declares `PUT /gestao/maintenances/: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-c5f82966857b0aab", "name": "Unused endpoint: DELETE /gestao/maintenances/:id", "shortDescription": {"text": "Unused endpoint: DELETE /gestao/maintenances/:id"}, "fullDescription": {"text": "`src/addons/gestao_backend/routes/maintenances.js` declares `DELETE /gestao/maintenances/: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-85c316a21df7d907", "name": "Unused endpoint: POST /gestao/refuelings", "shortDescription": {"text": "Unused endpoint: POST /gestao/refuelings"}, "fullDescription": {"text": "`src/addons/gestao_backend/routes/refuelings.js` declares `POST /gestao/refuelings` 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/24430"}, "properties": {"repository": "Azaz3lfall/traccarFull", "repoUrl": "https://github.com/Azaz3lfall/traccarFull", "branch": "main"}, "results": [{"ruleId": "scanner-4c3c63c2928142ed", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/sync_full_system.js:23"}, "properties": {"repobilityId": "224fb21f78d01949", "scanner": "scanner-primary", "fingerprint": "4c3c63c2928142ed", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3d2928f26cc751ed", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/ErrorBoundary.jsx:22"}, "properties": {"repobilityId": "7f0862efe90a8103", "scanner": "scanner-primary", "fingerprint": "3d2928f26cc751ed", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-7f82abc2ef914eeb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/other/gestao/GestaoPageModular.jsx:54"}, "properties": {"repobilityId": "6e44a05b12958426", "scanner": "scanner-primary", "fingerprint": "7f82abc2ef914eeb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5ca7f720cb9ad0c8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/other/gestao/utils/testApi.js:5"}, "properties": {"repobilityId": "15c15b877fd782f9", "scanner": "scanner-primary", "fingerprint": "5ca7f720cb9ad0c8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4fbf7643bff959a0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/other/gestao/utils/testAuth.js:3"}, "properties": {"repobilityId": "0f4b13a99c82597e", "scanner": "scanner-primary", "fingerprint": "4fbf7643bff959a0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3890189b94f5bb97", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/other/gestao/utils/authManager.js:15"}, "properties": {"repobilityId": "8e65d6d6f8955e97", "scanner": "scanner-primary", "fingerprint": "3890189b94f5bb97", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ba376c10fc20a547", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/other/gestao/utils/formatters.js:15"}, "properties": {"repobilityId": "3b89a7842923230b", "scanner": "scanner-primary", "fingerprint": "ba376c10fc20a547", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c8d3b4c0097c12e0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/other/gestao/utils/authDiagnostic.js:3"}, "properties": {"repobilityId": "2db3126c568e7262", "scanner": "scanner-primary", "fingerprint": "c8d3b4c0097c12e0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6bdd1d1ff20d548f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/other/gestao/hooks/useGestaoData.js:38"}, "properties": {"repobilityId": "1406a03cf068b9c8", "scanner": "scanner-primary", "fingerprint": "6bdd1d1ff20d548f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6d264779caa2cdf7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/other/gestao/hooks/useRefuels.js:93"}, "properties": {"repobilityId": "d340d1c18cdca81b", "scanner": "scanner-primary", "fingerprint": "6d264779caa2cdf7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-51b631df389ddf6f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/other/gestao/components/DriversTab.jsx:142"}, "properties": {"repobilityId": "466a5e9811a1df0a", "scanner": "scanner-primary", "fingerprint": "51b631df389ddf6f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7d12cdd582cdc0b7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/other/gestao/components/DebugTab.jsx:76"}, "properties": {"repobilityId": "89f2ef31ea9e20e0", "scanner": "scanner-primary", "fingerprint": "7d12cdd582cdc0b7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c694aaa90941443a", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/other/gestao/components/ExtraCostsTab.jsx:423"}, "properties": {"repobilityId": "e2f5fc4ec1c48d15", "scanner": "scanner-primary", "fingerprint": "c694aaa90941443a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-f29671bd473071be", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/other/gestao/components/ExtraCostsTab.jsx:76"}, "properties": {"repobilityId": "7f8f4c3f2b32cf66", "scanner": "scanner-primary", "fingerprint": "f29671bd473071be", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6300820eac1128ed", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/other/gestao/components/RefuelsTab.jsx:74"}, "properties": {"repobilityId": "7d48553ac970fedc", "scanner": "scanner-primary", "fingerprint": "6300820eac1128ed", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e52c434e2bc88b31", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/other/gestao/components/ReportsTab.jsx:96"}, "properties": {"repobilityId": "9b180c195718152f", "scanner": "scanner-primary", "fingerprint": "e52c434e2bc88b31", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-41556becd4e68273", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/other/gestao/components/AuthStatusIndicator.jsx:28"}, "properties": {"repobilityId": "acb3a1261ac2f718", "scanner": "scanner-primary", "fingerprint": "41556becd4e68273", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3650fa65993032f1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/other/gestao/components/MaintenancesTab.jsx:74"}, "properties": {"repobilityId": "3d1094e98b3165c2", "scanner": "scanner-primary", "fingerprint": "3650fa65993032f1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-20f95fe3fcb00573", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/other/gestao/components/RefuelingReportsTab.jsx:50"}, "properties": {"repobilityId": "c2d96461b07f58ff", "scanner": "scanner-primary", "fingerprint": "20f95fe3fcb00573", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ef9b899bb061554d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/other/gestao/components/AuthDiagnostic.jsx:46"}, "properties": {"repobilityId": "44b3068bb67d5a81", "scanner": "scanner-primary", "fingerprint": "ef9b899bb061554d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d6792885f853dee8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/ModernDeviceList.jsx:172"}, "properties": {"repobilityId": "d7555bffefa21a35", "scanner": "scanner-primary", "fingerprint": "d6792885f853dee8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-511913049bf006ba", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/FloatingStatusCard.jsx:368"}, "properties": {"repobilityId": "298846581c6b6834", "scanner": "scanner-primary", "fingerprint": "511913049bf006ba", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d0d98998045b333b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/FloatingResellersPopover.jsx:278"}, "properties": {"repobilityId": "ae5d507e10145c7b", "scanner": "scanner-primary", "fingerprint": "d0d98998045b333b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2c4884826df2dc6d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/FloatingDeviceList.jsx:2525"}, "properties": {"repobilityId": "0f9ee395341e14c8", "scanner": "scanner-primary", "fingerprint": "2c4884826df2dc6d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b7d3cceaa2bd278b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/ModernMainPage.jsx:220"}, "properties": {"repobilityId": "07be0484183339d2", "scanner": "scanner-primary", "fingerprint": "b7d3cceaa2bd278b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-368dc53f4c029357", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/FloatingReportsPopover.jsx:1145"}, "properties": {"repobilityId": "6024a04bd3ff99e4", "scanner": "scanner-primary", "fingerprint": "368dc53f4c029357", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f3b81981d7a2be28", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/FloatingDevicesPopover.jsx:292"}, "properties": {"repobilityId": "2b538633b1df8ed6", "scanner": "scanner-primary", "fingerprint": "f3b81981d7a2be28", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c8397960f99be3b6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/addons/gestao_backend/server.js:83"}, "properties": {"repobilityId": "f6a8f0b5dba80f7f", "scanner": "scanner-primary", "fingerprint": "c8397960f99be3b6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f05a41b37825055c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/addons/gestao_backend/schedulers/doorPush.js:156"}, "properties": {"repobilityId": "2401bb5719bf7816", "scanner": "scanner-primary", "fingerprint": "f05a41b37825055c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0c5bfc99e478a69f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/addons/gestao_backend/schedulers/commandEventMonitor.js:109"}, "properties": {"repobilityId": "e33d58bb8898f16a", "scanner": "scanner-primary", "fingerprint": "0c5bfc99e478a69f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-add4ee1b72fc223b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/addons/gestao_backend/schedulers/routeBlockMonitor.js:207"}, "properties": {"repobilityId": "1391f23fe1354ec7", "scanner": "scanner-primary", "fingerprint": "add4ee1b72fc223b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9e973b38cbe9b306", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/addons/gestao_backend/schedulers/j16DoorMonitor.js:76"}, "properties": {"repobilityId": "425a78fae6e3ff5d", "scanner": "scanner-primary", "fingerprint": "9e973b38cbe9b306", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-be99121513401847", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/addons/gestao_backend/schedulers/commandScheduler.js:151"}, "properties": {"repobilityId": "5c350898411177dc", "scanner": "scanner-primary", "fingerprint": "be99121513401847", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-aa31de8d361f4bdf", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/addons/tags/tag.js:35"}, "properties": {"repobilityId": "bce30764d1dac462", "scanner": "scanner-primary", "fingerprint": "aa31de8d361f4bdf", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c0db1546eeb8a21c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/addons/traccar_wrapper/db/index.js:46"}, "properties": {"repobilityId": "dc0179b24577e100", "scanner": "scanner-primary", "fingerprint": "c0db1546eeb8a21c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6a44f3ca5249fdd7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/addons/traccar_wrapper/db/migrate_consolidate_users.js:36"}, "properties": {"repobilityId": "f863a3ea2c97daf4", "scanner": "scanner-primary", "fingerprint": "6a44f3ca5249fdd7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-846547d834ed3e4f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/addons/traccar_wrapper/core/core.js:47"}, "properties": {"repobilityId": "5c8d95649a2c717a", "scanner": "scanner-primary", "fingerprint": "846547d834ed3e4f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a9887f3f6434045e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/addons/telecom/scripts/syncDevicesToChips.js:75"}, "properties": {"repobilityId": "5b251364c89922b1", "scanner": "scanner-primary", "fingerprint": "a9887f3f6434045e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-52960d73498e0176", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/addons/telecom/scripts/verifyVoxterCredentials.js:20"}, "properties": {"repobilityId": "2dddb3a28525852e", "scanner": "scanner-primary", "fingerprint": "52960d73498e0176", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-314f15a74cec867a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/common/hooks/useFriendlyNotifications.js:53"}, "properties": {"repobilityId": "f90e8622d9875eee", "scanner": "scanner-primary", "fingerprint": "314f15a74cec867a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6160c020cf5321bb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/middleware/authMiddleware.js:15"}, "properties": {"repobilityId": "fd785761b75587ff", "scanner": "scanner-primary", "fingerprint": "6160c020cf5321bb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ffc436f88e67cb35", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/services/financialScheduler.js:117"}, "properties": {"repobilityId": "54616e0aaa0229d2", "scanner": "scanner-primary", "fingerprint": "ffc436f88e67cb35", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e5fbe1ffcfa992d3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/routes/traccarPermissions.js:42"}, "properties": {"repobilityId": "317546eed422e2f2", "scanner": "scanner-primary", "fingerprint": "e5fbe1ffcfa992d3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6ff94413eae4fe4d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/routes/fleetRoutes.js:17"}, "properties": {"repobilityId": "ee0710a35c005f95", "scanner": "scanner-primary", "fingerprint": "6ff94413eae4fe4d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-04c54436489e797c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/routes/gestaoRoutes.js:144"}, "properties": {"repobilityId": "24dfe067aa2be1b0", "scanner": "scanner-primary", "fingerprint": "04c54436489e797c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a4bdfb8c8b1ec67a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/routes/vehiclesRoutes.js:153"}, "properties": {"repobilityId": "ed4e6f19761821de", "scanner": "scanner-primary", "fingerprint": "a4bdfb8c8b1ec67a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f1082a771d7cc93b", "level": "warning", "message": {"text": "Privileged port 91 in use"}, "properties": {"repobilityId": "b7ec732454da1e68", "scanner": "scanner-primary", "fingerprint": "f1082a771d7cc93b", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/generate-dev-cert-with-ip.sh"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e78db4dfa161f722", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/SharedDevicePage.jsx:39"}, "properties": {"repobilityId": "39b8c5f8481f867d", "scanner": "scanner-primary", "fingerprint": "e78db4dfa161f722", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/SharedDevicePage.jsx"}, "region": {"startLine": 39}}}]}, {"ruleId": "scanner-65cb364792d2bdad", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/ErrorBoundary.jsx:22"}, "properties": {"repobilityId": "96cf5bf8430ef408", "scanner": "scanner-primary", "fingerprint": "65cb364792d2bdad", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/ErrorBoundary.jsx"}, "region": {"startLine": 22}}}]}, {"ruleId": "scanner-2cd981d8472baa08", "level": "error", "message": {"text": "Possible secret in src/other/gestao/components/DriverCreateModal.jsx"}, "properties": {"repobilityId": "c14c91405b20e7d7", "scanner": "scanner-primary", "fingerprint": "2cd981d8472baa08", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/other/gestao/components/DriverCreateModal.jsx"}, "region": {"startLine": 125}}}]}, {"ruleId": "scanner-2cd981d8472baa08", "level": "error", "message": {"text": "Possible secret in src/other/gestao/components/DriverCreateModal.jsx"}, "properties": {"repobilityId": "c14c91405b20e7d7", "scanner": "scanner-primary", "fingerprint": "2cd981d8472baa08", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/other/gestao/components/DriverCreateModal.jsx"}, "region": {"startLine": 194}}}]}, {"ruleId": "scanner-6ceb885a50058021", "level": "error", "message": {"text": "Possible secret in src/other/gestao/components/DriverCompleteModal.jsx"}, "properties": {"repobilityId": "7c15155f81f7ce65", "scanner": "scanner-primary", "fingerprint": "6ceb885a50058021", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/other/gestao/components/DriverCompleteModal.jsx"}, "region": {"startLine": 134}}}]}, {"ruleId": "scanner-6ceb885a50058021", "level": "error", "message": {"text": "Possible secret in src/other/gestao/components/DriverCompleteModal.jsx"}, "properties": {"repobilityId": "7c15155f81f7ce65", "scanner": "scanner-primary", "fingerprint": "6ceb885a50058021", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/other/gestao/components/DriverCompleteModal.jsx"}, "region": {"startLine": 197}}}]}, {"ruleId": "scanner-b55d229f3c6a3726", "level": "error", "message": {"text": "Insecure pattern 'new_function_used' in src/components/FloatingDataAnalyticsPopover.jsx:1744"}, "properties": {"repobilityId": "074ae7bfd02f8e86", "scanner": "scanner-primary", "fingerprint": "b55d229f3c6a3726", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "new_function_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/FloatingDataAnalyticsPopover.jsx"}, "region": {"startLine": 1744}}}]}, {"ruleId": "scanner-4aefd2229ae7c86f", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/FloatingDataAnalyticsPopover.jsx:852"}, "properties": {"repobilityId": "761eec40f9bb3ee9", "scanner": "scanner-primary", "fingerprint": "4aefd2229ae7c86f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/FloatingDataAnalyticsPopover.jsx"}, "region": {"startLine": 852}}}]}, {"ruleId": "scanner-7324e3fb3ef6bbe2", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in src/addons/rbac/rbacServer.mjs:28"}, "properties": {"repobilityId": "8b22a3ecb7ce5ed4", "scanner": "scanner-primary", "fingerprint": "7324e3fb3ef6bbe2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/addons/rbac/rbacServer.mjs"}, "region": {"startLine": 28}}}]}, {"ruleId": "scanner-eeab658b075825d8", "level": "error", "message": {"text": "Possible secret in src/addons/gestao_backend/schedulers/commandEventMonitor.js"}, "properties": {"repobilityId": "28c0b84ca5e8348e", "scanner": "scanner-primary", "fingerprint": "eeab658b075825d8", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/addons/gestao_backend/schedulers/commandEventMonitor.js"}, "region": {"startLine": 39}}}]}, {"ruleId": "scanner-54c5d4363af8b899", "level": "error", "message": {"text": "Possible secret in src/addons/gestao_backend/schedulers/j16DoorMonitor.js"}, "properties": {"repobilityId": "8bade04d36d4dc65", "scanner": "scanner-primary", "fingerprint": "54c5d4363af8b899", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/addons/gestao_backend/schedulers/j16DoorMonitor.js"}, "region": {"startLine": 51}}}]}, {"ruleId": "scanner-9f980ff9269b9152", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in src/addons/jtt-server/jtt-server.mjs:6"}, "properties": {"repobilityId": "de8ccb57adf05a69", "scanner": "scanner-primary", "fingerprint": "9f980ff9269b9152", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/addons/jtt-server/jtt-server.mjs"}, "region": {"startLine": 6}}}]}, {"ruleId": "scanner-2cbbb6760679a254", "level": "error", "message": {"text": "Possible secret in src/addons/tags/tags.mjs"}, "properties": {"repobilityId": "794ac5fd82998790", "scanner": "scanner-primary", "fingerprint": "2cbbb6760679a254", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/addons/tags/tags.mjs"}, "region": {"startLine": 7}}}]}, {"ruleId": "scanner-92efbf134fa6cddc", "level": "error", "message": {"text": "Possible secret in src/addons/tags/tag.js"}, "properties": {"repobilityId": "71c7fcf7d0eef2ef", "scanner": "scanner-primary", "fingerprint": "92efbf134fa6cddc", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/addons/tags/tag.js"}, "region": {"startLine": 3}}}]}, {"ruleId": "scanner-a2b6a60bfadec2dc", "level": "error", "message": {"text": "Possible secret in src/addons/reseller/resellersServer.mjs"}, "properties": {"repobilityId": "1026d19dfc9a417d", "scanner": "scanner-primary", "fingerprint": "a2b6a60bfadec2dc", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/addons/reseller/resellersServer.mjs"}, "region": {"startLine": 134}}}]}, {"ruleId": "scanner-f1024b01426ecf7b", "level": "error", "message": {"text": "Insecure pattern 'exec_used' in src/addons/reseller/resellersServer.mjs:2235"}, "properties": {"repobilityId": "c98bfa309ba236d4", "scanner": "scanner-primary", "fingerprint": "f1024b01426ecf7b", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "exec_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/addons/reseller/resellersServer.mjs"}, "region": {"startLine": 2235}}}]}, {"ruleId": "scanner-59b3c0e41dbe69a6", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in src/addons/reseller/resellersServer.mjs:11"}, "properties": {"repobilityId": "df28fac8a21a964b", "scanner": "scanner-primary", "fingerprint": "59b3c0e41dbe69a6", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/addons/reseller/resellersServer.mjs"}, "region": {"startLine": 11}}}]}, {"ruleId": "scanner-8576d7a8de1be77d", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in src/addons/reseller/resellersServer.mjs:671"}, "properties": {"repobilityId": "30cc7914466a72fc", "scanner": "scanner-primary", "fingerprint": "8576d7a8de1be77d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/addons/reseller/resellersServer.mjs"}, "region": {"startLine": 671}}}]}, {"ruleId": "scanner-df806312cdc2faef", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in src/addons/traccar_wrapper/core/core.js:26"}, "properties": {"repobilityId": "bc3f01deaaa896e3", "scanner": "scanner-primary", "fingerprint": "df806312cdc2faef", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/addons/traccar_wrapper/core/core.js"}, "region": {"startLine": 26}}}]}, {"ruleId": "scanner-f57f5c51d372ac32", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in src/addons/dataAnalytics/dataAnalyticsServer.mjs:50"}, "properties": {"repobilityId": "082d4dce93e33238", "scanner": "scanner-primary", "fingerprint": "f57f5c51d372ac32", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/addons/dataAnalytics/dataAnalyticsServer.mjs"}, "region": {"startLine": 50}}}]}, {"ruleId": "scanner-08473fac32a0ab1d", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in src/common/components/NativeInterface.js:66"}, "properties": {"repobilityId": "58236a3be3769497", "scanner": "scanner-primary", "fingerprint": "08473fac32a0ab1d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/common/components/NativeInterface.js"}, "region": {"startLine": 66}}}]}, {"ruleId": "scanner-f320c9f474444d90", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/j16-door-status.js:62"}, "properties": {"repobilityId": "90fb5f408418e3e3", "scanner": "scanner-primary", "fingerprint": "f320c9f474444d90", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/j16-door-status.js"}, "region": {"startLine": 62}}}]}, {"ruleId": "scanner-e599726a5f9a5e50", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "29b380efc8a91cf6", "scanner": "scanner-primary", "fingerprint": "e599726a5f9a5e50", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy___.yml"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-043b8412ab96fec9", "level": "note", "message": {"text": "Very large file: src/main/MainPage.jsx (5017 lines)"}, "properties": {"repobilityId": "2eef8e637b1aa47f", "scanner": "scanner-primary", "fingerprint": "043b8412ab96fec9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-9a30789a827ab6af", "level": "note", "message": {"text": "Very large file: src/other/HistoryPanel.jsx (1810 lines)"}, "properties": {"repobilityId": "71768e3b24849843", "scanner": "scanner-primary", "fingerprint": "9a30789a827ab6af", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b7c4b1cde88fccbf", "level": "note", "message": {"text": "Very large file: src/components/FloatingStatusCard.jsx (10831 lines)"}, "properties": {"repobilityId": "99d7c0aff6993963", "scanner": "scanner-primary", "fingerprint": "b7c4b1cde88fccbf", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-1de92645954e5875", "level": "note", "message": {"text": "Very large file: src/components/FloatingResellersPopover.jsx (5412 lines)"}, "properties": {"repobilityId": "ae47d7528ec44f13", "scanner": "scanner-primary", "fingerprint": "1de92645954e5875", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-0cb618910c17ec65", "level": "note", "message": {"text": "Very large file: src/components/FloatingDeviceList.jsx (3724 lines)"}, "properties": {"repobilityId": "151f6dff1e62f655", "scanner": "scanner-primary", "fingerprint": "0cb618910c17ec65", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-87bac363b2e15ae0", "level": "note", "message": {"text": "Very large file: src/components/FloatingDataAnalyticsPopover.jsx (4880 lines)"}, "properties": {"repobilityId": "fd6a904bab6e5e63", "scanner": "scanner-primary", "fingerprint": "87bac363b2e15ae0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-67d6ea9e225474b7", "level": "note", "message": {"text": "Very large file: src/components/UserManagementPopover.jsx (2832 lines)"}, "properties": {"repobilityId": "dd83d85310bb565e", "scanner": "scanner-primary", "fingerprint": "67d6ea9e225474b7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-1a519539e32194c7", "level": "note", "message": {"text": "Very large file: src/components/FloatingReportsPopover.jsx (3946 lines)"}, "properties": {"repobilityId": "0538bc585113587d", "scanner": "scanner-primary", "fingerprint": "1a519539e32194c7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-fa354671255d13fc", "level": "note", "message": {"text": "Very large file: src/components/FloatingCalendarsPopover.jsx (1724 lines)"}, "properties": {"repobilityId": "a776a9e6a67e8f52", "scanner": "scanner-primary", "fingerprint": "fa354671255d13fc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-0b86647a00eb2712", "level": "note", "message": {"text": "Very large file: src/components/FloatingComputedAttributesPopover.jsx (1207 lines)"}, "properties": {"repobilityId": "e5986ef039ba977a", "scanner": "scanner-primary", "fingerprint": "0b86647a00eb2712", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d7dc054f5bff5e68", "level": "note", "message": {"text": "Very large file: src/components/FloatingDevicesPopover.jsx (2727 lines)"}, "properties": {"repobilityId": "05fdf8abf755b540", "scanner": "scanner-primary", "fingerprint": "d7dc054f5bff5e68", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-374bd3fdfa149cc8", "level": "note", "message": {"text": "Very large file: src/components/FloatingGeofencesPopover.jsx (3828 lines)"}, "properties": {"repobilityId": "f185810bc88faef5", "scanner": "scanner-primary", "fingerprint": "374bd3fdfa149cc8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-589512e0d2b1e5a9", "level": "note", "message": {"text": "Very large file: src/components/FloatingNotificationsPopover.jsx (1305 lines)"}, "properties": {"repobilityId": "006638cf46ba7a90", "scanner": "scanner-primary", "fingerprint": "589512e0d2b1e5a9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-176e94330a27a711", "level": "note", "message": {"text": "Very large file: src/components/fleet/FleetVehicleCard.jsx (1385 lines)"}, "properties": {"repobilityId": "63b14d85bf120c88", "scanner": "scanner-primary", "fingerprint": "176e94330a27a711", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-1b0394da57a0fb27", "level": "note", "message": {"text": "Very large file: src/settings/FinancialPage.jsx (1072 lines)"}, "properties": {"repobilityId": "52c1effa75604def", "scanner": "scanner-primary", "fingerprint": "1b0394da57a0fb27", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c7af8ba640b202ec", "level": "note", "message": {"text": "Very large file: src/settings/components/VehicleDetailsModal.jsx (1836 lines)"}, "properties": {"repobilityId": "1f340a8fad9e90f4", "scanner": "scanner-primary", "fingerprint": "c7af8ba640b202ec", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-13d58a19a1fac8fc", "level": "note", "message": {"text": "Very large file: src/addons/jtt-server/jtt-server.mjs (2574 lines)"}, "properties": {"repobilityId": "b7a0b4f800c1116a", "scanner": "scanner-primary", "fingerprint": "13d58a19a1fac8fc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-7dda0191fe4fea66", "level": "note", "message": {"text": "Very large file: src/addons/reseller/resellersServer.mjs (4086 lines)"}, "properties": {"repobilityId": "a6eac5ac222bb923", "scanner": "scanner-primary", "fingerprint": "7dda0191fe4fea66", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-bc9ff4e31e8db492", "level": "note", "message": {"text": "Very large file: src/routes/financialRoutes.js (1520 lines)"}, "properties": {"repobilityId": "25150492801369be", "scanner": "scanner-primary", "fingerprint": "bc9ff4e31e8db492", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-1e8f3cb1c48c95a2", "level": "note", "message": {"text": "Very large file: src/routes/vehiclesRoutes.js (1454 lines)"}, "properties": {"repobilityId": "ff16f8c73447c87b", "scanner": "scanner-primary", "fingerprint": "1e8f3cb1c48c95a2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6893a6c8b0861585", "level": "warning", "message": {"text": "Very low test-to-source ratio"}, "properties": {"repobilityId": "54a7de3f06314bf0", "scanner": "scanner-primary", "fingerprint": "6893a6c8b0861585", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "coverage"]}}, {"ruleId": "scanner-2a85ecf3f5d29543", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: src/addons/rbac/package.json"}, "properties": {"repobilityId": "0ef67f3d6e8eaf4f", "scanner": "scanner-primary", "fingerprint": "2a85ecf3f5d29543", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/addons/rbac/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d71d15bf7464f200", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: src/addons/jtt-server/package.json"}, "properties": {"repobilityId": "2a7d0b19815df5a9", "scanner": "scanner-primary", "fingerprint": "d71d15bf7464f200", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/addons/jtt-server/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-07e59c1532ca616e", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: src/addons/dataAnalytics/package.json"}, "properties": {"repobilityId": "0988585a5dc39f35", "scanner": "scanner-primary", "fingerprint": "07e59c1532ca616e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/addons/dataAnalytics/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "5b2d4eba5e3d7cc9", "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": "a742a7b5a450b1fa", "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": "7382333a103251e8", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-11825279136b53a3", "level": "warning", "message": {"text": "CI is configured but no tests are detected"}, "properties": {"repobilityId": "f817fab497b938fe", "scanner": "scanner-primary", "fingerprint": "11825279136b53a3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "ci", "config-theater", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "note", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "525ea518228430ea", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-9ea1c49db01041b7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/Navigation.jsx:106"}, "properties": {"repobilityId": "f4f27964c484c734", "scanner": "scanner-primary", "fingerprint": "9ea1c49db01041b7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c2cba5ad8c2768a1", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/SocketController.jsx:86"}, "properties": {"repobilityId": "2763770c6b18f057", "scanner": "scanner-primary", "fingerprint": "c2cba5ad8c2768a1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7fa06c7c8b15524f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/SocketController.jsx:154"}, "properties": {"repobilityId": "f4c992cd01d9caf6", "scanner": "scanner-primary", "fingerprint": "7fa06c7c8b15524f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ac316080d4146f50", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/UpdateController.jsx:28"}, "properties": {"repobilityId": "43727e119b6d2a95", "scanner": "scanner-primary", "fingerprint": "ac316080d4146f50", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9ae813917af2e115", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/App.jsx:53"}, "properties": {"repobilityId": "dbdd68a6d4fbea2a", "scanner": "scanner-primary", "fingerprint": "9ae813917af2e115", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-adfbf9015886489d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/main/MainPage.jsx:316"}, "properties": {"repobilityId": "18df40606621702d", "scanner": "scanner-primary", "fingerprint": "adfbf9015886489d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cd077004ea14f3c6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/main/hooks/useServerData.js:11"}, "properties": {"repobilityId": "00362cae6745b832", "scanner": "scanner-primary", "fingerprint": "cd077004ea14f3c6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d0591c6192160766", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/main/hooks/usePreferencesDrawer.js:58"}, "properties": {"repobilityId": "30572747507e5950", "scanner": "scanner-primary", "fingerprint": "d0591c6192160766", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-644de189f48c05fd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/map/MapRoutePath.js:227"}, "properties": {"repobilityId": "57fc2cd352841978", "scanner": "scanner-primary", "fingerprint": "644de189f48c05fd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-47a57f18af1b0239", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/map/main/PoiMap.js:20"}, "properties": {"repobilityId": "544d5a5e93307d57", "scanner": "scanner-primary", "fingerprint": "47a57f18af1b0239", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fe46a7046b49e034", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/utils/cloudinary.js:94"}, "properties": {"repobilityId": "ce04617b9c7e27a0", "scanner": "scanner-primary", "fingerprint": "fe46a7046b49e034", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2771c49993d749c1", "level": "none", "message": {"text": "Commented-code block (12 lines) in src/other/gestao/GestaoPageModular.jsx:112"}, "properties": {"repobilityId": "38381fe6014f76b3", "scanner": "scanner-primary", "fingerprint": "2771c49993d749c1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0a566af4f8101684", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/other/gestao/GestaoPageModular.jsx:336"}, "properties": {"repobilityId": "480c46ef3234f470", "scanner": "scanner-primary", "fingerprint": "0a566af4f8101684", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-27581406dfa3206f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/other/gestao/utils/authManager.js:172"}, "properties": {"repobilityId": "bd3e2d30f583b5c1", "scanner": "scanner-primary", "fingerprint": "27581406dfa3206f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-67cc2a8f97fef19f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/other/gestao/hooks/useDrivers.js:216"}, "properties": {"repobilityId": "1eb523cde0acdfb7", "scanner": "scanner-primary", "fingerprint": "67cc2a8f97fef19f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a171400f0dff2a01", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/other/gestao/hooks/useMaintenances.js:36"}, "properties": {"repobilityId": "b4ae4d780d71fc78", "scanner": "scanner-primary", "fingerprint": "a171400f0dff2a01", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-575fcf23f8242ac4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/other/gestao/hooks/useGestaoData.js:79"}, "properties": {"repobilityId": "0500e675b9458a4b", "scanner": "scanner-primary", "fingerprint": "575fcf23f8242ac4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5ed19d864b69919b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/other/gestao/hooks/useRefuels.js:113"}, "properties": {"repobilityId": "6b6dab34082ce16d", "scanner": "scanner-primary", "fingerprint": "5ed19d864b69919b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2cb84b023470c709", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/other/gestao/hooks/useExtraCosts.js:35"}, "properties": {"repobilityId": "2b27be1faca5d738", "scanner": "scanner-primary", "fingerprint": "2cb84b023470c709", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-71c5c6353d5d0dff", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/FloatingStatusCard.jsx:3494"}, "properties": {"repobilityId": "3824d9963e735918", "scanner": "scanner-primary", "fingerprint": "71c5c6353d5d0dff", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a64cebe34d3afc1f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/FloatingStatusCard.jsx:458"}, "properties": {"repobilityId": "acd518bb93368353", "scanner": "scanner-primary", "fingerprint": "a64cebe34d3afc1f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c2a171a5d0793c65", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/FloatingResellersPopover.jsx:265"}, "properties": {"repobilityId": "fa84f804f1851ef2", "scanner": "scanner-primary", "fingerprint": "c2a171a5d0793c65", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2b6668556ec5a115", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/components/FloatingDataAnalyticsPopover.jsx:1735"}, "properties": {"repobilityId": "be5a032d8f595f0b", "scanner": "scanner-primary", "fingerprint": "2b6668556ec5a115", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1caf08b6ea3ac2ad", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/FloatingDataAnalyticsPopover.jsx:2783"}, "properties": {"repobilityId": "338a88582d85d768", "scanner": "scanner-primary", "fingerprint": "1caf08b6ea3ac2ad", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8347fd9b86c48b39", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/FloatingCalendarsPopover.jsx:161"}, "properties": {"repobilityId": "7c5b2ce89d207dbe", "scanner": "scanner-primary", "fingerprint": "8347fd9b86c48b39", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2d03400db789ed22", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/FloatingGroupsPopover.jsx:95"}, "properties": {"repobilityId": "be6c54033e064d77", "scanner": "scanner-primary", "fingerprint": "2d03400db789ed22", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f3eb05b4c0a4aecf", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/FloatingDevicesPopover.jsx:439"}, "properties": {"repobilityId": "7eeb4549fce38f3e", "scanner": "scanner-primary", "fingerprint": "f3eb05b4c0a4aecf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-414d6866ae7e176a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/FloatingGeofencesPopover.jsx:1235"}, "properties": {"repobilityId": "23243d9d2ae96dda", "scanner": "scanner-primary", "fingerprint": "414d6866ae7e176a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fb4979106ef4010d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/FloatingDriversPopover.jsx:64"}, "properties": {"repobilityId": "9357874ddd61a2e2", "scanner": "scanner-primary", "fingerprint": "fb4979106ef4010d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e7430f17388e1bbe", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/settings/PreferencesPage.jsx:85"}, "properties": {"repobilityId": "b217342d9de09015", "scanner": "scanner-primary", "fingerprint": "e7430f17388e1bbe", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-655123d85b0d69a5", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/addons/jtt-server/jtt-server.mjs:237"}, "properties": {"repobilityId": "75cf5f1875c2d757", "scanner": "scanner-primary", "fingerprint": "655123d85b0d69a5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-135859cdfa8758b8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/addons/jtt-server/jtt-server.mjs:2283"}, "properties": {"repobilityId": "543df538be350fe8", "scanner": "scanner-primary", "fingerprint": "135859cdfa8758b8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e25e46b96881d550", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/addons/tags/nanotag.mjs:107"}, "properties": {"repobilityId": "5e805d6945a29238", "scanner": "scanner-primary", "fingerprint": "e25e46b96881d550", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-223980525c17f4c0", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/addons/reseller/resellersServer.mjs:2524"}, "properties": {"repobilityId": "f9c0e9f3ab99ca0a", "scanner": "scanner-primary", "fingerprint": "223980525c17f4c0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4f4ab2ccca821e8f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/addons/telecom/scripts/syncDevicesToChips.js:33"}, "properties": {"repobilityId": "be65c588b3a87dd1", "scanner": "scanner-primary", "fingerprint": "4f4ab2ccca821e8f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-de1fb5ea06f39585", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/store/fleet.js:29"}, "properties": {"repobilityId": "4e8723fa76ccea70", "scanner": "scanner-primary", "fingerprint": "de1fb5ea06f39585", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c12abc5800ca3044", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/common/util/formatter.js:106"}, "properties": {"repobilityId": "028dba971c867123", "scanner": "scanner-primary", "fingerprint": "c12abc5800ca3044", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1babb7f199587d56", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/common/util/formatter.js:189"}, "properties": {"repobilityId": "3312e3f1100e2eec", "scanner": "scanner-primary", "fingerprint": "1babb7f199587d56", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-51bc4a551a2071ee", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/common/util/fetchOrThrow.js:2"}, "properties": {"repobilityId": "dc9c925471cf58cc", "scanner": "scanner-primary", "fingerprint": "51bc4a551a2071ee", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d74b45e129b6e5ab", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/common/components/BottomMenu.jsx:66"}, "properties": {"repobilityId": "dbbbbbade38bf274", "scanner": "scanner-primary", "fingerprint": "d74b45e129b6e5ab", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8804cae5633026e2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/config/resellersConfig.js:40"}, "properties": {"repobilityId": "5aba1ab6bfef2722", "scanner": "scanner-primary", "fingerprint": "8804cae5633026e2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-da83a1e34a99a7d8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/j16-door-status.js:336"}, "properties": {"repobilityId": "99595b621ca84a40", "scanner": "scanner-primary", "fingerprint": "da83a1e34a99a7d8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5f1465bfae94dfc4", "level": "warning", "message": {"text": "Frontend route `/briefing` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "properties": {"repobilityId": "6cac1c55cf8df00e", "scanner": "scanner-primary", "fingerprint": "5f1465bfae94dfc4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-8413fa727e45c75f", "level": "warning", "message": {"text": "Frontend route `/shared/:code` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "properties": {"repobilityId": "81111a1f7cf9347e", "scanner": "scanner-primary", "fingerprint": "8413fa727e45c75f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-00f74fa5b058b5b0", "level": "warning", "message": {"text": "Frontend route `position/:id` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "properties": {"repobilityId": "07c42710b0188253", "scanner": "scanner-primary", "fingerprint": "00f74fa5b058b5b0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-c8afba804ecb0410", "level": "warning", "message": {"text": "Frontend route `network/:positionId` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "properties": {"repobilityId": "40a26ba92d555fa0", "scanner": "scanner-primary", "fingerprint": "c8afba804ecb0410", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-16dc29bd4d7efe5e", "level": "warning", "message": {"text": "Frontend route `event/:id` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "properties": {"repobilityId": "3ffc1fe967b37d76", "scanner": "scanner-primary", "fingerprint": "16dc29bd4d7efe5e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-6e27ba41c71657a3", "level": "warning", "message": {"text": "Frontend route `replay` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "properties": {"repobilityId": "d27d325fc434cd85", "scanner": "scanner-primary", "fingerprint": "6e27ba41c71657a3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-27eccd3d4ab806ea", "level": "warning", "message": {"text": "Frontend route `stream` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "properties": {"repobilityId": "ddb56709fe510d31", "scanner": "scanner-primary", "fingerprint": "27eccd3d4ab806ea", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-75cd41b85a6242d3", "level": "warning", "message": {"text": "Frontend route `geofences` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "properties": {"repobilityId": "630829acfc524a4a", "scanner": "scanner-primary", "fingerprint": "75cd41b85a6242d3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-8f92f6fb56693e03", "level": "warning", "message": {"text": "Frontend route `emulator` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "properties": {"repobilityId": "e67cde75204aef75", "scanner": "scanner-primary", "fingerprint": "8f92f6fb56693e03", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-a3a58b792f79c1ef", "level": "warning", "message": {"text": "Frontend route `os` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "properties": {"repobilityId": "c6763a50c86932e5", "scanner": "scanner-primary", "fingerprint": "a3a58b792f79c1ef", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-7ef59054ce43148a", "level": "warning", "message": {"text": "Frontend route `meu-financeiro` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "properties": {"repobilityId": "0a2dcf007878afef", "scanner": "scanner-primary", "fingerprint": "7ef59054ce43148a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-aef811c685a0b472", "level": "warning", "message": {"text": "Frontend route `settings` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "properties": {"repobilityId": "ae19cf54f193e37f", "scanner": "scanner-primary", "fingerprint": "aef811c685a0b472", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-f5f2cb4f878fb059", "level": "warning", "message": {"text": "Frontend route `accumulators/:deviceId` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "properties": {"repobilityId": "1d2547e889acc5c1", "scanner": "scanner-primary", "fingerprint": "f5f2cb4f878fb059", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-b935a7a43067fcc4", "level": "warning", "message": {"text": "Frontend route `announcement` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "properties": {"repobilityId": "ac0477f37bbabedd", "scanner": "scanner-primary", "fingerprint": "b935a7a43067fcc4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-420457909f8662ba", "level": "warning", "message": {"text": "Frontend route `calendars` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "properties": {"repobilityId": "6b4b6ceb974982a9", "scanner": "scanner-primary", "fingerprint": "420457909f8662ba", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-ec2c493e2a340498", "level": "warning", "message": {"text": "Frontend route `calendar/:id` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "properties": {"repobilityId": "2f2253ab63be4b8a", "scanner": "scanner-primary", "fingerprint": "ec2c493e2a340498", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-0284647bae0a7d7e", "level": "warning", "message": {"text": "Frontend route `calendar` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "properties": {"repobilityId": "ef615e0357839229", "scanner": "scanner-primary", "fingerprint": "0284647bae0a7d7e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-fc7a6fe6822023fa", "level": "warning", "message": {"text": "Frontend route `commands` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "properties": {"repobilityId": "9fc9a06f258b761a", "scanner": "scanner-primary", "fingerprint": "fc7a6fe6822023fa", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-449d1d573ac098c7", "level": "warning", "message": {"text": "Frontend route `command/:id` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "properties": {"repobilityId": "949373103c8c0de9", "scanner": "scanner-primary", "fingerprint": "449d1d573ac098c7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-9895cf56ce77a3ba", "level": "warning", "message": {"text": "Frontend route `command` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "properties": {"repobilityId": "546a6971205925d5", "scanner": "scanner-primary", "fingerprint": "9895cf56ce77a3ba", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-f2b76a1ba414bf14", "level": "warning", "message": {"text": "Frontend route `attributes` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "properties": {"repobilityId": "5e5f3feeddb02f66", "scanner": "scanner-primary", "fingerprint": "f2b76a1ba414bf14", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-f59881b1dbc0ec5a", "level": "warning", "message": {"text": "Frontend route `attribute/:id` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "properties": {"repobilityId": "5a92f2e11ef0f763", "scanner": "scanner-primary", "fingerprint": "f59881b1dbc0ec5a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-88b6ba729bcadc0a", "level": "warning", "message": {"text": "Frontend route `attribute` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "properties": {"repobilityId": "5db95a69282fdd2d", "scanner": "scanner-primary", "fingerprint": "88b6ba729bcadc0a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-1155d6c40afbb5ee", "level": "warning", "message": {"text": "Frontend route `devices` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "properties": {"repobilityId": "fe3a5ebcf56cb6e4", "scanner": "scanner-primary", "fingerprint": "1155d6c40afbb5ee", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-3a7b0ce03ad5a6d3", "level": "warning", "message": {"text": "Frontend route `chips` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "properties": {"repobilityId": "f5b304e9e9d7f7d8", "scanner": "scanner-primary", "fingerprint": "3a7b0ce03ad5a6d3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-b04abac3a5da7a3a", "level": "warning", "message": {"text": "Frontend route `sms-templates` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "properties": {"repobilityId": "f1cca2d744e1b5fc", "scanner": "scanner-primary", "fingerprint": "b04abac3a5da7a3a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-a18c02d3c97c49e4", "level": "warning", "message": {"text": "Frontend route `financial` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "properties": {"repobilityId": "b7093d2e9b98b1e5", "scanner": "scanner-primary", "fingerprint": "a18c02d3c97c49e4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-1589e219d9002308", "level": "warning", "message": {"text": "Frontend route `device/:id/connections` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "properties": {"repobilityId": "d1d44d08dd5b28bc", "scanner": "scanner-primary", "fingerprint": "1589e219d9002308", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-2ceb4b2218a9c25d", "level": "warning", "message": {"text": "Frontend route `device/:id/command` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "properties": {"repobilityId": "364a59fcbd7f2081", "scanner": "scanner-primary", "fingerprint": "2ceb4b2218a9c25d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-332611c5d6f189b7", "level": "warning", "message": {"text": "Frontend route `device/:id/share` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "properties": {"repobilityId": "31951a528a03aaff", "scanner": "scanner-primary", "fingerprint": "332611c5d6f189b7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-ea4b0e33587281ba", "level": "warning", "message": {"text": "Frontend route `device/:id` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "properties": {"repobilityId": "df60e4b94ae34510", "scanner": "scanner-primary", "fingerprint": "ea4b0e33587281ba", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-ab78f30f2526cb77", "level": "warning", "message": {"text": "Frontend route `device` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "properties": {"repobilityId": "41380b6e957ab696", "scanner": "scanner-primary", "fingerprint": "ab78f30f2526cb77", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-1818d25c71b35b83", "level": "warning", "message": {"text": "Frontend route `drivers` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "properties": {"repobilityId": "44afb3855e3047c8", "scanner": "scanner-primary", "fingerprint": "1818d25c71b35b83", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-a1a1acce1a7cd11b", "level": "warning", "message": {"text": "Frontend route `driver/:id` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "properties": {"repobilityId": "64fbc95e85672ec9", "scanner": "scanner-primary", "fingerprint": "a1a1acce1a7cd11b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-572f635bdf4e6aff", "level": "warning", "message": {"text": "Frontend route `driver` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "properties": {"repobilityId": "0689beae1052356f", "scanner": "scanner-primary", "fingerprint": "572f635bdf4e6aff", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-35e90a306c21f16e", "level": "warning", "message": {"text": "Frontend route `geofence/:id` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "properties": {"repobilityId": "ec8ba23d39b1d63d", "scanner": "scanner-primary", "fingerprint": "35e90a306c21f16e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-1a5b90977814ab4c", "level": "warning", "message": {"text": "Frontend route `geofence` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "properties": {"repobilityId": "5949134d835aebd6", "scanner": "scanner-primary", "fingerprint": "1a5b90977814ab4c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-a9ae29e9f8c18768", "level": "warning", "message": {"text": "Frontend route `groups` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "properties": {"repobilityId": "5b5d86e4b5184175", "scanner": "scanner-primary", "fingerprint": "a9ae29e9f8c18768", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-93479f787b9752dd", "level": "warning", "message": {"text": "Frontend route `group/:id/connections` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "properties": {"repobilityId": "931a996ce298b119", "scanner": "scanner-primary", "fingerprint": "93479f787b9752dd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-9540d9275dcfe2f1", "level": "warning", "message": {"text": "Frontend route `group/:id/command` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "properties": {"repobilityId": "3d56442cde0a43ee", "scanner": "scanner-primary", "fingerprint": "9540d9275dcfe2f1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-31bd88c2e4bcc87e", "level": "warning", "message": {"text": "Frontend route `group/:id` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "properties": {"repobilityId": "fde28c68118687ba", "scanner": "scanner-primary", "fingerprint": "31bd88c2e4bcc87e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-2cf53f4109c330cd", "level": "warning", "message": {"text": "Frontend route `group` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "properties": {"repobilityId": "f22e1babd8ccd50b", "scanner": "scanner-primary", "fingerprint": "2cf53f4109c330cd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-d38b73f2e888542a", "level": "warning", "message": {"text": "Frontend route `maintenances` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "properties": {"repobilityId": "d1aa1dfefb7f92b9", "scanner": "scanner-primary", "fingerprint": "d38b73f2e888542a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-e51640a5bba3e3a9", "level": "warning", "message": {"text": "Frontend route `maintenance/:id` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "properties": {"repobilityId": "dfbbbad6da9d520f", "scanner": "scanner-primary", "fingerprint": "e51640a5bba3e3a9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-227fdf37f62a783b", "level": "warning", "message": {"text": "Frontend route `maintenance` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "properties": {"repobilityId": "4343dc7c1df49c4c", "scanner": "scanner-primary", "fingerprint": "227fdf37f62a783b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-8d38441660a6559d", "level": "warning", "message": {"text": "Frontend route `notifications` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "properties": {"repobilityId": "6c0a7fdb47d4a631", "scanner": "scanner-primary", "fingerprint": "8d38441660a6559d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-40c6d4f7522cc07b", "level": "warning", "message": {"text": "Frontend route `notification/:id` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "properties": {"repobilityId": "9deccf8b1950aae1", "scanner": "scanner-primary", "fingerprint": "40c6d4f7522cc07b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-5ee8bde30b798663", "level": "warning", "message": {"text": "Frontend route `notification` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "properties": {"repobilityId": "98e5da77e5572ce5", "scanner": "scanner-primary", "fingerprint": "5ee8bde30b798663", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-306ff64b0bc49b0b", "level": "warning", "message": {"text": "Frontend route `preferences` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "properties": {"repobilityId": "449acf310090ebd4", "scanner": "scanner-primary", "fingerprint": "306ff64b0bc49b0b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-922760e4262a1e51", "level": "warning", "message": {"text": "Frontend route `server` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "properties": {"repobilityId": "870d281bab14eda5", "scanner": "scanner-primary", "fingerprint": "922760e4262a1e51", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-04eb54f02b9efc43", "level": "warning", "message": {"text": "Frontend route `users` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "properties": {"repobilityId": "da10a953809c3aad", "scanner": "scanner-primary", "fingerprint": "04eb54f02b9efc43", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-bffd7772852cbaaf", "level": "warning", "message": {"text": "Frontend route `custom-users` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "properties": {"repobilityId": "e862e0da75e137dc", "scanner": "scanner-primary", "fingerprint": "bffd7772852cbaaf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-eec7acd65b4e07d7", "level": "warning", "message": {"text": "Frontend route `clients` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "properties": {"repobilityId": "3a028333d9708afe", "scanner": "scanner-primary", "fingerprint": "eec7acd65b4e07d7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-55447c45d9b48d6d", "level": "warning", "message": {"text": "Frontend route `user/:id/connections` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "properties": {"repobilityId": "0a66076da9502ca6", "scanner": "scanner-primary", "fingerprint": "55447c45d9b48d6d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-9fccebcf14dfc8ae", "level": "warning", "message": {"text": "Frontend route `user/:id` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "properties": {"repobilityId": "c431110be3148be4", "scanner": "scanner-primary", "fingerprint": "9fccebcf14dfc8ae", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-46e5465ae029edcf", "level": "warning", "message": {"text": "Frontend route `user` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "properties": {"repobilityId": "4f9847f1d5b91290", "scanner": "scanner-primary", "fingerprint": "46e5465ae029edcf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-91a19b53c45071c1", "level": "warning", "message": {"text": "Frontend route `reports` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "properties": {"repobilityId": "8d760800b94c516e", "scanner": "scanner-primary", "fingerprint": "91a19b53c45071c1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-16d30635487561e7", "level": "warning", "message": {"text": "Frontend route `combined` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "properties": {"repobilityId": "95e89238381dcf8f", "scanner": "scanner-primary", "fingerprint": "16d30635487561e7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-42c79ff57fc93b7f", "level": "warning", "message": {"text": "Frontend route `chart` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "properties": {"repobilityId": "a496c101fb75afbd", "scanner": "scanner-primary", "fingerprint": "42c79ff57fc93b7f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-62fafac4cfdd49c4", "level": "warning", "message": {"text": "Frontend route `events` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "properties": {"repobilityId": "a782db469d042b88", "scanner": "scanner-primary", "fingerprint": "62fafac4cfdd49c4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-5067db12c6bb6169", "level": "warning", "message": {"text": "Frontend route `route` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "properties": {"repobilityId": "6a1183152ccc9939", "scanner": "scanner-primary", "fingerprint": "5067db12c6bb6169", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-1818b16292ecee62", "level": "warning", "message": {"text": "Frontend route `stops` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "properties": {"repobilityId": "27107354e44c97df", "scanner": "scanner-primary", "fingerprint": "1818b16292ecee62", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-660c87453be99331", "level": "warning", "message": {"text": "Frontend route `summary` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "properties": {"repobilityId": "14a9e94abca86b83", "scanner": "scanner-primary", "fingerprint": "660c87453be99331", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-6483c77c6eced6a9", "level": "warning", "message": {"text": "Frontend route `trips` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "properties": {"repobilityId": "c9b43fbb0d979959", "scanner": "scanner-primary", "fingerprint": "6483c77c6eced6a9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-3caaf8c66b47ee6d", "level": "warning", "message": {"text": "Frontend route `scheduled` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "properties": {"repobilityId": "c0ba16509e8eb2ad", "scanner": "scanner-primary", "fingerprint": "3caaf8c66b47ee6d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-b64656ee7063fc0d", "level": "warning", "message": {"text": "Frontend route `statistics` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "properties": {"repobilityId": "d1a7c777be9e71ae", "scanner": "scanner-primary", "fingerprint": "b64656ee7063fc0d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-33fb0be5cbdebd92", "level": "warning", "message": {"text": "Frontend route `audit` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "properties": {"repobilityId": "cf3fdb7041df43e6", "scanner": "scanner-primary", "fingerprint": "33fb0be5cbdebd92", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-997b53ac59e4a2d0", "level": "warning", "message": {"text": "Frontend route `logs` has no Link/navigate to it \u2014 src/Navigation.jsx"}, "properties": {"repobilityId": "6883a826c4b65f39", "scanner": "scanner-primary", "fingerprint": "997b53ac59e4a2d0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-0dc3c82b0ecd1317", "level": "error", "message": {"text": "Dangling fetch: GET /api/server (src/ServerProvider.jsx:22)"}, "properties": {"repobilityId": "5f2dfdda77ce4a4d", "scanner": "scanner-primary", "fingerprint": "0dc3c82b0ecd1317", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-440bb28a025ff06e", "level": "error", "message": {"text": "Dangling fetch: GET /api/session?token=${encodeURIComponent(token)} (src/Navigation.jsx:106)"}, "properties": {"repobilityId": "5dd9e093ed11de23", "scanner": "scanner-primary", "fingerprint": "440bb28a025ff06e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-68a1eceea1ee97e6", "level": "error", "message": {"text": "Dangling fetch: GET /api/positions (src/SocketController.jsx:154)"}, "properties": {"repobilityId": "bd1b56906cb787dd", "scanner": "scanner-primary", "fingerprint": "68a1eceea1ee97e6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7b22a58ef93df4f7", "level": "error", "message": {"text": "Dangling fetch: GET /api/events/${eventId} (src/SocketController.jsx:215)"}, "properties": {"repobilityId": "4556a58748b7b52a", "scanner": "scanner-primary", "fingerprint": "7b22a58ef93df4f7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-783eba7c02a6adbf", "level": "error", "message": {"text": "Dangling fetch: GET /api/session (src/App.jsx:53)"}, "properties": {"repobilityId": "c11734b9f33c3fa2", "scanner": "scanner-primary", "fingerprint": "783eba7c02a6adbf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bd082fcd74ed33dd", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/session (src/main/MainPage.jsx:432)"}, "properties": {"repobilityId": "6fc20cb9cd6bfed9", "scanner": "scanner-primary", "fingerprint": "bd082fcd74ed33dd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-df9b114004b68f47", "level": "error", "message": {"text": "Dangling fetch: GET /api/server (src/main/hooks/useServerData.js:11)"}, "properties": {"repobilityId": "4bd2d13cd9f30d80", "scanner": "scanner-primary", "fingerprint": "df9b114004b68f47", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ff295285ebf5535f", "level": "error", "message": {"text": "Dangling fetch: POST /api/server/reboot (src/main/hooks/usePreferencesDrawer.js:58)"}, "properties": {"repobilityId": "a94057139f4adbed", "scanner": "scanner-primary", "fingerprint": "ff295285ebf5535f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-76cf9dd54c092b1d", "level": "error", "message": {"text": "Dangling fetch: POST /api/session (src/login/LoginPage.jsx:162)"}, "properties": {"repobilityId": "13d2774f6ec13879", "scanner": "scanner-primary", "fingerprint": "76cf9dd54c092b1d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7d6e994543c16bad", "level": "error", "message": {"text": "Dangling fetch: POST https://api.cloudinary.com/v1_1/${cloudName}/image/upload (src/utils/cloudinary.js:94)"}, "properties": {"repobilityId": "a17c3051ad38bc7e", "scanner": "scanner-primary", "fingerprint": "7d6e994543c16bad", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c57520fbefd4ae12", "level": "error", "message": {"text": "Dangling fetch: POST https://api.cloudinary.com/v1_1/${cloudName}/image/destroy (src/utils/cloudinary.js:167)"}, "properties": {"repobilityId": "f3991a98a828cdc4", "scanner": "scanner-primary", "fingerprint": "c57520fbefd4ae12", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-61ceeaf1f6c24781", "level": "error", "message": {"text": "Dangling fetch: GET /auth/user (src/other/gestao/utils/testApi.js:10)"}, "properties": {"repobilityId": "9a1aacc22133bb82", "scanner": "scanner-primary", "fingerprint": "61ceeaf1f6c24781", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0cccc27919206cb8", "level": "error", "message": {"text": "Dangling fetch: GET /api/session (src/other/gestao/utils/testAuth.js:7)"}, "properties": {"repobilityId": "6d95a3ad82748e3b", "scanner": "scanner-primary", "fingerprint": "0cccc27919206cb8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3b3bfbbef84efdae", "level": "error", "message": {"text": "Dangling fetch: GET /api/server (src/other/gestao/utils/authManager.js:18)"}, "properties": {"repobilityId": "73f2e77ea90b51df", "scanner": "scanner-primary", "fingerprint": "3b3bfbbef84efdae", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e6e798053d5681fd", "level": "error", "message": {"text": "Dangling fetch: GET /api/server (src/other/gestao/utils/authManager.js:45)"}, "properties": {"repobilityId": "2b93267d2f1c0fa0", "scanner": "scanner-primary", "fingerprint": "e6e798053d5681fd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e12c0edb732c62f6", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/session (src/other/gestao/utils/authManager.js:260)"}, "properties": {"repobilityId": "e63344b68075fbec", "scanner": "scanner-primary", "fingerprint": "e12c0edb732c62f6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8744c7024e9586d1", "level": "error", "message": {"text": "Dangling fetch: GET /api/session (src/other/gestao/utils/authDiagnostic.js:16)"}, "properties": {"repobilityId": "7200dde9740d441c", "scanner": "scanner-primary", "fingerprint": "8744c7024e9586d1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4c714f2999bad06f", "level": "error", "message": {"text": "Dangling fetch: POST /api/session (src/other/gestao/utils/authDiagnostic.js:127)"}, "properties": {"repobilityId": "f7050fced2f590e6", "scanner": "scanner-primary", "fingerprint": "4c714f2999bad06f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3557ec69a1d1621e", "level": "error", "message": {"text": "Dangling fetch: GET /api/vehicles/available-devices (src/other/os/utils/api.js:29)"}, "properties": {"repobilityId": "28619e0e6da60040", "scanner": "scanner-primary", "fingerprint": "3557ec69a1d1621e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-d900b003c19599a1", "level": "error", "message": {"text": "Dangling fetch: GET /api/vehicles/linked-devices (src/other/os/utils/api.js:31)"}, "properties": {"repobilityId": "072b341081004d36", "scanner": "scanner-primary", "fingerprint": "d900b003c19599a1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-24e718bb178e4320", "level": "error", "message": {"text": "Dangling fetch: POST /api/vehicles/upload (src/other/os/components/OSDashboard.jsx:349)"}, "properties": {"repobilityId": "213777c29f350457", "scanner": "scanner-primary", "fingerprint": "24e718bb178e4320", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-06d69fa87cf42d63", "level": "error", "message": {"text": "Dangling fetch: GET /api/positions?id=${position.id} (src/components/FloatingStatusCard.jsx:3350)"}, "properties": {"repobilityId": "df56c9061a3e9253", "scanner": "scanner-primary", "fingerprint": "06d69fa87cf42d63", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-790a55971a46772b", "level": "error", "message": {"text": "Dangling fetch: PUT /api/devices/${device.id} (src/components/FloatingStatusCard.jsx:3782)"}, "properties": {"repobilityId": "ccff4d3d8277c04e", "scanner": "scanner-primary", "fingerprint": "790a55971a46772b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a3a717250939b802", "level": "error", "message": {"text": "Dangling fetch: GET /api/devices/${device.id} (src/components/FloatingStatusCard.jsx:3798)"}, "properties": {"repobilityId": "9fe1d72ff4796844", "scanner": "scanner-primary", "fingerprint": "a3a717250939b802", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f185592405389571", "level": "error", "message": {"text": "Dangling fetch: PUT /api/devices/${device.id} (src/components/FloatingStatusCard.jsx:3901)"}, "properties": {"repobilityId": "eba5f57ce206968d", "scanner": "scanner-primary", "fingerprint": "f185592405389571", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-499f5504aeeafc7e", "level": "error", "message": {"text": "Dangling fetch: GET /api/devices/${device.id} (src/components/FloatingStatusCard.jsx:3919)"}, "properties": {"repobilityId": "2f3204381ac644d1", "scanner": "scanner-primary", "fingerprint": "499f5504aeeafc7e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-504c23b8fb86e681", "level": "error", "message": {"text": "Dangling fetch: PUT /api/devices/${device.id} (src/components/FloatingStatusCard.jsx:4059)"}, "properties": {"repobilityId": "c51278a03ac28494", "scanner": "scanner-primary", "fingerprint": "504c23b8fb86e681", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-60dc650c387e52b6", "level": "error", "message": {"text": "Dangling fetch: GET /api/server (src/components/UserManagementPopover.jsx:519)"}, "properties": {"repobilityId": "080d0ad29f942dd4", "scanner": "scanner-primary", "fingerprint": "60dc650c387e52b6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6599307083bbbd24", "level": "error", "message": {"text": "Dangling fetch: GET /api/list-files (src/components/ResellersPage.jsx:12)"}, "properties": {"repobilityId": "2d1367c1a47edb89", "scanner": "scanner-primary", "fingerprint": "6599307083bbbd24", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-91eecc65d91ae024", "level": "error", "message": {"text": "Dangling fetch: GET /api/calendars (src/components/FloatingCalendarsPopover.jsx:161)"}, "properties": {"repobilityId": "2642be4a7e2ed6d8", "scanner": "scanner-primary", "fingerprint": "91eecc65d91ae024", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-76bcc6856a6a6563", "level": "error", "message": {"text": "Dangling fetch: POST /api/calendars (src/components/FloatingCalendarsPopover.jsx:226)"}, "properties": {"repobilityId": "0fa0649c22c56df2", "scanner": "scanner-primary", "fingerprint": "76bcc6856a6a6563", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0e1041e7aa7590b4", "level": "error", "message": {"text": "Dangling fetch: PUT /api/calendars/${calendarData.id} (src/components/FloatingCalendarsPopover.jsx:252)"}, "properties": {"repobilityId": "11891f28013bf7ad", "scanner": "scanner-primary", "fingerprint": "0e1041e7aa7590b4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3b99a205f1a6abd6", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/calendars/${calendarId} (src/components/FloatingCalendarsPopover.jsx:278)"}, "properties": {"repobilityId": "6172ff576c83dbaa", "scanner": "scanner-primary", "fingerprint": "3b99a205f1a6abd6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9a5674e6bc9c9b0c", "level": "error", "message": {"text": "Dangling fetch: GET /api/groups (src/components/FloatingGroupsPopover.jsx:95)"}, "properties": {"repobilityId": "0436a3d93f9e7094", "scanner": "scanner-primary", "fingerprint": "9a5674e6bc9c9b0c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c36ad6bb7e22ffea", "level": "error", "message": {"text": "Dangling fetch: POST /api/groups (src/components/FloatingGroupsPopover.jsx:160)"}, "properties": {"repobilityId": "5f5777ba165cece9", "scanner": "scanner-primary", "fingerprint": "c36ad6bb7e22ffea", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9057637989721602", "level": "error", "message": {"text": "Dangling fetch: PUT /api/groups/${groupData.id} (src/components/FloatingGroupsPopover.jsx:189)"}, "properties": {"repobilityId": "28b3a0bb4d29d66c", "scanner": "scanner-primary", "fingerprint": "9057637989721602", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0409121b80e65108", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/groups/${groupId} (src/components/FloatingGroupsPopover.jsx:218)"}, "properties": {"repobilityId": "446be8e273b31611", "scanner": "scanner-primary", "fingerprint": "0409121b80e65108", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-413a43523c68f015", "level": "error", "message": {"text": "Dangling fetch: GET /api/drivers (src/components/FloatingDriversPopover.jsx:64)"}, "properties": {"repobilityId": "6ca9bc0fd903476b", "scanner": "scanner-primary", "fingerprint": "413a43523c68f015", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-02dbcb2e1f52c955", "level": "error", "message": {"text": "Dangling fetch: POST /api/drivers (src/components/FloatingDriversPopover.jsx:118)"}, "properties": {"repobilityId": "cda75368e06c0f87", "scanner": "scanner-primary", "fingerprint": "02dbcb2e1f52c955", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-85c5d80b846f15b3", "level": "error", "message": {"text": "Dangling fetch: POST /api/vehicles/upload (src/components/management/VehicleRegisterModal.jsx:182)"}, "properties": {"repobilityId": "f7d65f698132215c", "scanner": "scanner-primary", "fingerprint": "85c5d80b846f15b3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-061dfe8dbebdaa04", "level": "error", "message": {"text": "Dangling fetch: POST /api/session (src/components/fleet/FleetVehicleCard.jsx:457)"}, "properties": {"repobilityId": "47e31b26986c6e17", "scanner": "scanner-primary", "fingerprint": "061dfe8dbebdaa04", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-330548fe2fed9b27", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/session (src/settings/ClientFinancialPage.jsx:98)"}, "properties": {"repobilityId": "c56d297363283548", "scanner": "scanner-primary", "fingerprint": "330548fe2fed9b27", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-da9d3f29ebfa1119", "level": "error", "message": {"text": "Dangling fetch: POST /api/server/reboot (src/settings/PreferencesPage.jsx:85)"}, "properties": {"repobilityId": "9ae04bfad08d6faf", "scanner": "scanner-primary", "fingerprint": "da9d3f29ebfa1119", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d7cf08265d9a4107", "level": "error", "message": {"text": "Dangling fetch: GET /api/commands/types (src/settings/components/BaseCommandView.jsx:60)"}, "properties": {"repobilityId": "b62b07a307a26a06", "scanner": "scanner-primary", "fingerprint": "d7cf08265d9a4107", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d4eb9fa54b5e7d86", "level": "error", "message": {"text": "Dangling fetch: POST /api/vehicles/upload (src/settings/components/vehicles/VehicleFormDialog.jsx:188)"}, "properties": {"repobilityId": "297a1e48428cae52", "scanner": "scanner-primary", "fingerprint": "d4eb9fa54b5e7d86", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c29d681b9eeb9b35", "level": "error", "message": {"text": "Dangling fetch: POST https://oauth2.googleapis.com/token (src/addons/gestao_backend/schedulers/doorPush.js:58)"}, "properties": {"repobilityId": "b1a59ab839beba0d", "scanner": "scanner-primary", "fingerprint": "c29d681b9eeb9b35", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-91b3da149ad7e989", "level": "error", "message": {"text": "Dangling fetch: POST https://fcm.googleapis.com/v1/projects/${PROJECT_ID}/messages:send (src/addons/gestao_backend/schedulers/doorPush.js:73)"}, "properties": {"repobilityId": "1baeb45a1a796666", "scanner": "scanner-primary", "fingerprint": "91b3da149ad7e989", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-d402680d591b7b4d", "level": "error", "message": {"text": "Dangling fetch: POST http://localhost:8082/api/session (src/addons/gestao_backend/schedulers/j16DoorMonitor.js:70)"}, "properties": {"repobilityId": "b2de44bcc781dfd7", "scanner": "scanner-primary", "fingerprint": "d402680d591b7b4d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-667a1fbc93ccabe5", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:8082/api/devices?all=true (src/addons/gestao_backend/schedulers/j16DoorMonitor.js:85)"}, "properties": {"repobilityId": "3ab95b5ec5b963d8", "scanner": "scanner-primary", "fingerprint": "667a1fbc93ccabe5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-a3689c0c29f817dd", "level": "error", "message": {"text": "Dangling fetch: POST /api/session/token (src/common/components/NativeInterface.js:23)"}, "properties": {"repobilityId": "7f7ff023edaa5b77", "scanner": "scanner-primary", "fingerprint": "a3689c0c29f817dd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cbc24ca01305622f", "level": "error", "message": {"text": "Dangling fetch: PUT /api/users/${user.id} (src/common/components/BottomMenu.jsx:66)"}, "properties": {"repobilityId": "42d29cb0636a9df6", "scanner": "scanner-primary", "fingerprint": "cbc24ca01305622f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a9d639179bb0f1b1", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/session (src/common/components/BottomMenu.jsx:75)"}, "properties": {"repobilityId": "9b140487fcf18bd5", "scanner": "scanner-primary", "fingerprint": "a9d639179bb0f1b1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f468360344b9dd7b", "level": "error", "message": {"text": "Dangling fetch: GET /api/positions (public/j16-door-status.js:347)"}, "properties": {"repobilityId": "945a68183ec9e517", "scanner": "scanner-primary", "fingerprint": "f468360344b9dd7b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bd1bf89b901179e9", "level": "note", "message": {"text": "Unused endpoint: GET /work-orders"}, "properties": {"repobilityId": "6808def7253077af", "scanner": "scanner-primary", "fingerprint": "bd1bf89b901179e9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ca968b18012521c4", "level": "note", "message": {"text": "Unused endpoint: POST /work-orders"}, "properties": {"repobilityId": "ffbaf078f835056a", "scanner": "scanner-primary", "fingerprint": "ca968b18012521c4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b1bad868098ab933", "level": "note", "message": {"text": "Unused endpoint: POST /checklist"}, "properties": {"repobilityId": "e6f2f3d73e839338", "scanner": "scanner-primary", "fingerprint": "b1bad868098ab933", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-841e50bf821e4158", "level": "note", "message": {"text": "Unused endpoint: GET /users"}, "properties": {"repobilityId": "b5f03aa159d5fc27", "scanner": "scanner-primary", "fingerprint": "841e50bf821e4158", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0729b84d4e27d0b9", "level": "note", "message": {"text": "Unused endpoint: GET /clients"}, "properties": {"repobilityId": "107c307cbaaae5c0", "scanner": "scanner-primary", "fingerprint": "0729b84d4e27d0b9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-354ccc16f39b78dc", "level": "note", "message": {"text": "Unused endpoint: POST /toggle-technician"}, "properties": {"repobilityId": "cd95634a5661eee7", "scanner": "scanner-primary", "fingerprint": "354ccc16f39b78dc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-84d6e7b9cb92a93d", "level": "note", "message": {"text": "Unused endpoint: POST /api/permissions"}, "properties": {"repobilityId": "f765f9ea12516670", "scanner": "scanner-primary", "fingerprint": "84d6e7b9cb92a93d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-156c55785fe9553b", "level": "note", "message": {"text": "Unused endpoint: GET /work-orders/by-plate/:plate"}, "properties": {"repobilityId": "27b7770e5ceb5da9", "scanner": "scanner-primary", "fingerprint": "156c55785fe9553b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-acab89f98afc6c95", "level": "note", "message": {"text": "Unused endpoint: GET /work-orders/:id"}, "properties": {"repobilityId": "5602e01affba8916", "scanner": "scanner-primary", "fingerprint": "acab89f98afc6c95", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d57bbea75cc7ad64", "level": "note", "message": {"text": "Unused endpoint: PATCH /work-orders/:id"}, "properties": {"repobilityId": "2453d9470d7c357a", "scanner": "scanner-primary", "fingerprint": "d57bbea75cc7ad64", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b0c900654246151d", "level": "note", "message": {"text": "Unused endpoint: PATCH /work-orders/:id/status"}, "properties": {"repobilityId": "c9f7cc3123effebd", "scanner": "scanner-primary", "fingerprint": "b0c900654246151d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-38f7ce9d54a77644", "level": "note", "message": {"text": "Unused endpoint: DELETE /work-orders/:id"}, "properties": {"repobilityId": "40c9b0228e57fe8b", "scanner": "scanner-primary", "fingerprint": "38f7ce9d54a77644", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b54d09fbcbbb3789", "level": "note", "message": {"text": "Unused endpoint: POST /work-orders/:id/photos"}, "properties": {"repobilityId": "e37a7fa8431c3484", "scanner": "scanner-primary", "fingerprint": "b54d09fbcbbb3789", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f7990ba437b596c9", "level": "note", "message": {"text": "Unused endpoint: POST /work-orders/:id/signature"}, "properties": {"repobilityId": "110c254c6839aa5d", "scanner": "scanner-primary", "fingerprint": "f7990ba437b596c9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-618721b912bad1c2", "level": "note", "message": {"text": "Unused endpoint: POST /login"}, "properties": {"repobilityId": "39d00562b5aabf5d", "scanner": "scanner-primary", "fingerprint": "618721b912bad1c2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1bca8100a44f7f25", "level": "note", "message": {"text": "Unused endpoint: POST /users"}, "properties": {"repobilityId": "67a4af5ee8af4141", "scanner": "scanner-primary", "fingerprint": "1bca8100a44f7f25", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-041afd16fe4e42c7", "level": "note", "message": {"text": "Unused endpoint: POST /link-device"}, "properties": {"repobilityId": "6a269eb81e397cda", "scanner": "scanner-primary", "fingerprint": "041afd16fe4e42c7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9c295226a2209ebf", "level": "note", "message": {"text": "Unused endpoint: USE /os-uploads"}, "properties": {"repobilityId": "62c4ca0c010013b4", "scanner": "scanner-primary", "fingerprint": "9c295226a2209ebf", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-190f9180055d579a", "level": "note", "message": {"text": "Unused endpoint: USE /os-api"}, "properties": {"repobilityId": "41c693561791fbfb", "scanner": "scanner-primary", "fingerprint": "190f9180055d579a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c4f847ece21b3923", "level": "note", "message": {"text": "Unused endpoint: GET /os-api/clients"}, "properties": {"repobilityId": "5014cf7e02cb7da3", "scanner": "scanner-primary", "fingerprint": "c4f847ece21b3923", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-dfc8376e5a8af115", "level": "note", "message": {"text": "Unused endpoint: USE /traccar-api"}, "properties": {"repobilityId": "49502305bbcc9673", "scanner": "scanner-primary", "fingerprint": "dfc8376e5a8af115", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8130fd63320e80bf", "level": "note", "message": {"text": "Unused endpoint: GET /api/roles"}, "properties": {"repobilityId": "67b89d077144d646", "scanner": "scanner-primary", "fingerprint": "8130fd63320e80bf", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3a868fbfa352402c", "level": "note", "message": {"text": "Unused endpoint: POST /api/roles"}, "properties": {"repobilityId": "b7ef8d50e164022c", "scanner": "scanner-primary", "fingerprint": "3a868fbfa352402c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-86d6ec4d0e78d6ca", "level": "note", "message": {"text": "Unused endpoint: PUT /api/roles/:id"}, "properties": {"repobilityId": "c96ffe86317f4633", "scanner": "scanner-primary", "fingerprint": "86d6ec4d0e78d6ca", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f0ad627ea17097ac", "level": "note", "message": {"text": "Unused endpoint: DELETE /api/roles/:id"}, "properties": {"repobilityId": "6677bd7db1f3c243", "scanner": "scanner-primary", "fingerprint": "f0ad627ea17097ac", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1bc898b3b7565990", "level": "note", "message": {"text": "Unused endpoint: USE /uploads"}, "properties": {"repobilityId": "026a7d8304a000ee", "scanner": "scanner-primary", "fingerprint": "1bc898b3b7565990", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e059f6361e9b8949", "level": "note", "message": {"text": "Unused endpoint: USE /gestao"}, "properties": {"repobilityId": "801af5642b92f153", "scanner": "scanner-primary", "fingerprint": "e059f6361e9b8949", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-dde3adb27bf7eebe", "level": "note", "message": {"text": "Unused endpoint: USE /api"}, "properties": {"repobilityId": "ea8e01a869280df9", "scanner": "scanner-primary", "fingerprint": "dde3adb27bf7eebe", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5baa8971ebe192a1", "level": "note", "message": {"text": "Unused endpoint: GET /"}, "properties": {"repobilityId": "552395512d5c98aa", "scanner": "scanner-primary", "fingerprint": "5baa8971ebe192a1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7d4edb1ad84a20ee", "level": "note", "message": {"text": "Unused endpoint: GET /gestao/relatorios/custos-extras"}, "properties": {"repobilityId": "520bcb59d2c915c1", "scanner": "scanner-primary", "fingerprint": "7d4edb1ad84a20ee", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a61006764a00d4b7", "level": "note", "message": {"text": "Unused endpoint: GET /gestao/relatorios/custos-por-viagem"}, "properties": {"repobilityId": "c794cf501da502ca", "scanner": "scanner-primary", "fingerprint": "a61006764a00d4b7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b9d32396cac219ec", "level": "note", "message": {"text": "Unused endpoint: GET /gestao/relatorios/custos-por-categoria"}, "properties": {"repobilityId": "c8e1873a29d2c53f", "scanner": "scanner-primary", "fingerprint": "b9d32396cac219ec", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-574cf89f187cbe6e", "level": "note", "message": {"text": "Unused endpoint: GET /gestao/relatorios/consumo-medio"}, "properties": {"repobilityId": "a5a5da1c284c7701", "scanner": "scanner-primary", "fingerprint": "574cf89f187cbe6e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-800c9d44f6cc7f63", "level": "note", "message": {"text": "Unused endpoint: GET /gestao/relatorios/distancia-abastecimentos"}, "properties": {"repobilityId": "a0a0abcb08800863", "scanner": "scanner-primary", "fingerprint": "800c9d44f6cc7f63", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c4f534f23bcaea0c", "level": "note", "message": {"text": "Unused endpoint: GET /gestao/relatorios/custo-abastecimento-total"}, "properties": {"repobilityId": "f993c759d01fcfb7", "scanner": "scanner-primary", "fingerprint": "c4f534f23bcaea0c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2c2cbeb51f6acb24", "level": "note", "message": {"text": "Unused endpoint: GET /app/motorista/trips"}, "properties": {"repobilityId": "b67b1b045b869404", "scanner": "scanner-primary", "fingerprint": "2c2cbeb51f6acb24", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7e33c20a10fc097e", "level": "note", "message": {"text": "Unused endpoint: POST /app/motorista/custos"}, "properties": {"repobilityId": "bf132fa698388c35", "scanner": "scanner-primary", "fingerprint": "7e33c20a10fc097e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-06fd0df013eb20c5", "level": "note", "message": {"text": "Unused endpoint: POST /app/motorista/custos-avulsos"}, "properties": {"repobilityId": "c98de327f5295420", "scanner": "scanner-primary", "fingerprint": "06fd0df013eb20c5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0838f15bf144a0b1", "level": "note", "message": {"text": "Unused endpoint: PUT /app/motorista/trips/:id/finalizar"}, "properties": {"repobilityId": "fe9ee4215df2f82a", "scanner": "scanner-primary", "fingerprint": "0838f15bf144a0b1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-42799e7514c17472", "level": "note", "message": {"text": "Unused endpoint: POST /app/motorista/refuelings"}, "properties": {"repobilityId": "6e4dd13a08c7619d", "scanner": "scanner-primary", "fingerprint": "42799e7514c17472", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-435439750000853d", "level": "note", "message": {"text": "Unused endpoint: GET /app/motorista/profile"}, "properties": {"repobilityId": "d1e0d8b32b6b5301", "scanner": "scanner-primary", "fingerprint": "435439750000853d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-39ae2c0a06871fb4", "level": "note", "message": {"text": "Unused endpoint: POST /app/motorista/upload"}, "properties": {"repobilityId": "75b74577f2c486cc", "scanner": "scanner-primary", "fingerprint": "39ae2c0a06871fb4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-84186ca4e58c6f4d", "level": "note", "message": {"text": "Unused endpoint: GET /api/reports/route"}, "properties": {"repobilityId": "c0edfa38a3e2d577", "scanner": "scanner-primary", "fingerprint": "84186ca4e58c6f4d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4314af11d66bb15a", "level": "note", "message": {"text": "Unused endpoint: GET /gestao/abastecimentos/image/:filename"}, "properties": {"repobilityId": "f6a35e8f68738b4a", "scanner": "scanner-primary", "fingerprint": "4314af11d66bb15a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-af138ed041178f7b", "level": "note", "message": {"text": "Unused endpoint: GET /gestao/uploads/:filename"}, "properties": {"repobilityId": "c84ce2af8290d29c", "scanner": "scanner-primary", "fingerprint": "af138ed041178f7b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ec57f33b2cabe7a0", "level": "note", "message": {"text": "Unused endpoint: GET /gestao/maintenances"}, "properties": {"repobilityId": "06ce2f4a32e00055", "scanner": "scanner-primary", "fingerprint": "ec57f33b2cabe7a0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-588f1f3d0a8c5af3", "level": "note", "message": {"text": "Unused endpoint: POST /gestao/maintenances"}, "properties": {"repobilityId": "9e14d7b959478202", "scanner": "scanner-primary", "fingerprint": "588f1f3d0a8c5af3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1bffd8c6e3b781f1", "level": "note", "message": {"text": "Unused endpoint: PUT /gestao/maintenances/:id"}, "properties": {"repobilityId": "056c38ee15c5190a", "scanner": "scanner-primary", "fingerprint": "1bffd8c6e3b781f1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c5f82966857b0aab", "level": "note", "message": {"text": "Unused endpoint: DELETE /gestao/maintenances/:id"}, "properties": {"repobilityId": "1fa52078a300f7bc", "scanner": "scanner-primary", "fingerprint": "c5f82966857b0aab", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-85c316a21df7d907", "level": "note", "message": {"text": "Unused endpoint: POST /gestao/refuelings"}, "properties": {"repobilityId": "e4041acd8417cb5d", "scanner": "scanner-primary", "fingerprint": "85c316a21df7d907", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}