{"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-c1a70b4f7fc5e4c8", "name": "Possibly dead Python function: is_password_compliant", "shortDescription": {"text": "Possibly dead Python function: is_password_compliant"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1a2bf4a3fb6d1628", "name": "Possibly dead Python function: verify_password", "shortDescription": {"text": "Possibly dead Python function: verify_password"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-045ae9bfb1a31db6", "name": "Possibly dead Python function: generate_map_geojson", "shortDescription": {"text": "Possibly dead Python function: generate_map_geojson"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-58959c5938e18705", "name": "Possibly dead Python function: render_static_map", "shortDescription": {"text": "Possibly dead Python function: render_static_map"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5b66fb7aa4e56087", "name": "Possibly dead Python function: delete_rotation_hint", "shortDescription": {"text": "Possibly dead Python function: delete_rotation_hint"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cee50a49147a37b3", "name": "Possibly dead Python function: downgrade", "shortDescription": {"text": "Possibly dead Python function: downgrade"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-21383e8eeeb686a9", "name": "Possibly dead Python function: downgrade", "shortDescription": {"text": "Possibly dead Python function: downgrade"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e10347a692689a66", "name": "Privileged port 70 in use", "shortDescription": {"text": "Privileged port 70 in use"}, "fullDescription": {"text": "Port 70 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-2ff7aabfceec3883", "name": "Privileged port 3 in use", "shortDescription": {"text": "Privileged port 3 in use"}, "fullDescription": {"text": "Port 3 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-c63936330cbaabb6", "name": "Privileged port 23 in use", "shortDescription": {"text": "Privileged port 23 in use"}, "fullDescription": {"text": "Port 23 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-2aa94b4cef2222f0", "name": "Privileged port 17 in use", "shortDescription": {"text": "Privileged port 17 in use"}, "fullDescription": {"text": "Port 17 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-1f66ad88286ca30a", "name": "Dockerfile runs as root: backend/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: backend/Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-714c31ca9f474ae6", "name": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3afdadac64db1d18", "name": "Docker base image is tag-pinned but not digest-pinned: rust:1.85-bookworm", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: rust:1.85-bookworm"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b5a5f8278aeca929", "name": "Docker base image is tag-pinned but not digest-pinned: debian:bookworm-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: debian:bookworm-slim"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-faa134129e5545ff", "name": "Docker base image is tag-pinned but not digest-pinned: node:20-alpine", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-alpine"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b048d166901fd868", "name": "Docker base image is tag-pinned but not digest-pinned: nginx:alpine", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: nginx:alpine"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-259566113ecd44c8", "name": "Insecure pattern 'cors_wildcard' in backend/app/main.py:591", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in backend/app/main.py:591"}, "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-7dba7b407e1e56fd", "name": "Insecure pattern 'local_storage_auth_token' in frontend/src/api/client.ts:53", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in frontend/src/api/client.ts:53"}, "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-d93be7341f1fb1a0", "name": "Insecure pattern 'local_storage_auth_token' in frontend/src/api/__tests__/client.refresh.test.ts:19", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in frontend/src/api/__tests__/client.refresh.test.ts:19"}, "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-ac1afb9ec012418f", "name": "Insecure pattern 'local_storage_auth_token' in frontend/src/hooks/useAuth.ts:49", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in frontend/src/hooks/useAuth.ts:49"}, "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-5846a5f722a6913b", "name": "Insecure pattern 'local_storage_auth_token' in frontend/src/pages/settings/AccountTab.tsx:58", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in frontend/src/pages/settings/AccountTab.tsx:58"}, "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-12522bf27bea173c", "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-2ac523aee0988b95", "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-600299574bb6a28a", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1351fbbcefb7190c", "name": "Very large file: backend/app/routers/flight_library.py (2371 lines)", "shortDescription": {"text": "Very large file: backend/app/routers/flight_library.py (2371 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-c51694e618d70141", "name": "Very large file: frontend/src/pages/Flights.tsx (1165 lines)", "shortDescription": {"text": "Very large file: frontend/src/pages/Flights.tsx (1165 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-6c23848d4bd57338", "name": "Very large file: frontend/src/pages/MissionWizardLegacy.tsx (1441 lines)", "shortDescription": {"text": "Very large file: frontend/src/pages/MissionWizardLegacy.tsx (1441 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-7a0440cf3a051593", "name": "Very large file: frontend/src/pages/Dashboard.tsx (1207 lines)", "shortDescription": {"text": "Very large file: frontend/src/pages/Dashboard.tsx (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-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 14 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 92 placeholder/mock markers across 29 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0bcf7f3143ddcf01", "name": "Commented-code block (5 lines) in backend/app/config.py:17", "shortDescription": {"text": "Commented-code block (5 lines) in backend/app/config.py:17"}, "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-7f6f9909ce256f54", "name": "Commented-code block (5 lines) in backend/app/main.py:56", "shortDescription": {"text": "Commented-code block (5 lines) in backend/app/main.py:56"}, "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-331c74ebbd43b232", "name": "Commented-code block (8 lines) in backend/app/db_migrations.py:113", "shortDescription": {"text": "Commented-code block (8 lines) in backend/app/db_migrations.py:113"}, "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-1729c4edb11563cf", "name": "Commented-code block (6 lines) in backend/app/seed.py:313", "shortDescription": {"text": "Commented-code block (6 lines) in backend/app/seed.py:313"}, "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-007993f12d5720dc", "name": "Commented-code block (6 lines) in backend/app/observability/sentry.py:28", "shortDescription": {"text": "Commented-code block (6 lines) in backend/app/observability/sentry.py:28"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-08a3d20314227408", "name": "Commented-code block (7 lines) in backend/app/auth/jwt.py:137", "shortDescription": {"text": "Commented-code block (7 lines) in backend/app/auth/jwt.py:137"}, "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-7b7c4c7f8fdbb8bc", "name": "Commented-code block (5 lines) in backend/app/models/tos_acceptance.py:42", "shortDescription": {"text": "Commented-code block (5 lines) in backend/app/models/tos_acceptance.py:42"}, "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-cc129c9c36c0ee2a", "name": "Commented-code block (8 lines) in backend/app/models/mission.py:71", "shortDescription": {"text": "Commented-code block (8 lines) in backend/app/models/mission.py:71"}, "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-2a3f769b17890a2d", "name": "Commented-code block (7 lines) in backend/app/models/device_api_key.py:31", "shortDescription": {"text": "Commented-code block (7 lines) in backend/app/models/device_api_key.py:31"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6627e3c24f81d698", "name": "Commented-code block (7 lines) in backend/app/models/report.py:30", "shortDescription": {"text": "Commented-code block (7 lines) in backend/app/models/report.py:30"}, "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-6400b546d187374f", "name": "Commented-code block (5 lines) in backend/app/routers/reports.py:346", "shortDescription": {"text": "Commented-code block (5 lines) in backend/app/routers/reports.py:346"}, "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-ae0f3c1a20b98661", "name": "Commented-code block (5 lines) in backend/app/routers/stripe_webhook.py:37", "shortDescription": {"text": "Commented-code block (5 lines) in backend/app/routers/stripe_webhook.py:37"}, "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-abc2811d15004364", "name": "Commented-code block (9 lines) in backend/app/routers/invoices.py:30", "shortDescription": {"text": "Commented-code block (9 lines) in backend/app/routers/invoices.py:30"}, "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-38f8760b4c1686d4", "name": "Commented-code block (7 lines) in backend/app/routers/maintenance.py:525", "shortDescription": {"text": "Commented-code block (7 lines) in backend/app/routers/maintenance.py:525"}, "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-25ac945078c3dd5f", "name": "Commented-code block (5 lines) in backend/app/routers/flight_library.py:44", "shortDescription": {"text": "Commented-code block (5 lines) in backend/app/routers/flight_library.py:44"}, "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-1f13df23de832e64", "name": "Commented-code block (6 lines) in backend/app/routers/missions.py:452", "shortDescription": {"text": "Commented-code block (6 lines) in backend/app/routers/missions.py:452"}, "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-99156c7a4eb5245e", "name": "Commented-code block (7 lines) in backend/app/routers/tos.py:177", "shortDescription": {"text": "Commented-code block (7 lines) in backend/app/routers/tos.py:177"}, "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-553f203101901e7f", "name": "Commented-code block (5 lines) in backend/app/routers/auth.py:243", "shortDescription": {"text": "Commented-code block (5 lines) in backend/app/routers/auth.py:243"}, "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-b5a752858125ffcb", "name": "Commented-code block (5 lines) in backend/app/routers/client_portal.py:278", "shortDescription": {"text": "Commented-code block (5 lines) in backend/app/routers/client_portal.py:278"}, "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-a783f6e7b1402ec0", "name": "Legacy-named symbol `uploaded_backup` in backend/app/routers/backup.py:276", "shortDescription": {"text": "Legacy-named symbol `uploaded_backup` in backend/app/routers/backup.py:276"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-860ba132f3b3644f", "name": "Commented-code block (7 lines) in backend/app/routers/backup.py:676", "shortDescription": {"text": "Commented-code block (7 lines) in backend/app/routers/backup.py:676"}, "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-5f786530ac7fce4d", "name": "Commented-code block (5 lines) in backend/app/tasks/celery_tasks.py:61", "shortDescription": {"text": "Commented-code block (5 lines) in backend/app/tasks/celery_tasks.py:61"}, "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-5be60b42e8cb0185", "name": "Commented-code block (7 lines) in backend/app/services/email_service.py:207", "shortDescription": {"text": "Commented-code block (7 lines) in backend/app/services/email_service.py:207"}, "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-be9f3c05c8a9bd89", "name": "Commented-code block (5 lines) in backend/app/services/opendronelog.py:11", "shortDescription": {"text": "Commented-code block (5 lines) in backend/app/services/opendronelog.py:11"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6f6022edf7d53b6d", "name": "Commented-code block (9 lines) in backend/app/services/map_renderer.py:17", "shortDescription": {"text": "Commented-code block (9 lines) in backend/app/services/map_renderer.py:17"}, "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-8ad7f35493dc08a9", "name": "Commented-code block (6 lines) in backend/app/services/report_audience.py:22", "shortDescription": {"text": "Commented-code block (6 lines) in backend/app/services/report_audience.py:22"}, "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-d420ecc1ac942c54", "name": "Commented-code block (6 lines) in backend/app/services/claude_llm.py:74", "shortDescription": {"text": "Commented-code block (6 lines) in backend/app/services/claude_llm.py:74"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3017e29bf8975606", "name": "Commented-code block (5 lines) in backend/app/services/stripe_service.py:113", "shortDescription": {"text": "Commented-code block (5 lines) in backend/app/services/stripe_service.py:113"}, "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-6ac7714b22bc1a48", "name": "Commented-code block (5 lines) in backend/app/services/ntfy.py:57", "shortDescription": {"text": "Commented-code block (5 lines) in backend/app/services/ntfy.py:57"}, "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-d4d1d21a72feb67c", "name": "Commented-code block (6 lines) in backend/tests/test_flight_attribution.py:69", "shortDescription": {"text": "Commented-code block (6 lines) in backend/tests/test_flight_attribution.py:69"}, "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-53d85a31670deba8", "name": "Legacy-named symbol `my_backup` in backend/tests/test_backup_nonblocking.py:168", "shortDescription": {"text": "Legacy-named symbol `my_backup` in backend/tests/test_backup_nonblocking.py:168"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cfc8a77389af94b3", "name": "Commented-code block (6 lines) in backend/tests/test_tos_customer_sync.py:82", "shortDescription": {"text": "Commented-code block (6 lines) in backend/tests/test_tos_customer_sync.py:82"}, "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-4f38ed5cc13af5ec", "name": "Legacy-named symbol `test_reuse_returns_none_when_session_too_old` in backend/tests/test_pay_idempotency.py:99", "shortDescription": {"text": "Legacy-named symbol `test_reuse_returns_none_when_session_too_old` in backend/tests/test_pay_idempotency.py:99"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4e1bfab6d77ea9d5", "name": "Commented-code block (6 lines) in backend/tests/test_stripe_nonblocking.py:43", "shortDescription": {"text": "Commented-code block (6 lines) in backend/tests/test_stripe_nonblocking.py:43"}, "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-0d521f001231541d", "name": "Commented-code block (5 lines) in backend/tests/test_health_stripe_db_lookup.py:56", "shortDescription": {"text": "Commented-code block (5 lines) in backend/tests/test_health_stripe_db_lookup.py:56"}, "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-762bac0622c5fae1", "name": "Commented-code block (5 lines) in backend/tests/test_pdf_invoice_pay_link.py:421", "shortDescription": {"text": "Commented-code block (5 lines) in backend/tests/test_pdf_invoice_pay_link.py:421"}, "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-0d0008c339f1a142", "name": "Commented-code block (5 lines) in backend/alembic/env.py:24", "shortDescription": {"text": "Commented-code block (5 lines) in backend/alembic/env.py:24"}, "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-8753b1bfc70b49f7", "name": "Commented-code block (5 lines) in backend/alembic/versions/0001_baseline_schema.py:75", "shortDescription": {"text": "Commented-code block (5 lines) in backend/alembic/versions/0001_baseline_schema.py:75"}, "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-85083125925fd30d", "name": "Commented-code block (9 lines) in frontend/vite.config.ts:29", "shortDescription": {"text": "Commented-code block (9 lines) in frontend/vite.config.ts:29"}, "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-3a8d27abf18e11fc", "name": "Legacy-named symbol `MissionWizardLegacy` in frontend/src/App.tsx:29", "shortDescription": {"text": "Legacy-named symbol `MissionWizardLegacy` in frontend/src/App.tsx:29"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-55b32ac3312a80da", "name": "Commented-code block (6 lines) in frontend/src/App.tsx:15", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/src/App.tsx:15"}, "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-94796013a2bf35fb", "name": "Commented-code block (10 lines) in frontend/src/api/client.ts:17", "shortDescription": {"text": "Commented-code block (10 lines) in frontend/src/api/client.ts:17"}, "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-cf65a1ce64f19757", "name": "Commented-code block (9 lines) in frontend/src/api/types.ts:53", "shortDescription": {"text": "Commented-code block (9 lines) in frontend/src/api/types.ts:53"}, "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-f81b3adcfebc11e3", "name": "Commented-code block (5 lines) in frontend/src/components/ErrorBoundary.tsx:69", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/components/ErrorBoundary.tsx:69"}, "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-2166427e57b10580", "name": "Commented-code block (7 lines) in frontend/src/pages/MissionImagesEdit.tsx:208", "shortDescription": {"text": "Commented-code block (7 lines) in frontend/src/pages/MissionImagesEdit.tsx:208"}, "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-ca038d2ea33bf3d2", "name": "Commented-code block (5 lines) in frontend/src/pages/MissionInvoiceEdit.tsx:292", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/pages/MissionInvoiceEdit.tsx:292"}, "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-7d6fcfebf61be3af", "name": "Commented-code block (6 lines) in frontend/src/pages/Batteries.tsx:86", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/src/pages/Batteries.tsx: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-5316e12cdddb6d85", "name": "Commented-code block (5 lines) in frontend/src/pages/TosAcceptance.tsx:55", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/pages/TosAcceptance.tsx:55"}, "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-ccbd5a7a8b83f33e", "name": "Commented-code block (6 lines) in frontend/src/pages/Missions.tsx:33", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/src/pages/Missions.tsx:33"}, "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-58d582a6b9ec9a3d", "name": "Commented-code block (8 lines) in frontend/src/pages/MissionReportEdit.tsx:262", "shortDescription": {"text": "Commented-code block (8 lines) in frontend/src/pages/MissionReportEdit.tsx:262"}, "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-631543f12db2e9eb", "name": "Commented-code block (5 lines) in frontend/src/pages/Airspace.tsx:109", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/pages/Airspace.tsx:109"}, "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-1574ba724578e947", "name": "Commented-code block (7 lines) in frontend/src/pages/MissionDetail.tsx:115", "shortDescription": {"text": "Commented-code block (7 lines) in frontend/src/pages/MissionDetail.tsx:115"}, "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-214efc5ca0c6a9a8", "name": "Commented-code block (6 lines) in frontend/src/pages/Customers.tsx:133", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/src/pages/Customers.tsx:133"}, "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-9d3afc905ee07e25", "name": "Commented-code block (5 lines) in frontend/src/pages/Maintenance.tsx:48", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/pages/Maintenance.tsx:48"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fb789276d6f505ea", "name": "Commented-code block (5 lines) in frontend/src/pages/MissionWizardLegacy.tsx:743", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/pages/MissionWizardLegacy.tsx:743"}, "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-28f85732794aa4d5", "name": "Commented-code block (6 lines) in frontend/src/pages/Dashboard.tsx:219", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/src/pages/Dashboard.tsx:219"}, "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-6dde3246f40810e3", "name": "Commented-code block (5 lines) in frontend/src/pages/__tests__/MissionReportEdit.test.tsx:429", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/pages/__tests__/MissionReportEdit.test.tsx:429"}, "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-108dfa6f6a9b1bf9", "name": "Legacy-named symbol `MissionWizardLegacy` in frontend/src/__tests__/missions.routes.test.tsx:27", "shortDescription": {"text": "Legacy-named symbol `MissionWizardLegacy` in frontend/src/__tests__/missions.routes.test.tsx:27"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-319e66a630e14977", "name": "2 env vars used in code but missing from .env.example", "shortDescription": {"text": "2 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `APP_VERSION`, `DRONEOPS_VERSION`. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2c04133e54348533", "name": "Near-duplicate function bodies in 2 places", "shortDescription": {"text": "Near-duplicate function bodies in 2 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nbackend/app/routers/invoices.py:get_invoice, backend/app/routers/missions.py:get_mission\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-be46ea126aa5d8dc", "name": "Near-duplicate function bodies in 3 places", "shortDescription": {"text": "Near-duplicate function bodies in 3 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nbackend/app/routers/flight_library.py:get_flight, backend/app/routers/flight_library.py:get_track, backend/app/routers/flight_library.py:delete_flight\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-02525d39071dd2c7", "name": "Near-duplicate function bodies in 5 places", "shortDescription": {"text": "Near-duplicate function bodies in 5 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nbackend/app/routers/client_portal.py:get_client_mission, backend/app/routers/client_portal.py:get_client_invoice, backend/app/routers/client_portal.py:create_client_deposit_payment, backend/app/routers/client_portal.py:create_client_balance_payment\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b4169676880f797e", "name": "Frontend route `/tos/accept` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/tos/accept` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-aa7e1b3a46467d83", "name": "Frontend route `/intake/:token` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/intake/:token` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-985d92059858eed6", "name": "Frontend route `/client/mission/:missionId` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/client/mission/:missionId` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-766ea53084e81376", "name": "Frontend route `/client/:token` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/client/:token` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ee0b99dc1524159e", "name": "Frontend route `/flights/:id/replay` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/flights/:id/replay` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a302eea842b6f162", "name": "Frontend route `/missions/new` has no Link/navigate to it \u2014 frontend/src/__tests__/missions.routes.test.tsx", "shortDescription": {"text": "Frontend route `/missions/new` has no Link/navigate to it \u2014 frontend/src/__tests__/missions.routes.test.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-dabd415b9d928f79", "name": "Frontend route `/missions/:id/edit` has no Link/navigate to it \u2014 frontend/src/__tests__/missions.routes.test.tsx", "shortDescription": {"text": "Frontend route `/missions/:id/edit` has no Link/navigate to it \u2014 frontend/src/__tests__/missions.routes.test.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ca579f37ee3bfaa4", "name": "Frontend route `/missions/:id/edit-legacy` has no Link/navigate to it \u2014 frontend/src/__tests__/missions.routes.test.tsx", "shortDescription": {"text": "Frontend route `/missions/:id/edit-legacy` has no Link/navigate to it \u2014 frontend/src/__tests__/missions.routes.test.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-58ffd68410f6e32e", "name": "Frontend route `/missions/:id/details/edit` has no Link/navigate to it \u2014 frontend/src/__tests__/missions.routes.test.tsx", "shortDescription": {"text": "Frontend route `/missions/:id/details/edit` has no Link/navigate to it \u2014 frontend/src/__tests__/missions.routes.test.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-33ba5c571d6aa720", "name": "Frontend route `/missions/:id/flights/edit` has no Link/navigate to it \u2014 frontend/src/__tests__/missions.routes.test.tsx", "shortDescription": {"text": "Frontend route `/missions/:id/flights/edit` has no Link/navigate to it \u2014 frontend/src/__tests__/missions.routes.test.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cf62451dd24d1ca2", "name": "Frontend route `/missions/:id/images/edit` has no Link/navigate to it \u2014 frontend/src/__tests__/missions.routes.test.tsx", "shortDescription": {"text": "Frontend route `/missions/:id/images/edit` has no Link/navigate to it \u2014 frontend/src/__tests__/missions.routes.test.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2f06b96532a6b636", "name": "Frontend route `/missions/:id/report/edit` has no Link/navigate to it \u2014 frontend/src/__tests__/missions.routes.test.tsx", "shortDescription": {"text": "Frontend route `/missions/:id/report/edit` has no Link/navigate to it \u2014 frontend/src/__tests__/missions.routes.test.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8b93443c3d589389", "name": "Frontend route `/missions/:id/invoice/edit` has no Link/navigate to it \u2014 frontend/src/__tests__/missions.routes.test.tsx", "shortDescription": {"text": "Frontend route `/missions/:id/invoice/edit` has no Link/navigate to it \u2014 frontend/src/__tests__/missions.routes.test.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-52f483a5b084a424", "name": "Frontend route `/missions/:id` has no Link/navigate to it \u2014 frontend/src/__tests__/missions.routes.test.tsx", "shortDescription": {"text": "Frontend route `/missions/:id` has no Link/navigate to it \u2014 frontend/src/__tests__/missions.routes.test.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-982e16cec9c73835", "name": "FastAPI POST `stripe_webhook` without auth dependency \u2014 backend/app/routers/stripe_webhook.py:49", "shortDescription": {"text": "FastAPI POST `stripe_webhook` without auth dependency \u2014 backend/app/routers/stripe_webhook.py:49"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4c945a2f58c80f07", "name": "FastAPI POST `device_upload_flights` without auth dependency \u2014 backend/app/routers/flight_library.py:1005", "shortDescription": {"text": "FastAPI POST `device_upload_flights` without auth dependency \u2014 backend/app/routers/flight_library.py:1005"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0ed2333e76fcceb9", "name": "FastAPI POST `device_upload_flights_async` without auth dependency \u2014 backend/app/routers/flight_library.py:1102", "shortDescription": {"text": "FastAPI POST `device_upload_flights_async` without auth dependency \u2014 backend/app/routers/flight_library.py:1102"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1d5723a4d350c715", "name": "FastAPI POST `accept_terms` without auth dependency \u2014 backend/app/routers/tos.py:123", "shortDescription": {"text": "FastAPI POST `accept_terms` without auth dependency \u2014 backend/app/routers/tos.py:123"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7765535a35c8c19c", "name": "FastAPI POST `initial_setup` without auth dependency \u2014 backend/app/routers/auth.py:114", "shortDescription": {"text": "FastAPI POST `initial_setup` without auth dependency \u2014 backend/app/routers/auth.py:114"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6e96eb6ea29e29c0", "name": "FastAPI POST `refresh` without auth dependency \u2014 backend/app/routers/auth.py:292", "shortDescription": {"text": "FastAPI POST `refresh` without auth dependency \u2014 backend/app/routers/auth.py:292"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9ced65cfc76fc5e9", "name": "FastAPI POST `validate_client_token` without auth dependency \u2014 backend/app/routers/client_portal.py:88", "shortDescription": {"text": "FastAPI POST `validate_client_token` without auth dependency \u2014 backend/app/routers/client_portal.py:88"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ee00c5f3f5b35c73", "name": "FastAPI POST `client_login` without auth dependency \u2014 backend/app/routers/client_portal.py:146", "shortDescription": {"text": "FastAPI POST `client_login` without auth dependency \u2014 backend/app/routers/client_portal.py:146"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2010c3324a527334", "name": "FastAPI POST `create_client_deposit_payment` without auth dependency \u2014 backend/app/routers/client_portal.py:559", "shortDescription": {"text": "FastAPI POST `create_client_deposit_payment` without auth dependency \u2014 backend/app/routers/client_portal.py:559"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-31a96a9524fd5f87", "name": "FastAPI POST `create_client_balance_payment` without auth dependency \u2014 backend/app/routers/client_portal.py:634", "shortDescription": {"text": "FastAPI POST `create_client_balance_payment` without auth dependency \u2014 backend/app/routers/client_portal.py:634"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f6819c15b6648153", "name": "FastAPI POST `create_client_payment` without auth dependency \u2014 backend/app/routers/client_portal.py:725", "shortDescription": {"text": "FastAPI POST `create_client_payment` without auth dependency \u2014 backend/app/routers/client_portal.py:725"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-eccd4409f87130c0", "name": "FastAPI POST `submit_intake_form` without auth dependency \u2014 backend/app/routers/intake.py:401", "shortDescription": {"text": "FastAPI POST `submit_intake_form` without auth dependency \u2014 backend/app/routers/intake.py:401"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6921ccd4acd0e518", "name": "Dangling fetch: POST /api/auth/refresh (frontend/src/api/client.ts:49)", "shortDescription": {"text": "Dangling fetch: POST /api/auth/refresh (frontend/src/api/client.ts:49)"}, "fullDescription": {"text": "`frontend/src/api/client.ts:49` calls `POST /api/auth/refresh` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/auth/refresh`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bdbde59e35967d8a", "name": "Dangling fetch: GET https://nominatim.openstreetmap.org/search?format=json&addressdetails=1&limit=5&countrycodes=us&q=${", "shortDescription": {"text": "Dangling fetch: GET https://nominatim.openstreetmap.org/search?format=json&addressdetails=1&limit=5&countrycodes=us&q=${encodeURIComponent(query)} (frontend/src/pages/MissionDetailsEdit.tsx:186)"}, "fullDescription": {"text": "`frontend/src/pages/MissionDetailsEdit.tsx:186` calls `GET https://nominatim.openstreetmap.org/search?format=json&addressdetails=1&limit=5&countrycodes=us&q=${encodeURIComponent(query)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/nominatim.openstreetmap.org/search`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5d0618e97e0996c4", "name": "Dangling fetch: GET https://nominatim.openstreetmap.org/search?format=json&addressdetails=1&limit=5&countrycodes=us&q=${", "shortDescription": {"text": "Dangling fetch: GET https://nominatim.openstreetmap.org/search?format=json&addressdetails=1&limit=5&countrycodes=us&q=${encodeURIComponent(query)} (frontend/src/pages/CustomerIntake.tsx:131)"}, "fullDescription": {"text": "`frontend/src/pages/CustomerIntake.tsx:131` calls `GET https://nominatim.openstreetmap.org/search?format=json&addressdetails=1&limit=5&countrycodes=us&q=${encodeURIComponent(query)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/nominatim.openstreetmap.org/search`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fc2825aae2ee24b6", "name": "Dangling fetch: POST /api/intake/form/${token} (frontend/src/pages/CustomerIntake.tsx:257)", "shortDescription": {"text": "Dangling fetch: POST /api/intake/form/${token} (frontend/src/pages/CustomerIntake.tsx:257)"}, "fullDescription": {"text": "`frontend/src/pages/CustomerIntake.tsx:257` calls `POST /api/intake/form/${token}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/intake/form/<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-57d6b658ada82af0", "name": "Dangling fetch: GET https://nominatim.openstreetmap.org/search?format=json&addressdetails=1&limit=5&countrycodes=us&q=${", "shortDescription": {"text": "Dangling fetch: GET https://nominatim.openstreetmap.org/search?format=json&addressdetails=1&limit=5&countrycodes=us&q=${encodeURIComponent(query)} (frontend/src/pages/Customers.tsx:104)"}, "fullDescription": {"text": "`frontend/src/pages/Customers.tsx:104` calls `GET https://nominatim.openstreetmap.org/search?format=json&addressdetails=1&limit=5&countrycodes=us&q=${encodeURIComponent(query)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/nominatim.openstreetmap.org/search`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-30165fdb3302f4d6", "name": "Dangling fetch: POST /api/flight-library/import/opendronelog/stream (frontend/src/pages/settings/FlightDataTab.tsx:160)", "shortDescription": {"text": "Dangling fetch: POST /api/flight-library/import/opendronelog/stream (frontend/src/pages/settings/FlightDataTab.tsx:160)"}, "fullDescription": {"text": "`frontend/src/pages/settings/FlightDataTab.tsx:160` calls `POST /api/flight-library/import/opendronelog/stream` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/flight-library/import/opendronelog/stream`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a9e9167c19a3be33", "name": "Unused endpoint: GET /uploads/{filename:path}", "shortDescription": {"text": "Unused endpoint: GET /uploads/{filename:path}"}, "fullDescription": {"text": "`backend/app/main.py` declares `GET /uploads/{filename:path}` 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-91f7169b44039bc2", "name": "Unused endpoint: GET /api/demo/status", "shortDescription": {"text": "Unused endpoint: GET /api/demo/status"}, "fullDescription": {"text": "`backend/app/main.py` declares `GET /api/demo/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-4756b4c4da7d2088", "name": "Unused endpoint: GET /api/health", "shortDescription": {"text": "Unused endpoint: GET /api/health"}, "fullDescription": {"text": "`backend/app/main.py` declares `GET /api/health` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a494e5abd9ee7363", "name": "Unused endpoint: GET /api/branding", "shortDescription": {"text": "Unused endpoint: GET /api/branding"}, "fullDescription": {"text": "`backend/app/main.py` declares `GET /api/branding` 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-897166c3c797b900", "name": "Unused endpoint: GET /{mission_id}/report", "shortDescription": {"text": "Unused endpoint: GET /{mission_id}/report"}, "fullDescription": {"text": "`backend/app/routers/reports.py` declares `GET /{mission_id}/report` 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-971832f8516c253c", "name": "Unused endpoint: POST /{mission_id}/report/generate", "shortDescription": {"text": "Unused endpoint: POST /{mission_id}/report/generate"}, "fullDescription": {"text": "`backend/app/routers/reports.py` declares `POST /{mission_id}/report/generate` 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-c2e7aaba729401b5", "name": "Unused endpoint: GET /{mission_id}/report/status/{task_id}", "shortDescription": {"text": "Unused endpoint: GET /{mission_id}/report/status/{task_id}"}, "fullDescription": {"text": "`backend/app/routers/reports.py` declares `GET /{mission_id}/report/status/{task_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-671f90b18616ca55", "name": "Unused endpoint: PUT /{mission_id}/report", "shortDescription": {"text": "Unused endpoint: PUT /{mission_id}/report"}, "fullDescription": {"text": "`backend/app/routers/reports.py` declares `PUT /{mission_id}/report` 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-75729a8f8151246a", "name": "Unused endpoint: POST /{mission_id}/report/pdf", "shortDescription": {"text": "Unused endpoint: POST /{mission_id}/report/pdf"}, "fullDescription": {"text": "`backend/app/routers/reports.py` declares `POST /{mission_id}/report/pdf` 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-25f2e570dca9d87e", "name": "Unused endpoint: POST /{mission_id}/report/send", "shortDescription": {"text": "Unused endpoint: POST /{mission_id}/report/send"}, "fullDescription": {"text": "`backend/app/routers/reports.py` declares `POST /{mission_id}/report/send` 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-ada1cfaa9e4bde21", "name": "Unused endpoint: POST /api/webhooks/stripe", "shortDescription": {"text": "Unused endpoint: POST /api/webhooks/stripe"}, "fullDescription": {"text": "`backend/app/routers/stripe_webhook.py` declares `POST /api/webhooks/stripe` 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-7b1c2c94262a0016", "name": "Unused endpoint: GET /{mission_id}/invoice", "shortDescription": {"text": "Unused endpoint: GET /{mission_id}/invoice"}, "fullDescription": {"text": "`backend/app/routers/invoices.py` declares `GET /{mission_id}/invoice` 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-519dafb24f55dc67", "name": "Unused endpoint: POST /{mission_id}/invoice", "shortDescription": {"text": "Unused endpoint: POST /{mission_id}/invoice"}, "fullDescription": {"text": "`backend/app/routers/invoices.py` declares `POST /{mission_id}/invoice` 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-58d75ba7343298b1", "name": "Unused endpoint: PUT /{mission_id}/invoice", "shortDescription": {"text": "Unused endpoint: PUT /{mission_id}/invoice"}, "fullDescription": {"text": "`backend/app/routers/invoices.py` declares `PUT /{mission_id}/invoice` 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-59f33684c0d3d42f", "name": "Unused endpoint: PUT /{mission_id}/invoice/items", "shortDescription": {"text": "Unused endpoint: PUT /{mission_id}/invoice/items"}, "fullDescription": {"text": "`backend/app/routers/invoices.py` declares `PUT /{mission_id}/invoice/items` 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-913324e380583c81", "name": "Unused endpoint: POST /{mission_id}/invoice/items", "shortDescription": {"text": "Unused endpoint: POST /{mission_id}/invoice/items"}, "fullDescription": {"text": "`backend/app/routers/invoices.py` declares `POST /{mission_id}/invoice/items` 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-8de6a673aa6ccd3b", "name": "Unused endpoint: PUT /{mission_id}/invoice/items/{item_id}", "shortDescription": {"text": "Unused endpoint: PUT /{mission_id}/invoice/items/{item_id}"}, "fullDescription": {"text": "`backend/app/routers/invoices.py` declares `PUT /{mission_id}/invoice/items/{item_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-ee6e3ba6c9da1c3a", "name": "Unused endpoint: DELETE /{mission_id}/invoice/items/{item_id}", "shortDescription": {"text": "Unused endpoint: DELETE /{mission_id}/invoice/items/{item_id}"}, "fullDescription": {"text": "`backend/app/routers/invoices.py` declares `DELETE /{mission_id}/invoice/items/{item_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-a300923b068adcba", "name": "Unused endpoint: GET /records", "shortDescription": {"text": "Unused endpoint: GET /records"}, "fullDescription": {"text": "`backend/app/routers/maintenance.py` declares `GET /records` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-655614c94139f993", "name": "Unused endpoint: POST /records", "shortDescription": {"text": "Unused endpoint: POST /records"}, "fullDescription": {"text": "`backend/app/routers/maintenance.py` declares `POST /records` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-089157a1efb317f6", "name": "Unused endpoint: PUT /records/{record_id}", "shortDescription": {"text": "Unused endpoint: PUT /records/{record_id}"}, "fullDescription": {"text": "`backend/app/routers/maintenance.py` declares `PUT /records/{record_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-f0155c7c3304f70c", "name": "Unused endpoint: DELETE /records/{record_id}", "shortDescription": {"text": "Unused endpoint: DELETE /records/{record_id}"}, "fullDescription": {"text": "`backend/app/routers/maintenance.py` declares `DELETE /records/{record_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-32a04f687f7c0bb8", "name": "Unused endpoint: POST /records/{record_id}/images", "shortDescription": {"text": "Unused endpoint: POST /records/{record_id}/images"}, "fullDescription": {"text": "`backend/app/routers/maintenance.py` declares `POST /records/{record_id}/images` 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-e6f6f9c2c82148e8", "name": "Unused endpoint: DELETE /records/{record_id}/images/{image_idx}", "shortDescription": {"text": "Unused endpoint: DELETE /records/{record_id}/images/{image_idx}"}, "fullDescription": {"text": "`backend/app/routers/maintenance.py` declares `DELETE /records/{record_id}/images/{image_idx}` 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-0d9abfdbc1cc9788", "name": "Unused endpoint: GET /schedules", "shortDescription": {"text": "Unused endpoint: GET /schedules"}, "fullDescription": {"text": "`backend/app/routers/maintenance.py` declares `GET /schedules` 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-bb4497b3cab9fef5", "name": "Unused endpoint: POST /schedules", "shortDescription": {"text": "Unused endpoint: POST /schedules"}, "fullDescription": {"text": "`backend/app/routers/maintenance.py` declares `POST /schedules` 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-d29e9aacfa1f95a6", "name": "Unused endpoint: GET /schedules/{aircraft_id}", "shortDescription": {"text": "Unused endpoint: GET /schedules/{aircraft_id}"}, "fullDescription": {"text": "`backend/app/routers/maintenance.py` declares `GET /schedules/{aircraft_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-d7f54e5d794e82ae", "name": "Unused endpoint: PUT /schedules/{schedule_id}", "shortDescription": {"text": "Unused endpoint: PUT /schedules/{schedule_id}"}, "fullDescription": {"text": "`backend/app/routers/maintenance.py` declares `PUT /schedules/{schedule_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-de67e7a5f4f122aa", "name": "Unused endpoint: DELETE /schedules/{schedule_id}", "shortDescription": {"text": "Unused endpoint: DELETE /schedules/{schedule_id}"}, "fullDescription": {"text": "`backend/app/routers/maintenance.py` declares `DELETE /schedules/{schedule_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-711a13052f1c4a45", "name": "Unused endpoint: POST /schedules/{schedule_id}/skip", "shortDescription": {"text": "Unused endpoint: POST /schedules/{schedule_id}/skip"}, "fullDescription": {"text": "`backend/app/routers/maintenance.py` declares `POST /schedules/{schedule_id}/skip` 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-3f60ec8ea5030b99", "name": "Unused endpoint: POST /defer-all-overdue", "shortDescription": {"text": "Unused endpoint: POST /defer-all-overdue"}, "fullDescription": {"text": "`backend/app/routers/maintenance.py` declares `POST /defer-all-overdue` 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-162f10057261ff2d", "name": "Unused endpoint: POST /seed-defaults", "shortDescription": {"text": "Unused endpoint: POST /seed-defaults"}, "fullDescription": {"text": "`backend/app/routers/maintenance.py` declares `POST /seed-defaults` 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-765221f01ecf3d88", "name": "Unused endpoint: GET /due", "shortDescription": {"text": "Unused endpoint: GET /due"}, "fullDescription": {"text": "`backend/app/routers/maintenance.py` declares `GET /due` 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-0eaa08f3119df9b9", "name": "Unused endpoint: GET /next-due", "shortDescription": {"text": "Unused endpoint: GET /next-due"}, "fullDescription": {"text": "`backend/app/routers/maintenance.py` declares `GET /next-due` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5baa8971ebe192a1", "name": "Unused endpoint: GET /", "shortDescription": {"text": "Unused endpoint: GET /"}, "fullDescription": {"text": "`backend/app/routers/flight_library.py` declares `GET /` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-73e6704c039e9f32", "name": "Unused endpoint: GET /stats/summary", "shortDescription": {"text": "Unused endpoint: GET /stats/summary"}, "fullDescription": {"text": "`backend/app/routers/flight_library.py` declares `GET /stats/summary` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5509f14e7b1b6fba", "name": "Unused endpoint: GET /telemetry-stats", "shortDescription": {"text": "Unused endpoint: GET /telemetry-stats"}, "fullDescription": {"text": "`backend/app/routers/flight_library.py` declares `GET /telemetry-stats` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-85269b48b587100a", "name": "Unused endpoint: GET /parser/status", "shortDescription": {"text": "Unused endpoint: GET /parser/status"}, "fullDescription": {"text": "`backend/app/routers/flight_library.py` declares `GET /parser/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-15c6a2dc687df4a1", "name": "Unused endpoint: GET /device-health", "shortDescription": {"text": "Unused endpoint: GET /device-health"}, "fullDescription": {"text": "`backend/app/routers/flight_library.py` declares `GET /device-health` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c6064ee9a3d77c22", "name": "Unused endpoint: POST /device-upload", "shortDescription": {"text": "Unused endpoint: POST /device-upload"}, "fullDescription": {"text": "`backend/app/routers/flight_library.py` declares `POST /device-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-ea5a58749ea95c25", "name": "Unused endpoint: POST /device-upload/async", "shortDescription": {"text": "Unused endpoint: POST /device-upload/async"}, "fullDescription": {"text": "`backend/app/routers/flight_library.py` declares `POST /device-upload/async` 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-d9ba54a0b06f7381", "name": "Unused endpoint: GET /device-upload/status/{batch_id}", "shortDescription": {"text": "Unused endpoint: GET /device-upload/status/{batch_id}"}, "fullDescription": {"text": "`backend/app/routers/flight_library.py` declares `GET /device-upload/status/{batch_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-1bb36dba3e917a5e", "name": "Unused endpoint: POST /backfill-aircraft", "shortDescription": {"text": "Unused endpoint: POST /backfill-aircraft"}, "fullDescription": {"text": "`backend/app/routers/flight_library.py` declares `POST /backfill-aircraft` 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-640eafd2027f2fbe", "name": "Unused endpoint: GET /reprocess/status", "shortDescription": {"text": "Unused endpoint: GET /reprocess/status"}, "fullDescription": {"text": "`backend/app/routers/flight_library.py` declares `GET /reprocess/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-39984462cb48f497", "name": "Unused endpoint: POST /reprocess/all", "shortDescription": {"text": "Unused endpoint: POST /reprocess/all"}, "fullDescription": {"text": "`backend/app/routers/flight_library.py` declares `POST /reprocess/all` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7b9a65ca3cc78fda", "name": "Unused endpoint: POST /reprocess", "shortDescription": {"text": "Unused endpoint: POST /reprocess"}, "fullDescription": {"text": "`backend/app/routers/flight_library.py` declares `POST /reprocess` 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-5dcbd3014b882e0e", "name": "Unused endpoint: GET /airspace/aircraft", "shortDescription": {"text": "Unused endpoint: GET /airspace/aircraft"}, "fullDescription": {"text": "`backend/app/routers/flight_library.py` declares `GET /airspace/aircraft` 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-a8eb6eeb985e58ed", "name": "Unused endpoint: GET /{flight_id}", "shortDescription": {"text": "Unused endpoint: GET /{flight_id}"}, "fullDescription": {"text": "`backend/app/routers/flight_library.py` declares `GET /{flight_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-e5f156b1418b2c20", "name": "Unused endpoint: GET /{flight_id}/telemetry", "shortDescription": {"text": "Unused endpoint: GET /{flight_id}/telemetry"}, "fullDescription": {"text": "`backend/app/routers/flight_library.py` declares `GET /{flight_id}/telemetry` 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-33fbb765c8ef346b", "name": "Unused endpoint: GET /{flight_id}/track", "shortDescription": {"text": "Unused endpoint: GET /{flight_id}/track"}, "fullDescription": {"text": "`backend/app/routers/flight_library.py` declares `GET /{flight_id}/track` 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/24583"}, "properties": {"repository": "BigBill1418/DroneOpsCommand", "repoUrl": "https://github.com/BigBill1418/DroneOpsCommand", "branch": "main"}, "results": [{"ruleId": "scanner-c1a70b4f7fc5e4c8", "level": "note", "message": {"text": "Possibly dead Python function: is_password_compliant"}, "properties": {"repobilityId": "27dda744f8ac1650", "scanner": "scanner-primary", "fingerprint": "c1a70b4f7fc5e4c8", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/auth/jwt.py:54"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1a2bf4a3fb6d1628", "level": "note", "message": {"text": "Possibly dead Python function: verify_password"}, "properties": {"repobilityId": "db0091ab19f6dc78", "scanner": "scanner-primary", "fingerprint": "1a2bf4a3fb6d1628", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/auth/jwt.py:104"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-045ae9bfb1a31db6", "level": "note", "message": {"text": "Possibly dead Python function: generate_map_geojson"}, "properties": {"repobilityId": "30c4745002123a7f", "scanner": "scanner-primary", "fingerprint": "045ae9bfb1a31db6", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/services/map_renderer.py:172"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-58959c5938e18705", "level": "note", "message": {"text": "Possibly dead Python function: render_static_map"}, "properties": {"repobilityId": "65a3e78dcc3aa827", "scanner": "scanner-primary", "fingerprint": "58959c5938e18705", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/services/map_renderer.py:222"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5b66fb7aa4e56087", "level": "note", "message": {"text": "Possibly dead Python function: delete_rotation_hint"}, "properties": {"repobilityId": "a85b804e8e2f4cc4", "scanner": "scanner-primary", "fingerprint": "5b66fb7aa4e56087", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/services/rotation_hint.py:93"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-cee50a49147a37b3", "level": "note", "message": {"text": "Possibly dead Python function: downgrade"}, "properties": {"repobilityId": "c03debbf11efa0c5", "scanner": "scanner-primary", "fingerprint": "cee50a49147a37b3", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/0002_p2_p3_indexes.py:98"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-21383e8eeeb686a9", "level": "note", "message": {"text": "Possibly dead Python function: downgrade"}, "properties": {"repobilityId": "c03debbf11efa0c5", "scanner": "scanner-primary", "fingerprint": "21383e8eeeb686a9", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/0001_baseline_schema.py:86"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e10347a692689a66", "level": "warning", "message": {"text": "Privileged port 70 in use"}, "properties": {"repobilityId": "353d31c086b0a24a", "scanner": "scanner-primary", "fingerprint": "e10347a692689a66", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/init-standby.sh"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-2ff7aabfceec3883", "level": "warning", "message": {"text": "Privileged port 3 in use"}, "properties": {"repobilityId": "261b7b1c6a18d412", "scanner": "scanner-primary", "fingerprint": "2ff7aabfceec3883", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/snapshot.sh"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c63936330cbaabb6", "level": "warning", "message": {"text": "Privileged port 23 in use"}, "properties": {"repobilityId": "a1230e3dfc4becfa", "scanner": "scanner-primary", "fingerprint": "c63936330cbaabb6", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/snapshot.sh"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-2aa94b4cef2222f0", "level": "warning", "message": {"text": "Privileged port 17 in use"}, "properties": {"repobilityId": "0bf38fb8f89ec589", "scanner": "scanner-primary", "fingerprint": "2aa94b4cef2222f0", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/snapshot.sh"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1f66ad88286ca30a", "level": "warning", "message": {"text": "Dockerfile runs as root: backend/Dockerfile"}, "properties": {"repobilityId": "7afd2b0e8a8c9eeb", "scanner": "scanner-primary", "fingerprint": "1f66ad88286ca30a", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-714c31ca9f474ae6", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim"}, "properties": {"repobilityId": "f614a1e41f331b37", "scanner": "scanner-primary", "fingerprint": "714c31ca9f474ae6", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/Dockerfile"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3afdadac64db1d18", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: rust:1.85-bookworm"}, "properties": {"repobilityId": "59f9aa76a70fcda2", "scanner": "scanner-primary", "fingerprint": "3afdadac64db1d18", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "flight-parser/Dockerfile"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-b5a5f8278aeca929", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: debian:bookworm-slim"}, "properties": {"repobilityId": "feaaad030f10c33a", "scanner": "scanner-primary", "fingerprint": "b5a5f8278aeca929", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "flight-parser/Dockerfile"}, "region": {"startLine": 9}}}]}, {"ruleId": "scanner-faa134129e5545ff", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-alpine"}, "properties": {"repobilityId": "335286791b6195f7", "scanner": "scanner-primary", "fingerprint": "faa134129e5545ff", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/Dockerfile"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-b048d166901fd868", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: nginx:alpine"}, "properties": {"repobilityId": "6c1c5ef684ace91f", "scanner": "scanner-primary", "fingerprint": "b048d166901fd868", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/Dockerfile"}, "region": {"startLine": 21}}}]}, {"ruleId": "scanner-259566113ecd44c8", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in backend/app/main.py:591"}, "properties": {"repobilityId": "1a4affa5fa498eb7", "scanner": "scanner-primary", "fingerprint": "259566113ecd44c8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/main.py"}, "region": {"startLine": 591}}}]}, {"ruleId": "scanner-7dba7b407e1e56fd", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in frontend/src/api/client.ts:53"}, "properties": {"repobilityId": "18484a1a86105988", "scanner": "scanner-primary", "fingerprint": "7dba7b407e1e56fd", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/src/api/client.ts"}, "region": {"startLine": 53}}}]}, {"ruleId": "scanner-d93be7341f1fb1a0", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in frontend/src/api/__tests__/client.refresh.test.ts:19"}, "properties": {"repobilityId": "b38de517074d4904", "scanner": "scanner-primary", "fingerprint": "d93be7341f1fb1a0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/src/api/__tests__/client.refresh.test.ts"}, "region": {"startLine": 19}}}]}, {"ruleId": "scanner-ac1afb9ec012418f", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in frontend/src/hooks/useAuth.ts:49"}, "properties": {"repobilityId": "1c4c38eeb8ec8ae3", "scanner": "scanner-primary", "fingerprint": "ac1afb9ec012418f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/src/hooks/useAuth.ts"}, "region": {"startLine": 49}}}]}, {"ruleId": "scanner-5846a5f722a6913b", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in frontend/src/pages/settings/AccountTab.tsx:58"}, "properties": {"repobilityId": "12038795feb36a82", "scanner": "scanner-primary", "fingerprint": "5846a5f722a6913b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/src/pages/settings/AccountTab.tsx"}, "region": {"startLine": 58}}}]}, {"ruleId": "scanner-12522bf27bea173c", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "b2b7bb3a189568fe", "scanner": "scanner-primary", "fingerprint": "12522bf27bea173c", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/secret-scan.yml"}, "region": {"startLine": 30}}}]}, {"ruleId": "scanner-2ac523aee0988b95", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "bb373777247cee53", "scanner": "scanner-primary", "fingerprint": "2ac523aee0988b95", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/auto-merge-claude.yml"}, "region": {"startLine": 16}}}]}, {"ruleId": "scanner-600299574bb6a28a", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "22fd349057b24dea", "scanner": "scanner-primary", "fingerprint": "600299574bb6a28a", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/auto-merge-claude.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1351fbbcefb7190c", "level": "note", "message": {"text": "Very large file: backend/app/routers/flight_library.py (2371 lines)"}, "properties": {"repobilityId": "5cb82ebb033f34e2", "scanner": "scanner-primary", "fingerprint": "1351fbbcefb7190c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c51694e618d70141", "level": "note", "message": {"text": "Very large file: frontend/src/pages/Flights.tsx (1165 lines)"}, "properties": {"repobilityId": "6e06c96edd2bce40", "scanner": "scanner-primary", "fingerprint": "c51694e618d70141", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6c23848d4bd57338", "level": "note", "message": {"text": "Very large file: frontend/src/pages/MissionWizardLegacy.tsx (1441 lines)"}, "properties": {"repobilityId": "66e4d0e2488d8aae", "scanner": "scanner-primary", "fingerprint": "6c23848d4bd57338", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-7a0440cf3a051593", "level": "note", "message": {"text": "Very large file: frontend/src/pages/Dashboard.tsx (1207 lines)"}, "properties": {"repobilityId": "4a4d2b100afdd2b6", "scanner": "scanner-primary", "fingerprint": "7a0440cf3a051593", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "35e6f0e8388fe189", "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": "b52aa0453e75c154", "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": "a8f8f17d16f9afba", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-0bcf7f3143ddcf01", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/app/config.py:17"}, "properties": {"repobilityId": "577d4c52a2b51e6d", "scanner": "scanner-primary", "fingerprint": "0bcf7f3143ddcf01", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7f6f9909ce256f54", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/app/main.py:56"}, "properties": {"repobilityId": "6133062f451c6f24", "scanner": "scanner-primary", "fingerprint": "7f6f9909ce256f54", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-331c74ebbd43b232", "level": "none", "message": {"text": "Commented-code block (8 lines) in backend/app/db_migrations.py:113"}, "properties": {"repobilityId": "1c9113b087ea0eb4", "scanner": "scanner-primary", "fingerprint": "331c74ebbd43b232", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1729c4edb11563cf", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/app/seed.py:313"}, "properties": {"repobilityId": "d369791e2213643a", "scanner": "scanner-primary", "fingerprint": "1729c4edb11563cf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-007993f12d5720dc", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/app/observability/sentry.py:28"}, "properties": {"repobilityId": "582c6bb28405d276", "scanner": "scanner-primary", "fingerprint": "007993f12d5720dc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-08a3d20314227408", "level": "none", "message": {"text": "Commented-code block (7 lines) in backend/app/auth/jwt.py:137"}, "properties": {"repobilityId": "ac15f626a5fd3fc4", "scanner": "scanner-primary", "fingerprint": "08a3d20314227408", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7b7c4c7f8fdbb8bc", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/app/models/tos_acceptance.py:42"}, "properties": {"repobilityId": "1c1837d70e22a69a", "scanner": "scanner-primary", "fingerprint": "7b7c4c7f8fdbb8bc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cc129c9c36c0ee2a", "level": "none", "message": {"text": "Commented-code block (8 lines) in backend/app/models/mission.py:71"}, "properties": {"repobilityId": "286e4e263ce3f52d", "scanner": "scanner-primary", "fingerprint": "cc129c9c36c0ee2a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2a3f769b17890a2d", "level": "none", "message": {"text": "Commented-code block (7 lines) in backend/app/models/device_api_key.py:31"}, "properties": {"repobilityId": "2907c21e98eeefd0", "scanner": "scanner-primary", "fingerprint": "2a3f769b17890a2d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6627e3c24f81d698", "level": "none", "message": {"text": "Commented-code block (7 lines) in backend/app/models/report.py:30"}, "properties": {"repobilityId": "e6a050f613a3d9db", "scanner": "scanner-primary", "fingerprint": "6627e3c24f81d698", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6400b546d187374f", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/app/routers/reports.py:346"}, "properties": {"repobilityId": "72cd96456b4b548d", "scanner": "scanner-primary", "fingerprint": "6400b546d187374f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ae0f3c1a20b98661", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/app/routers/stripe_webhook.py:37"}, "properties": {"repobilityId": "86f494f7504e55d5", "scanner": "scanner-primary", "fingerprint": "ae0f3c1a20b98661", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-abc2811d15004364", "level": "none", "message": {"text": "Commented-code block (9 lines) in backend/app/routers/invoices.py:30"}, "properties": {"repobilityId": "e018b988e46b8a66", "scanner": "scanner-primary", "fingerprint": "abc2811d15004364", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-38f8760b4c1686d4", "level": "none", "message": {"text": "Commented-code block (7 lines) in backend/app/routers/maintenance.py:525"}, "properties": {"repobilityId": "6c84856a5accb7e8", "scanner": "scanner-primary", "fingerprint": "38f8760b4c1686d4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-25ac945078c3dd5f", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/app/routers/flight_library.py:44"}, "properties": {"repobilityId": "44bfe5ccbbcb7247", "scanner": "scanner-primary", "fingerprint": "25ac945078c3dd5f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1f13df23de832e64", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/app/routers/missions.py:452"}, "properties": {"repobilityId": "e4161a0f48cf5529", "scanner": "scanner-primary", "fingerprint": "1f13df23de832e64", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-99156c7a4eb5245e", "level": "none", "message": {"text": "Commented-code block (7 lines) in backend/app/routers/tos.py:177"}, "properties": {"repobilityId": "023118d5e5e833b3", "scanner": "scanner-primary", "fingerprint": "99156c7a4eb5245e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-553f203101901e7f", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/app/routers/auth.py:243"}, "properties": {"repobilityId": "ae57930aa9d78eea", "scanner": "scanner-primary", "fingerprint": "553f203101901e7f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b5a752858125ffcb", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/app/routers/client_portal.py:278"}, "properties": {"repobilityId": "43be69050e4d4e3d", "scanner": "scanner-primary", "fingerprint": "b5a752858125ffcb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a783f6e7b1402ec0", "level": "note", "message": {"text": "Legacy-named symbol `uploaded_backup` in backend/app/routers/backup.py:276"}, "properties": {"repobilityId": "2243617ac61a1a24", "scanner": "scanner-primary", "fingerprint": "a783f6e7b1402ec0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-860ba132f3b3644f", "level": "none", "message": {"text": "Commented-code block (7 lines) in backend/app/routers/backup.py:676"}, "properties": {"repobilityId": "860ca1c7f09cfbfe", "scanner": "scanner-primary", "fingerprint": "860ba132f3b3644f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5f786530ac7fce4d", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/app/tasks/celery_tasks.py:61"}, "properties": {"repobilityId": "29f208220f13b2e6", "scanner": "scanner-primary", "fingerprint": "5f786530ac7fce4d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5be60b42e8cb0185", "level": "none", "message": {"text": "Commented-code block (7 lines) in backend/app/services/email_service.py:207"}, "properties": {"repobilityId": "6aba8901b1c4890a", "scanner": "scanner-primary", "fingerprint": "5be60b42e8cb0185", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-be9f3c05c8a9bd89", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/app/services/opendronelog.py:11"}, "properties": {"repobilityId": "f81af14027f0aa3b", "scanner": "scanner-primary", "fingerprint": "be9f3c05c8a9bd89", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6f6022edf7d53b6d", "level": "none", "message": {"text": "Commented-code block (9 lines) in backend/app/services/map_renderer.py:17"}, "properties": {"repobilityId": "8eece927e046f3e0", "scanner": "scanner-primary", "fingerprint": "6f6022edf7d53b6d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8ad7f35493dc08a9", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/app/services/report_audience.py:22"}, "properties": {"repobilityId": "fd33bc350ce55140", "scanner": "scanner-primary", "fingerprint": "8ad7f35493dc08a9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d420ecc1ac942c54", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/app/services/claude_llm.py:74"}, "properties": {"repobilityId": "83070941640e3640", "scanner": "scanner-primary", "fingerprint": "d420ecc1ac942c54", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3017e29bf8975606", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/app/services/stripe_service.py:113"}, "properties": {"repobilityId": "7d1c7fbadb74fef8", "scanner": "scanner-primary", "fingerprint": "3017e29bf8975606", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6ac7714b22bc1a48", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/app/services/ntfy.py:57"}, "properties": {"repobilityId": "322e39dcc56af4d8", "scanner": "scanner-primary", "fingerprint": "6ac7714b22bc1a48", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d4d1d21a72feb67c", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/tests/test_flight_attribution.py:69"}, "properties": {"repobilityId": "fc03aca8c98851f8", "scanner": "scanner-primary", "fingerprint": "d4d1d21a72feb67c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-53d85a31670deba8", "level": "note", "message": {"text": "Legacy-named symbol `my_backup` in backend/tests/test_backup_nonblocking.py:168"}, "properties": {"repobilityId": "041415adf2fc0392", "scanner": "scanner-primary", "fingerprint": "53d85a31670deba8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-cfc8a77389af94b3", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/tests/test_tos_customer_sync.py:82"}, "properties": {"repobilityId": "8f1f5debaadfe15d", "scanner": "scanner-primary", "fingerprint": "cfc8a77389af94b3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4f38ed5cc13af5ec", "level": "note", "message": {"text": "Legacy-named symbol `test_reuse_returns_none_when_session_too_old` in backend/tests/test_pay_idempotency.py:99"}, "properties": {"repobilityId": "271ed3e023a0795d", "scanner": "scanner-primary", "fingerprint": "4f38ed5cc13af5ec", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-4e1bfab6d77ea9d5", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/tests/test_stripe_nonblocking.py:43"}, "properties": {"repobilityId": "58096c17fa4fdcc4", "scanner": "scanner-primary", "fingerprint": "4e1bfab6d77ea9d5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0d521f001231541d", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/tests/test_health_stripe_db_lookup.py:56"}, "properties": {"repobilityId": "2f6eaf8f5730aa8b", "scanner": "scanner-primary", "fingerprint": "0d521f001231541d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-762bac0622c5fae1", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/tests/test_pdf_invoice_pay_link.py:421"}, "properties": {"repobilityId": "45d2e79916ddd38b", "scanner": "scanner-primary", "fingerprint": "762bac0622c5fae1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0d0008c339f1a142", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/alembic/env.py:24"}, "properties": {"repobilityId": "488f9284e5157c27", "scanner": "scanner-primary", "fingerprint": "0d0008c339f1a142", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8753b1bfc70b49f7", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/alembic/versions/0001_baseline_schema.py:75"}, "properties": {"repobilityId": "cbada0da64590eb3", "scanner": "scanner-primary", "fingerprint": "8753b1bfc70b49f7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-85083125925fd30d", "level": "none", "message": {"text": "Commented-code block (9 lines) in frontend/vite.config.ts:29"}, "properties": {"repobilityId": "714f74635ce6fd7d", "scanner": "scanner-primary", "fingerprint": "85083125925fd30d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3a8d27abf18e11fc", "level": "note", "message": {"text": "Legacy-named symbol `MissionWizardLegacy` in frontend/src/App.tsx:29"}, "properties": {"repobilityId": "cd4e04fd426f6861", "scanner": "scanner-primary", "fingerprint": "3a8d27abf18e11fc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-55b32ac3312a80da", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/src/App.tsx:15"}, "properties": {"repobilityId": "45e2acfb5f14d13a", "scanner": "scanner-primary", "fingerprint": "55b32ac3312a80da", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-94796013a2bf35fb", "level": "none", "message": {"text": "Commented-code block (10 lines) in frontend/src/api/client.ts:17"}, "properties": {"repobilityId": "9615dfe07e4d40fc", "scanner": "scanner-primary", "fingerprint": "94796013a2bf35fb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cf65a1ce64f19757", "level": "none", "message": {"text": "Commented-code block (9 lines) in frontend/src/api/types.ts:53"}, "properties": {"repobilityId": "66e12378c6dda092", "scanner": "scanner-primary", "fingerprint": "cf65a1ce64f19757", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f81b3adcfebc11e3", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/components/ErrorBoundary.tsx:69"}, "properties": {"repobilityId": "978555cf2384de5c", "scanner": "scanner-primary", "fingerprint": "f81b3adcfebc11e3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2166427e57b10580", "level": "none", "message": {"text": "Commented-code block (7 lines) in frontend/src/pages/MissionImagesEdit.tsx:208"}, "properties": {"repobilityId": "ac6989245d8905ce", "scanner": "scanner-primary", "fingerprint": "2166427e57b10580", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ca038d2ea33bf3d2", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/pages/MissionInvoiceEdit.tsx:292"}, "properties": {"repobilityId": "af0da892c7cf21fd", "scanner": "scanner-primary", "fingerprint": "ca038d2ea33bf3d2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7d6fcfebf61be3af", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/src/pages/Batteries.tsx:86"}, "properties": {"repobilityId": "7592a959b82fed48", "scanner": "scanner-primary", "fingerprint": "7d6fcfebf61be3af", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5316e12cdddb6d85", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/pages/TosAcceptance.tsx:55"}, "properties": {"repobilityId": "6db0bbab41d606bf", "scanner": "scanner-primary", "fingerprint": "5316e12cdddb6d85", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ccbd5a7a8b83f33e", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/src/pages/Missions.tsx:33"}, "properties": {"repobilityId": "3857eca4ab019118", "scanner": "scanner-primary", "fingerprint": "ccbd5a7a8b83f33e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-58d582a6b9ec9a3d", "level": "none", "message": {"text": "Commented-code block (8 lines) in frontend/src/pages/MissionReportEdit.tsx:262"}, "properties": {"repobilityId": "f546d5e99abe0879", "scanner": "scanner-primary", "fingerprint": "58d582a6b9ec9a3d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-631543f12db2e9eb", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/pages/Airspace.tsx:109"}, "properties": {"repobilityId": "968731484df23eee", "scanner": "scanner-primary", "fingerprint": "631543f12db2e9eb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1574ba724578e947", "level": "none", "message": {"text": "Commented-code block (7 lines) in frontend/src/pages/MissionDetail.tsx:115"}, "properties": {"repobilityId": "bad8ce0e8ef32cda", "scanner": "scanner-primary", "fingerprint": "1574ba724578e947", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-214efc5ca0c6a9a8", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/src/pages/Customers.tsx:133"}, "properties": {"repobilityId": "bbf84648d5a9ffc7", "scanner": "scanner-primary", "fingerprint": "214efc5ca0c6a9a8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9d3afc905ee07e25", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/pages/Maintenance.tsx:48"}, "properties": {"repobilityId": "1ef6c0029b1ec57a", "scanner": "scanner-primary", "fingerprint": "9d3afc905ee07e25", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fb789276d6f505ea", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/pages/MissionWizardLegacy.tsx:743"}, "properties": {"repobilityId": "a63b4cd1cdbd0262", "scanner": "scanner-primary", "fingerprint": "fb789276d6f505ea", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-28f85732794aa4d5", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/src/pages/Dashboard.tsx:219"}, "properties": {"repobilityId": "7316138cf5b04212", "scanner": "scanner-primary", "fingerprint": "28f85732794aa4d5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6dde3246f40810e3", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/pages/__tests__/MissionReportEdit.test.tsx:429"}, "properties": {"repobilityId": "4ec4a8b03941db9b", "scanner": "scanner-primary", "fingerprint": "6dde3246f40810e3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-108dfa6f6a9b1bf9", "level": "note", "message": {"text": "Legacy-named symbol `MissionWizardLegacy` in frontend/src/__tests__/missions.routes.test.tsx:27"}, "properties": {"repobilityId": "87689ab6457adf74", "scanner": "scanner-primary", "fingerprint": "108dfa6f6a9b1bf9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-319e66a630e14977", "level": "none", "message": {"text": "2 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "d838d1fc5d8231c9", "scanner": "scanner-primary", "fingerprint": "319e66a630e14977", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "7bfba287c4999b89", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "025542378619021e", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "e3a568380b591f82", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "86f4e0ae786704e2", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-02525d39071dd2c7", "level": "note", "message": {"text": "Near-duplicate function bodies in 5 places"}, "properties": {"repobilityId": "6eebd7b9f0a3bc86", "scanner": "scanner-primary", "fingerprint": "02525d39071dd2c7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "1e9fd669794f83b2", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "6fd76af5ba427c2d", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "44a70fe7ef35657e", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "3c6742afb63ce6f5", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "b97401e326b5572f", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-b4169676880f797e", "level": "warning", "message": {"text": "Frontend route `/tos/accept` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "1e439c2cea89ebf6", "scanner": "scanner-primary", "fingerprint": "b4169676880f797e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-aa7e1b3a46467d83", "level": "warning", "message": {"text": "Frontend route `/intake/:token` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "72729155bee1f276", "scanner": "scanner-primary", "fingerprint": "aa7e1b3a46467d83", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-985d92059858eed6", "level": "warning", "message": {"text": "Frontend route `/client/mission/:missionId` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "6da80a55eeabc508", "scanner": "scanner-primary", "fingerprint": "985d92059858eed6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-766ea53084e81376", "level": "warning", "message": {"text": "Frontend route `/client/:token` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "bed5836972c7714c", "scanner": "scanner-primary", "fingerprint": "766ea53084e81376", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-ee0b99dc1524159e", "level": "warning", "message": {"text": "Frontend route `/flights/:id/replay` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "373c9b1a29e2b72f", "scanner": "scanner-primary", "fingerprint": "ee0b99dc1524159e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-a302eea842b6f162", "level": "warning", "message": {"text": "Frontend route `/missions/new` has no Link/navigate to it \u2014 frontend/src/__tests__/missions.routes.test.tsx"}, "properties": {"repobilityId": "2e47d7c448600c6c", "scanner": "scanner-primary", "fingerprint": "a302eea842b6f162", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-dabd415b9d928f79", "level": "warning", "message": {"text": "Frontend route `/missions/:id/edit` has no Link/navigate to it \u2014 frontend/src/__tests__/missions.routes.test.tsx"}, "properties": {"repobilityId": "f48695aaa8a5fe72", "scanner": "scanner-primary", "fingerprint": "dabd415b9d928f79", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-ca579f37ee3bfaa4", "level": "warning", "message": {"text": "Frontend route `/missions/:id/edit-legacy` has no Link/navigate to it \u2014 frontend/src/__tests__/missions.routes.test.tsx"}, "properties": {"repobilityId": "6cc00131b9b21812", "scanner": "scanner-primary", "fingerprint": "ca579f37ee3bfaa4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-58ffd68410f6e32e", "level": "warning", "message": {"text": "Frontend route `/missions/:id/details/edit` has no Link/navigate to it \u2014 frontend/src/__tests__/missions.routes.test.tsx"}, "properties": {"repobilityId": "926c8eb8bbd2a844", "scanner": "scanner-primary", "fingerprint": "58ffd68410f6e32e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-33ba5c571d6aa720", "level": "warning", "message": {"text": "Frontend route `/missions/:id/flights/edit` has no Link/navigate to it \u2014 frontend/src/__tests__/missions.routes.test.tsx"}, "properties": {"repobilityId": "d7940dc6c7f76112", "scanner": "scanner-primary", "fingerprint": "33ba5c571d6aa720", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-cf62451dd24d1ca2", "level": "warning", "message": {"text": "Frontend route `/missions/:id/images/edit` has no Link/navigate to it \u2014 frontend/src/__tests__/missions.routes.test.tsx"}, "properties": {"repobilityId": "4102ffabaae9f55b", "scanner": "scanner-primary", "fingerprint": "cf62451dd24d1ca2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-2f06b96532a6b636", "level": "warning", "message": {"text": "Frontend route `/missions/:id/report/edit` has no Link/navigate to it \u2014 frontend/src/__tests__/missions.routes.test.tsx"}, "properties": {"repobilityId": "3c0f9f66d4bf9b30", "scanner": "scanner-primary", "fingerprint": "2f06b96532a6b636", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-8b93443c3d589389", "level": "warning", "message": {"text": "Frontend route `/missions/:id/invoice/edit` has no Link/navigate to it \u2014 frontend/src/__tests__/missions.routes.test.tsx"}, "properties": {"repobilityId": "9eed592f6d33ff2c", "scanner": "scanner-primary", "fingerprint": "8b93443c3d589389", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-52f483a5b084a424", "level": "warning", "message": {"text": "Frontend route `/missions/:id` has no Link/navigate to it \u2014 frontend/src/__tests__/missions.routes.test.tsx"}, "properties": {"repobilityId": "3d4f4b8dff1ce9fe", "scanner": "scanner-primary", "fingerprint": "52f483a5b084a424", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-982e16cec9c73835", "level": "error", "message": {"text": "FastAPI POST `stripe_webhook` without auth dependency \u2014 backend/app/routers/stripe_webhook.py:49"}, "properties": {"repobilityId": "c1095e1c7df0ff7f", "scanner": "scanner-primary", "fingerprint": "982e16cec9c73835", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/routers/stripe_webhook.py"}, "region": {"startLine": 49}}}]}, {"ruleId": "scanner-4c945a2f58c80f07", "level": "error", "message": {"text": "FastAPI POST `device_upload_flights` without auth dependency \u2014 backend/app/routers/flight_library.py:1005"}, "properties": {"repobilityId": "385f3c18004c5d96", "scanner": "scanner-primary", "fingerprint": "4c945a2f58c80f07", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/routers/flight_library.py"}, "region": {"startLine": 1005}}}]}, {"ruleId": "scanner-0ed2333e76fcceb9", "level": "error", "message": {"text": "FastAPI POST `device_upload_flights_async` without auth dependency \u2014 backend/app/routers/flight_library.py:1102"}, "properties": {"repobilityId": "4c1f2d61e5f35a42", "scanner": "scanner-primary", "fingerprint": "0ed2333e76fcceb9", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/routers/flight_library.py"}, "region": {"startLine": 1102}}}]}, {"ruleId": "scanner-1d5723a4d350c715", "level": "error", "message": {"text": "FastAPI POST `accept_terms` without auth dependency \u2014 backend/app/routers/tos.py:123"}, "properties": {"repobilityId": "ba4844f431730a29", "scanner": "scanner-primary", "fingerprint": "1d5723a4d350c715", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/routers/tos.py"}, "region": {"startLine": 123}}}]}, {"ruleId": "scanner-7765535a35c8c19c", "level": "error", "message": {"text": "FastAPI POST `initial_setup` without auth dependency \u2014 backend/app/routers/auth.py:114"}, "properties": {"repobilityId": "812f1bb655b692ac", "scanner": "scanner-primary", "fingerprint": "7765535a35c8c19c", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/routers/auth.py"}, "region": {"startLine": 114}}}]}, {"ruleId": "scanner-6e96eb6ea29e29c0", "level": "error", "message": {"text": "FastAPI POST `refresh` without auth dependency \u2014 backend/app/routers/auth.py:292"}, "properties": {"repobilityId": "d47feea953b4b493", "scanner": "scanner-primary", "fingerprint": "6e96eb6ea29e29c0", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/routers/auth.py"}, "region": {"startLine": 292}}}]}, {"ruleId": "scanner-9ced65cfc76fc5e9", "level": "error", "message": {"text": "FastAPI POST `validate_client_token` without auth dependency \u2014 backend/app/routers/client_portal.py:88"}, "properties": {"repobilityId": "1c0ad0e97a87da4e", "scanner": "scanner-primary", "fingerprint": "9ced65cfc76fc5e9", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/routers/client_portal.py"}, "region": {"startLine": 88}}}]}, {"ruleId": "scanner-ee00c5f3f5b35c73", "level": "error", "message": {"text": "FastAPI POST `client_login` without auth dependency \u2014 backend/app/routers/client_portal.py:146"}, "properties": {"repobilityId": "1797cca38adb0aed", "scanner": "scanner-primary", "fingerprint": "ee00c5f3f5b35c73", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/routers/client_portal.py"}, "region": {"startLine": 146}}}]}, {"ruleId": "scanner-2010c3324a527334", "level": "error", "message": {"text": "FastAPI POST `create_client_deposit_payment` without auth dependency \u2014 backend/app/routers/client_portal.py:559"}, "properties": {"repobilityId": "8a6ff61cfced46da", "scanner": "scanner-primary", "fingerprint": "2010c3324a527334", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/routers/client_portal.py"}, "region": {"startLine": 559}}}]}, {"ruleId": "scanner-31a96a9524fd5f87", "level": "error", "message": {"text": "FastAPI POST `create_client_balance_payment` without auth dependency \u2014 backend/app/routers/client_portal.py:634"}, "properties": {"repobilityId": "24b6656bcb494c27", "scanner": "scanner-primary", "fingerprint": "31a96a9524fd5f87", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/routers/client_portal.py"}, "region": {"startLine": 634}}}]}, {"ruleId": "scanner-f6819c15b6648153", "level": "error", "message": {"text": "FastAPI POST `create_client_payment` without auth dependency \u2014 backend/app/routers/client_portal.py:725"}, "properties": {"repobilityId": "d98150a84e073310", "scanner": "scanner-primary", "fingerprint": "f6819c15b6648153", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/routers/client_portal.py"}, "region": {"startLine": 725}}}]}, {"ruleId": "scanner-eccd4409f87130c0", "level": "error", "message": {"text": "FastAPI POST `submit_intake_form` without auth dependency \u2014 backend/app/routers/intake.py:401"}, "properties": {"repobilityId": "4c0378e13137ed9a", "scanner": "scanner-primary", "fingerprint": "eccd4409f87130c0", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/routers/intake.py"}, "region": {"startLine": 401}}}]}, {"ruleId": "scanner-6921ccd4acd0e518", "level": "error", "message": {"text": "Dangling fetch: POST /api/auth/refresh (frontend/src/api/client.ts:49)"}, "properties": {"repobilityId": "3c2e65fe7095c67a", "scanner": "scanner-primary", "fingerprint": "6921ccd4acd0e518", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-bdbde59e35967d8a", "level": "error", "message": {"text": "Dangling fetch: GET https://nominatim.openstreetmap.org/search?format=json&addressdetails=1&limit=5&countrycodes=us&q=${encodeURIComponent(query)} (frontend/src/pages/MissionDetailsEdit.tsx:186)"}, "properties": {"repobilityId": "b03e447de74d4a49", "scanner": "scanner-primary", "fingerprint": "bdbde59e35967d8a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5d0618e97e0996c4", "level": "error", "message": {"text": "Dangling fetch: GET https://nominatim.openstreetmap.org/search?format=json&addressdetails=1&limit=5&countrycodes=us&q=${encodeURIComponent(query)} (frontend/src/pages/CustomerIntake.tsx:131)"}, "properties": {"repobilityId": "a221d4be98566a2e", "scanner": "scanner-primary", "fingerprint": "5d0618e97e0996c4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fc2825aae2ee24b6", "level": "error", "message": {"text": "Dangling fetch: POST /api/intake/form/${token} (frontend/src/pages/CustomerIntake.tsx:257)"}, "properties": {"repobilityId": "4b99222b6e33a783", "scanner": "scanner-primary", "fingerprint": "fc2825aae2ee24b6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-57d6b658ada82af0", "level": "error", "message": {"text": "Dangling fetch: GET https://nominatim.openstreetmap.org/search?format=json&addressdetails=1&limit=5&countrycodes=us&q=${encodeURIComponent(query)} (frontend/src/pages/Customers.tsx:104)"}, "properties": {"repobilityId": "09f1479cf5d34928", "scanner": "scanner-primary", "fingerprint": "57d6b658ada82af0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-30165fdb3302f4d6", "level": "error", "message": {"text": "Dangling fetch: POST /api/flight-library/import/opendronelog/stream (frontend/src/pages/settings/FlightDataTab.tsx:160)"}, "properties": {"repobilityId": "0bfeec9663669dd9", "scanner": "scanner-primary", "fingerprint": "30165fdb3302f4d6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a9e9167c19a3be33", "level": "note", "message": {"text": "Unused endpoint: GET /uploads/{filename:path}"}, "properties": {"repobilityId": "1b19303e9f03ce86", "scanner": "scanner-primary", "fingerprint": "a9e9167c19a3be33", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-91f7169b44039bc2", "level": "note", "message": {"text": "Unused endpoint: GET /api/demo/status"}, "properties": {"repobilityId": "c20b9d816231f494", "scanner": "scanner-primary", "fingerprint": "91f7169b44039bc2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4756b4c4da7d2088", "level": "note", "message": {"text": "Unused endpoint: GET /api/health"}, "properties": {"repobilityId": "414de3a0f9ad89dd", "scanner": "scanner-primary", "fingerprint": "4756b4c4da7d2088", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a494e5abd9ee7363", "level": "note", "message": {"text": "Unused endpoint: GET /api/branding"}, "properties": {"repobilityId": "222b9a7afa1c0682", "scanner": "scanner-primary", "fingerprint": "a494e5abd9ee7363", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-897166c3c797b900", "level": "note", "message": {"text": "Unused endpoint: GET /{mission_id}/report"}, "properties": {"repobilityId": "2fed412915b9da38", "scanner": "scanner-primary", "fingerprint": "897166c3c797b900", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-971832f8516c253c", "level": "note", "message": {"text": "Unused endpoint: POST /{mission_id}/report/generate"}, "properties": {"repobilityId": "9b9a030c59e87731", "scanner": "scanner-primary", "fingerprint": "971832f8516c253c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c2e7aaba729401b5", "level": "note", "message": {"text": "Unused endpoint: GET /{mission_id}/report/status/{task_id}"}, "properties": {"repobilityId": "1481e2adad147833", "scanner": "scanner-primary", "fingerprint": "c2e7aaba729401b5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-671f90b18616ca55", "level": "note", "message": {"text": "Unused endpoint: PUT /{mission_id}/report"}, "properties": {"repobilityId": "6f1526c518531fe8", "scanner": "scanner-primary", "fingerprint": "671f90b18616ca55", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-75729a8f8151246a", "level": "note", "message": {"text": "Unused endpoint: POST /{mission_id}/report/pdf"}, "properties": {"repobilityId": "bec2219788092bc8", "scanner": "scanner-primary", "fingerprint": "75729a8f8151246a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-25f2e570dca9d87e", "level": "note", "message": {"text": "Unused endpoint: POST /{mission_id}/report/send"}, "properties": {"repobilityId": "5744c16dc585d0ba", "scanner": "scanner-primary", "fingerprint": "25f2e570dca9d87e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ada1cfaa9e4bde21", "level": "note", "message": {"text": "Unused endpoint: POST /api/webhooks/stripe"}, "properties": {"repobilityId": "f90b4f7d6a7d7a14", "scanner": "scanner-primary", "fingerprint": "ada1cfaa9e4bde21", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7b1c2c94262a0016", "level": "note", "message": {"text": "Unused endpoint: GET /{mission_id}/invoice"}, "properties": {"repobilityId": "42b75cacdf46d409", "scanner": "scanner-primary", "fingerprint": "7b1c2c94262a0016", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-519dafb24f55dc67", "level": "note", "message": {"text": "Unused endpoint: POST /{mission_id}/invoice"}, "properties": {"repobilityId": "a5d21f9444dd5b64", "scanner": "scanner-primary", "fingerprint": "519dafb24f55dc67", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-58d75ba7343298b1", "level": "note", "message": {"text": "Unused endpoint: PUT /{mission_id}/invoice"}, "properties": {"repobilityId": "fed94717bc3d55d6", "scanner": "scanner-primary", "fingerprint": "58d75ba7343298b1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-59f33684c0d3d42f", "level": "note", "message": {"text": "Unused endpoint: PUT /{mission_id}/invoice/items"}, "properties": {"repobilityId": "6d9684c1800921a5", "scanner": "scanner-primary", "fingerprint": "59f33684c0d3d42f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-913324e380583c81", "level": "note", "message": {"text": "Unused endpoint: POST /{mission_id}/invoice/items"}, "properties": {"repobilityId": "fdfbd32ccde3e0d3", "scanner": "scanner-primary", "fingerprint": "913324e380583c81", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8de6a673aa6ccd3b", "level": "note", "message": {"text": "Unused endpoint: PUT /{mission_id}/invoice/items/{item_id}"}, "properties": {"repobilityId": "7f95d9006c837e28", "scanner": "scanner-primary", "fingerprint": "8de6a673aa6ccd3b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ee6e3ba6c9da1c3a", "level": "note", "message": {"text": "Unused endpoint: DELETE /{mission_id}/invoice/items/{item_id}"}, "properties": {"repobilityId": "13eeaf7318cbab60", "scanner": "scanner-primary", "fingerprint": "ee6e3ba6c9da1c3a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a300923b068adcba", "level": "note", "message": {"text": "Unused endpoint: GET /records"}, "properties": {"repobilityId": "cedd26778a01f430", "scanner": "scanner-primary", "fingerprint": "a300923b068adcba", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-655614c94139f993", "level": "note", "message": {"text": "Unused endpoint: POST /records"}, "properties": {"repobilityId": "ceb5ee997a59920e", "scanner": "scanner-primary", "fingerprint": "655614c94139f993", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-089157a1efb317f6", "level": "note", "message": {"text": "Unused endpoint: PUT /records/{record_id}"}, "properties": {"repobilityId": "36fd6a8fed18999c", "scanner": "scanner-primary", "fingerprint": "089157a1efb317f6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f0155c7c3304f70c", "level": "note", "message": {"text": "Unused endpoint: DELETE /records/{record_id}"}, "properties": {"repobilityId": "0b2e61629e5c009e", "scanner": "scanner-primary", "fingerprint": "f0155c7c3304f70c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-32a04f687f7c0bb8", "level": "note", "message": {"text": "Unused endpoint: POST /records/{record_id}/images"}, "properties": {"repobilityId": "98bfdbad0107a95c", "scanner": "scanner-primary", "fingerprint": "32a04f687f7c0bb8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e6f6f9c2c82148e8", "level": "note", "message": {"text": "Unused endpoint: DELETE /records/{record_id}/images/{image_idx}"}, "properties": {"repobilityId": "6b64da0f4c7c8560", "scanner": "scanner-primary", "fingerprint": "e6f6f9c2c82148e8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0d9abfdbc1cc9788", "level": "note", "message": {"text": "Unused endpoint: GET /schedules"}, "properties": {"repobilityId": "b4d2f8c1d3a1d800", "scanner": "scanner-primary", "fingerprint": "0d9abfdbc1cc9788", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-bb4497b3cab9fef5", "level": "note", "message": {"text": "Unused endpoint: POST /schedules"}, "properties": {"repobilityId": "9c41f1598aba6da9", "scanner": "scanner-primary", "fingerprint": "bb4497b3cab9fef5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d29e9aacfa1f95a6", "level": "note", "message": {"text": "Unused endpoint: GET /schedules/{aircraft_id}"}, "properties": {"repobilityId": "79d79b9e11e001a3", "scanner": "scanner-primary", "fingerprint": "d29e9aacfa1f95a6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d7f54e5d794e82ae", "level": "note", "message": {"text": "Unused endpoint: PUT /schedules/{schedule_id}"}, "properties": {"repobilityId": "ac661164b46fc34a", "scanner": "scanner-primary", "fingerprint": "d7f54e5d794e82ae", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-de67e7a5f4f122aa", "level": "note", "message": {"text": "Unused endpoint: DELETE /schedules/{schedule_id}"}, "properties": {"repobilityId": "edaeb81e618fe4e5", "scanner": "scanner-primary", "fingerprint": "de67e7a5f4f122aa", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-711a13052f1c4a45", "level": "note", "message": {"text": "Unused endpoint: POST /schedules/{schedule_id}/skip"}, "properties": {"repobilityId": "b902ee02f5ecfdcd", "scanner": "scanner-primary", "fingerprint": "711a13052f1c4a45", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3f60ec8ea5030b99", "level": "note", "message": {"text": "Unused endpoint: POST /defer-all-overdue"}, "properties": {"repobilityId": "b10b19d3e8934843", "scanner": "scanner-primary", "fingerprint": "3f60ec8ea5030b99", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-162f10057261ff2d", "level": "note", "message": {"text": "Unused endpoint: POST /seed-defaults"}, "properties": {"repobilityId": "ed741bda6ba5dc0e", "scanner": "scanner-primary", "fingerprint": "162f10057261ff2d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-765221f01ecf3d88", "level": "note", "message": {"text": "Unused endpoint: GET /due"}, "properties": {"repobilityId": "7842ba893551c280", "scanner": "scanner-primary", "fingerprint": "765221f01ecf3d88", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0eaa08f3119df9b9", "level": "note", "message": {"text": "Unused endpoint: GET /next-due"}, "properties": {"repobilityId": "128892cef199f6f0", "scanner": "scanner-primary", "fingerprint": "0eaa08f3119df9b9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5baa8971ebe192a1", "level": "note", "message": {"text": "Unused endpoint: GET /"}, "properties": {"repobilityId": "fdd53bf4556ddd4e", "scanner": "scanner-primary", "fingerprint": "5baa8971ebe192a1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-73e6704c039e9f32", "level": "note", "message": {"text": "Unused endpoint: GET /stats/summary"}, "properties": {"repobilityId": "03b0b84418f4a1bb", "scanner": "scanner-primary", "fingerprint": "73e6704c039e9f32", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5509f14e7b1b6fba", "level": "note", "message": {"text": "Unused endpoint: GET /telemetry-stats"}, "properties": {"repobilityId": "466b1926ccbb0746", "scanner": "scanner-primary", "fingerprint": "5509f14e7b1b6fba", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-85269b48b587100a", "level": "note", "message": {"text": "Unused endpoint: GET /parser/status"}, "properties": {"repobilityId": "bfd389b44bbcc76d", "scanner": "scanner-primary", "fingerprint": "85269b48b587100a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-15c6a2dc687df4a1", "level": "note", "message": {"text": "Unused endpoint: GET /device-health"}, "properties": {"repobilityId": "8972db27a394e142", "scanner": "scanner-primary", "fingerprint": "15c6a2dc687df4a1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c6064ee9a3d77c22", "level": "note", "message": {"text": "Unused endpoint: POST /device-upload"}, "properties": {"repobilityId": "eabf5b3714d44b5c", "scanner": "scanner-primary", "fingerprint": "c6064ee9a3d77c22", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ea5a58749ea95c25", "level": "note", "message": {"text": "Unused endpoint: POST /device-upload/async"}, "properties": {"repobilityId": "95a2e641adad5d9e", "scanner": "scanner-primary", "fingerprint": "ea5a58749ea95c25", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d9ba54a0b06f7381", "level": "note", "message": {"text": "Unused endpoint: GET /device-upload/status/{batch_id}"}, "properties": {"repobilityId": "cfa66a091a5e42f5", "scanner": "scanner-primary", "fingerprint": "d9ba54a0b06f7381", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1bb36dba3e917a5e", "level": "note", "message": {"text": "Unused endpoint: POST /backfill-aircraft"}, "properties": {"repobilityId": "c8266e58d10bd433", "scanner": "scanner-primary", "fingerprint": "1bb36dba3e917a5e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-640eafd2027f2fbe", "level": "note", "message": {"text": "Unused endpoint: GET /reprocess/status"}, "properties": {"repobilityId": "1e830dee47931478", "scanner": "scanner-primary", "fingerprint": "640eafd2027f2fbe", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-39984462cb48f497", "level": "note", "message": {"text": "Unused endpoint: POST /reprocess/all"}, "properties": {"repobilityId": "89247ed386a334e7", "scanner": "scanner-primary", "fingerprint": "39984462cb48f497", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7b9a65ca3cc78fda", "level": "note", "message": {"text": "Unused endpoint: POST /reprocess"}, "properties": {"repobilityId": "511e3ab174e30bf4", "scanner": "scanner-primary", "fingerprint": "7b9a65ca3cc78fda", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5dcbd3014b882e0e", "level": "note", "message": {"text": "Unused endpoint: GET /airspace/aircraft"}, "properties": {"repobilityId": "a3b10b7012b11e3f", "scanner": "scanner-primary", "fingerprint": "5dcbd3014b882e0e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a8eb6eeb985e58ed", "level": "note", "message": {"text": "Unused endpoint: GET /{flight_id}"}, "properties": {"repobilityId": "22f71118b73718c6", "scanner": "scanner-primary", "fingerprint": "a8eb6eeb985e58ed", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e5f156b1418b2c20", "level": "note", "message": {"text": "Unused endpoint: GET /{flight_id}/telemetry"}, "properties": {"repobilityId": "646ad98aa420fd71", "scanner": "scanner-primary", "fingerprint": "e5f156b1418b2c20", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-33fbb765c8ef346b", "level": "note", "message": {"text": "Unused endpoint: GET /{flight_id}/track"}, "properties": {"repobilityId": "ea1f8ec5b520714f", "scanner": "scanner-primary", "fingerprint": "33fbb765c8ef346b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}