{"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-360b137b7d085e60", "name": "Possibly dead Python function: send_wrapper", "shortDescription": {"text": "Possibly dead Python function: send_wrapper"}, "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-17aa6e201d95d0cc", "name": "Possibly dead Python function: set_backoff", "shortDescription": {"text": "Possibly dead Python function: set_backoff"}, "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-229ffbf1fb16608d", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/Sidebar.tsx:211", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/Sidebar.tsx:211"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-899d825079ae719a", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/deviceDetail/DeviceLifecyclePolicyPanel.tsx", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/deviceDetail/DeviceLifecyclePolicyPanel.tsx:32"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e662dd424fb4cf9b", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/deviceDetail/DeviceCapabilitiesPanel.tsx:55", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/deviceDetail/DeviceCapabilitiesPanel.tsx:55"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6d6820d11bfda93f", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/deviceDetail/DeviceNodePanel.tsx:110", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/deviceDetail/DeviceNodePanel.tsx:110"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-02f04fad02a952b9", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/dashboard/ActivityCard.tsx:54", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/dashboard/ActivityCard.tsx:54"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-972c7b4b8f7b7184", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/dashboard/AttentionCard.tsx:75", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/dashboard/AttentionCard.tsx:75"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d3524d18644db3e1", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/hostDetail/HostOverviewResourceStrip.tsx:58", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/hostDetail/HostOverviewResourceStrip.tsx:58"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-41e27e8a68edca30", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/hosts/HostDiscoveryModal.tsx:110", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/hosts/HostDiscoveryModal.tsx:110"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bec84bef4d954683", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/DeviceDetail.tsx:225", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/DeviceDetail.tsx:225"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f86e4583a7ef869d", "name": "Docker base image is tag-pinned but not digest-pinned: rust:1.96-slim-bookworm", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: rust:1.96-slim-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-4cded2d88e308a06", "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-aa5acaa49eb8315b", "name": "Containers defined but no K8s/orchestration manifest found", "shortDescription": {"text": "Containers defined but no K8s/orchestration manifest found"}, "fullDescription": {"text": "Repo has Dockerfiles/compose but no Kubernetes/Nomad manifests. If the target deployment is K8s, the manifests may live in a separate ops repo."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-532e54ac0b2f9122", "name": "Insecure pattern 'node_child_process' in frontend/scripts/run-playwright.mjs:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in frontend/scripts/run-playwright.mjs:1"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c66daf275ecae09e", "name": "Possible secret in frontend/e2e/devices.spec.ts", "shortDescription": {"text": "Possible secret in frontend/e2e/devices.spec.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-eea92d7748146c20", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "googleapis/release-please-action@v5 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": "medium", "confidence": 1.0}}, {"id": "scanner-cbe310f193a6df9f", "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-3b51a9585bb32eb9", "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@v6 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-939049ecfb596846", "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@v6 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-b67940ce6b00ef1d", "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-27924aa79fa4a517", "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@v6 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-bfed62aa44767542", "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@v6 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-16526d8b7aa2b5dd", "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-21aa0c39a7c1ca23", "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@v6 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-2ce5dc13f416f529", "name": "Very large file: frontend/src/api/openapi.ts (13488 lines)", "shortDescription": {"text": "Very large file: frontend/src/api/openapi.ts (13488 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-2a9166107fb4eaab", "name": "Very large file: frontend/e2e/devices.spec.ts (2539 lines)", "shortDescription": {"text": "Very large file: frontend/e2e/devices.spec.ts (2539 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-4074b6fe8a1a82c7", "name": "Very large file: router/tests/e2e.rs (1521 lines)", "shortDescription": {"text": "Very large file: router/tests/e2e.rs (1521 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-f90b74c443538983", "name": "Very large file: agent/tests/test_appium_process.py (1745 lines)", "shortDescription": {"text": "Very large file: agent/tests/test_appium_process.py (1745 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-d882a81077a0376c", "name": "Very large file: backend/tests/verification/test_device_verification.py (1828 lines)", "shortDescription": {"text": "Very large file: backend/tests/verification/test_device_verification.py (1828 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-3e54d84a1ec1b373", "name": "Very large file: backend/tests/verification/test_device_verification_units_more.py (1422 lines)", "shortDescription": {"text": "Very large file: backend/tests/verification/test_device_verification_units_more.py (1422 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-d693be3d041bad23", "name": "Very large file: backend/tests/sessions/test_session_viability.py (1436 lines)", "shortDescription": {"text": "Very large file: backend/tests/sessions/test_session_viability.py (1436 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-29b287a0eb192239", "name": "Very large file: backend/tests/sessions/test_session_sync.py (1204 lines)", "shortDescription": {"text": "Very large file: backend/tests/sessions/test_session_sync.py (1204 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-cd8ae370d9666f50", "name": "Very large file: backend/tests/lifecycle/test_lifecycle_policy.py (2441 lines)", "shortDescription": {"text": "Very large file: backend/tests/lifecycle/test_lifecycle_policy.py (2441 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-c0bb34413b27b55b", "name": "Very large file: backend/tests/grid/test_router_units_more.py (3044 lines)", "shortDescription": {"text": "Very large file: backend/tests/grid/test_router_units_more.py (3044 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-4cffb66a8ecd6b06", "name": "Very large file: backend/tests/runs/test_run_service_coverage_more.py (1262 lines)", "shortDescription": {"text": "Very large file: backend/tests/runs/test_run_service_coverage_more.py (1262 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-50bac7841d023b3b", "name": "Very large file: backend/tests/devices/test_devices_api.py (2275 lines)", "shortDescription": {"text": "Very large file: backend/tests/devices/test_devices_api.py (2275 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-d2dd3849b89c453a", "name": "Very large file: backend/tests/devices/test_device_connectivity.py (2355 lines)", "shortDescription": {"text": "Very large file: backend/tests/devices/test_device_connectivity.py (2355 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-88da338ad7a2bb9b", "name": "Very large file: backend/alembic/versions/53063d67b14c_baseline_postgresql_18_schema.py (906 lines)", "shortDescription": {"text": "Very large file: backend/alembic/versions/53063d67b14c_baseline_postgresql_18_schema.py (906 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 33 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 51 placeholder/mock markers across 24 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-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2854d1af299ac2c5", "name": "Commented-code block (5 lines) in frontend/src/components/deviceDetail/DiagnosticBundleButton.tsx:11", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/components/deviceDetail/DiagnosticBundleButton.tsx: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-fe80c2822d526841", "name": "Network/subprocess call without timeout or try/except \u2014 scripts/build_driver_pack_tarball.py:34", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/build_driver_pack_tarball.py:34"}, "fullDescription": {"text": "`subprocess.run(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-30d81c025d1e66f7", "name": "Network/subprocess call without timeout or try/except \u2014 scripts/build_driver_tarballs.py:56", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/build_driver_tarballs.py:56"}, "fullDescription": {"text": "`subprocess.run(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a3d2f85fae506911", "name": "Commented-code block (6 lines) in agent/tests/test_appium_process.py:623", "shortDescription": {"text": "Commented-code block (6 lines) in agent/tests/test_appium_process.py:623"}, "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-26283d9b44b974e7", "name": "Commented-code block (5 lines) in agent/agent_app/appium/process.py:537", "shortDescription": {"text": "Commented-code block (5 lines) in agent/agent_app/appium/process.py:537"}, "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-e8ddd3b2f5e59e00", "name": "Commented-code block (7 lines) in agent/agent_app/pack/adapter_types.py:104", "shortDescription": {"text": "Commented-code block (7 lines) in agent/agent_app/pack/adapter_types.py:104"}, "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-8e9e174dda33e57c", "name": "Commented-code block (6 lines) in agent/agent_app/pack/discovery.py:221", "shortDescription": {"text": "Commented-code block (6 lines) in agent/agent_app/pack/discovery.py:221"}, "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-d44d90e98be9016e", "name": "Commented-code block (5 lines) in agent/agent_app/pack/host_identity.py:20", "shortDescription": {"text": "Commented-code block (5 lines) in agent/agent_app/pack/host_identity.py:20"}, "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-2bb0f49a3bc85cd0", "name": "Commented-code block (6 lines) in agent/agent_app/pack/state.py:306", "shortDescription": {"text": "Commented-code block (6 lines) in agent/agent_app/pack/state.py:306"}, "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-013c4f251b0d8a4f", "name": "Stub function `post_session` (body is just `pass`/`return`) \u2014 driver-packs/adapters/roku/adapter/__init__.py:114", "shortDescription": {"text": "Stub function `post_session` (body is just `pass`/`return`) \u2014 driver-packs/adapters/roku/adapter/__init__.py:114"}, "fullDescription": {"text": "Likely an AI scaffold that was never filled in. Remove or implement."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-12aeb373a4a944e9", "name": "Blocking `urllib.request.urlopen(...)` inside `async def fetch_device_info` \u2014 driver-packs/adapters/roku/adapter/normali", "shortDescription": {"text": "Blocking `urllib.request.urlopen(...)` inside `async def fetch_device_info` \u2014 driver-packs/adapters/roku/adapter/normalize.py:14"}, "fullDescription": {"text": "Sync I/O inside an async function blocks the event loop. While `urllib.request.urlopen(...)` is running, *all* other coroutines on this loop are paused \u2014 silent throughput collapse under concurrency. Use the async equivalent (`httpx.AsyncClient`, `asyncio.sleep`, `aiofiles`) or wrap with `await asyncio.to_thread(...)`."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "high", "confidence": 1.0}}, {"id": "scanner-109fbac147111b4e", "name": "Commented-code block (5 lines) in driver-packs/adapters/android/adapter/normalize.py:16", "shortDescription": {"text": "Commented-code block (5 lines) in driver-packs/adapters/android/adapter/normalize.py:16"}, "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-8fd01ed86434cfa1", "name": "Stub function `post_session` (body is just `pass`/`return`) \u2014 driver-packs/adapters/android/adapter/session.py:15", "shortDescription": {"text": "Stub function `post_session` (body is just `pass`/`return`) \u2014 driver-packs/adapters/android/adapter/session.py:15"}, "fullDescription": {"text": "Likely an AI scaffold that was never filled in. Remove or implement."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7ef98e98bb552219", "name": "Stub function `post_session` (body is just `pass`/`return`) \u2014 driver-packs/adapters/apple/adapter/session.py:20", "shortDescription": {"text": "Stub function `post_session` (body is just `pass`/`return`) \u2014 driver-packs/adapters/apple/adapter/session.py:20"}, "fullDescription": {"text": "Likely an AI scaffold that was never filled in. Remove or implement."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6f8099923ef4e15f", "name": "Commented-code block (7 lines) in backend/tests/conftest.py:236", "shortDescription": {"text": "Commented-code block (7 lines) in backend/tests/conftest.py:236"}, "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-cd2e36be93454300", "name": "Commented-code block (5 lines) in backend/tests/regressions/test_bug_audit_exclude_after_release.py:85", "shortDescription": {"text": "Commented-code block (5 lines) in backend/tests/regressions/test_bug_audit_exclude_after_release.py:85"}, "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-97b2318c503b6c61", "name": "Commented-code block (5 lines) in backend/tests/regressions/test_bug_audit_precondition_sweep_toctou.py:86", "shortDescription": {"text": "Commented-code block (5 lines) in backend/tests/regressions/test_bug_audit_precondition_sweep_toctou.py: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-35e7659e7a9a72b4", "name": "Commented-code block (5 lines) in backend/tests/concurrency/test_concurrency_lifecycle_state.py:314", "shortDescription": {"text": "Commented-code block (5 lines) in backend/tests/concurrency/test_concurrency_lifecycle_state.py:314"}, "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-4c5be410cb3469f9", "name": "Commented-code block (6 lines) in backend/tests/concurrency/test_bug_audit_group_add_members_race.py:67", "shortDescription": {"text": "Commented-code block (6 lines) in backend/tests/concurrency/test_bug_audit_group_add_members_race.py:67"}, "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-f1c276c0455e8f70", "name": "Commented-code block (5 lines) in backend/tests/concurrency/test_bug_audit_approve_host_race.py:90", "shortDescription": {"text": "Commented-code block (5 lines) in backend/tests/concurrency/test_bug_audit_approve_host_race.py:90"}, "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-31593d8b79014c91", "name": "Commented-code block (5 lines) in backend/tests/concurrency/test_concurrency_heartbeat_check_hosts_device_lock.py:44", "shortDescription": {"text": "Commented-code block (5 lines) in backend/tests/concurrency/test_concurrency_heartbeat_check_hosts_device_lock.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-5e2eeb8a5ec67eac", "name": "Commented-code block (6 lines) in backend/tests/concurrency/test_bug_audit_pack_drain_race.py:71", "shortDescription": {"text": "Commented-code block (6 lines) in backend/tests/concurrency/test_bug_audit_pack_drain_race.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-d187be0075fea99c", "name": "Commented-code block (5 lines) in backend/tests/auth/test_auth.py:317", "shortDescription": {"text": "Commented-code block (5 lines) in backend/tests/auth/test_auth.py:317"}, "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-27a967b726949eee", "name": "Legacy-named symbol `model_copy` in backend/tests/analytics/test_fleet_capacity.py:65", "shortDescription": {"text": "Legacy-named symbol `model_copy` in backend/tests/analytics/test_fleet_capacity.py:65"}, "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-05208daf9124d6c8", "name": "Commented-code block (5 lines) in backend/tests/events/test_event_bus_more.py:152", "shortDescription": {"text": "Commented-code block (5 lines) in backend/tests/events/test_event_bus_more.py:152"}, "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-fd38b807fe0ae3ff", "name": "Commented-code block (5 lines) in backend/tests/sessions/test_session_close_lock_order.py:148", "shortDescription": {"text": "Commented-code block (5 lines) in backend/tests/sessions/test_session_close_lock_order.py:148"}, "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-228ac7a669aa3a79", "name": "Commented-code block (6 lines) in backend/tests/sessions/test_session_service.py:563", "shortDescription": {"text": "Commented-code block (6 lines) in backend/tests/sessions/test_session_service.py:563"}, "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-c5892f10e6cac297", "name": "Commented-code block (5 lines) in backend/tests/lifecycle/test_lifecycle_policy.py:1402", "shortDescription": {"text": "Commented-code block (5 lines) in backend/tests/lifecycle/test_lifecycle_policy.py:1402"}, "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-5091e295ef980d8d", "name": "Commented-code block (8 lines) in backend/tests/lifecycle/test_lifecycle_policy_desired_state.py:114", "shortDescription": {"text": "Commented-code block (8 lines) in backend/tests/lifecycle/test_lifecycle_policy_desired_state.py:114"}, "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-c4cb9f7fe7537347", "name": "Commented-code block (8 lines) in backend/tests/lifecycle/test_lifecycle_write_state_allowlist.py:23", "shortDescription": {"text": "Commented-code block (8 lines) in backend/tests/lifecycle/test_lifecycle_write_state_allowlist.py:23"}, "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-3267383bcd21b8ab", "name": "Commented-code block (7 lines) in backend/tests/grid/test_grid_allocation_guards.py:252", "shortDescription": {"text": "Commented-code block (7 lines) in backend/tests/grid/test_grid_allocation_guards.py:252"}, "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-d382b1a6748c5279", "name": "Legacy-named symbol `model_copy` in backend/tests/runs/test_runs_api.py:901", "shortDescription": {"text": "Legacy-named symbol `model_copy` in backend/tests/runs/test_runs_api.py:901"}, "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-a4baa7bcde5db193", "name": "Legacy-named symbol `real_old` in backend/tests/core/test_data_cleanup.py:118", "shortDescription": {"text": "Legacy-named symbol `real_old` in backend/tests/core/test_data_cleanup.py:118"}, "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-4e94b2329b1be8ed", "name": "Commented-code block (5 lines) in backend/tests/webhooks/test_dispatcher.py:150", "shortDescription": {"text": "Commented-code block (5 lines) in backend/tests/webhooks/test_dispatcher.py:150"}, "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-d74064dbb22f21f8", "name": "Commented-code block (5 lines) in backend/tests/hosts/test_host_status_event_after_commit.py:41", "shortDescription": {"text": "Commented-code block (5 lines) in backend/tests/hosts/test_host_status_event_after_commit.py:41"}, "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-72d319c162b80934", "name": "Commented-code block (7 lines) in backend/tests/devices/test_bulk_service.py:196", "shortDescription": {"text": "Commented-code block (7 lines) in backend/tests/devices/test_bulk_service.py:196"}, "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-a251bad2cb24989c", "name": "Commented-code block (5 lines) in backend/tests/devices/test_state_write_guard_resolver.py:61", "shortDescription": {"text": "Commented-code block (5 lines) in backend/tests/devices/test_state_write_guard_resolver.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-8616e2da7e35b0e2", "name": "Legacy-named symbol `pydantic_v2` in backend/scripts/generate_agent_schemas.py:100", "shortDescription": {"text": "Legacy-named symbol `pydantic_v2` in backend/scripts/generate_agent_schemas.py:100"}, "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-76fafc461fae00b1", "name": "Network/subprocess call without timeout or try/except \u2014 backend/scripts/generate_agent_schemas.py:45", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 backend/scripts/generate_agent_schemas.py:45"}, "fullDescription": {"text": "`subprocess.run(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-78ab651140d9b184", "name": "Commented-code block (6 lines) in backend/app/verification/services/execution.py:434", "shortDescription": {"text": "Commented-code block (6 lines) in backend/app/verification/services/execution.py:434"}, "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-1d85812edaba1b03", "name": "Commented-code block (6 lines) in backend/app/events/event_bus.py:307", "shortDescription": {"text": "Commented-code block (6 lines) in backend/app/events/event_bus.py:307"}, "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-5f7a065edbfafd79", "name": "Commented-code block (5 lines) in backend/app/packs/manifest.py:125", "shortDescription": {"text": "Commented-code block (5 lines) in backend/app/packs/manifest.py:125"}, "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-249411683d102f8e", "name": "Commented-code block (7 lines) in backend/app/packs/adapter.py:71", "shortDescription": {"text": "Commented-code block (7 lines) in backend/app/packs/adapter.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-c81e0a41657d6564", "name": "Commented-code block (5 lines) in backend/app/packs/services/lifecycle.py:54", "shortDescription": {"text": "Commented-code block (5 lines) in backend/app/packs/services/lifecycle.py:54"}, "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-5dc709bce33e5640", "name": "Commented-code block (7 lines) in backend/app/packs/services/discovery.py:221", "shortDescription": {"text": "Commented-code block (7 lines) in backend/app/packs/services/discovery.py:221"}, "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-3cbbcb37b8a82c98", "name": "Commented-code block (5 lines) in backend/app/packs/services/ingest.py:158", "shortDescription": {"text": "Commented-code block (5 lines) in backend/app/packs/services/ingest.py:158"}, "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-f32a5c7fd42ff4a4", "name": "Commented-code block (7 lines) in backend/app/packs/services/platform_resolver.py:149", "shortDescription": {"text": "Commented-code block (7 lines) in backend/app/packs/services/platform_resolver.py:149"}, "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-a8ea8686444f1082", "name": "Commented-code block (5 lines) in backend/app/sessions/service_viability.py:87", "shortDescription": {"text": "Commented-code block (5 lines) in backend/app/sessions/service_viability.py:87"}, "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-5619e3db8f4d2ea6", "name": "Commented-code block (7 lines) in backend/app/sessions/service_sync.py:143", "shortDescription": {"text": "Commented-code block (7 lines) in backend/app/sessions/service_sync.py:143"}, "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-c990f84159c6ac7e", "name": "Commented-code block (7 lines) in backend/app/sessions/service.py:203", "shortDescription": {"text": "Commented-code block (7 lines) in backend/app/sessions/service.py:203"}, "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-49d02bfb9c1706c0", "name": "Commented-code block (10 lines) in backend/app/lifecycle/services/policy.py:155", "shortDescription": {"text": "Commented-code block (10 lines) in backend/app/lifecycle/services/policy.py:155"}, "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-40829bdc60c72232", "name": "Commented-code block (6 lines) in backend/app/lifecycle/services/operator_node.py:176", "shortDescription": {"text": "Commented-code block (6 lines) in backend/app/lifecycle/services/operator_node.py:176"}, "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-3b30f11c89c2e059", "name": "Commented-code block (8 lines) in backend/app/lifecycle/services/actions.py:289", "shortDescription": {"text": "Commented-code block (8 lines) in backend/app/lifecycle/services/actions.py:289"}, "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-5d197cb216a124a5", "name": "Commented-code block (7 lines) in backend/app/grid/allocation.py:83", "shortDescription": {"text": "Commented-code block (7 lines) in backend/app/grid/allocation.py:83"}, "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-5f7639873aaffc0a", "name": "Commented-code block (5 lines) in backend/app/grid/router_internal.py:106", "shortDescription": {"text": "Commented-code block (5 lines) in backend/app/grid/router_internal.py:106"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-65a49b32888beb2b", "name": "Commented-code block (8 lines) in backend/app/runs/service_lifecycle.py:22", "shortDescription": {"text": "Commented-code block (8 lines) in backend/app/runs/service_lifecycle.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-b70f28ae01892aad", "name": "Commented-code block (7 lines) in backend/app/runs/router.py:250", "shortDescription": {"text": "Commented-code block (7 lines) in backend/app/runs/router.py:250"}, "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-5e1e14cf34a60606", "name": "Commented-code block (13 lines) in backend/app/runs/service_reaper.py:74", "shortDescription": {"text": "Commented-code block (13 lines) in backend/app/runs/service_reaper.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-c3a32d441d5bb65e", "name": "Commented-code block (6 lines) in backend/app/runs/service_lifecycle_release.py:223", "shortDescription": {"text": "Commented-code block (6 lines) in backend/app/runs/service_lifecycle_release.py:223"}, "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-dbc58e139e76fff7", "name": "Commented-code block (8 lines) in backend/app/runs/service_allocator.py:47", "shortDescription": {"text": "Commented-code block (8 lines) in backend/app/runs/service_allocator.py:47"}, "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-52b02631aa7fceec", "name": "Commented-code block (11 lines) in backend/app/agent_comm/client.py:139", "shortDescription": {"text": "Commented-code block (11 lines) in backend/app/agent_comm/client.py:139"}, "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-cc88bdc31cf0cf3f", "name": "Commented-code block (9 lines) in backend/app/agent_comm/operations.py:49", "shortDescription": {"text": "Commented-code block (9 lines) in backend/app/agent_comm/operations.py:49"}, "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-8f94c8a0f8d57908", "name": "Commented-code block (5 lines) in backend/app/agent_comm/reconfigure_delivery.py:29", "shortDescription": {"text": "Commented-code block (5 lines) in backend/app/agent_comm/reconfigure_delivery.py: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-21bd42de96cb2140", "name": "Commented-code block (7 lines) in backend/app/diagnostics/services/export.py:333", "shortDescription": {"text": "Commented-code block (7 lines) in backend/app/diagnostics/services/export.py:333"}, "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-1832117b8121ddc3", "name": "Commented-code block (10 lines) in backend/app/appium_nodes/services/heartbeat.py:420", "shortDescription": {"text": "Commented-code block (10 lines) in backend/app/appium_nodes/services/heartbeat.py:420"}, "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-3317ef3d89fb32a5", "name": "Commented-code block (8 lines) in backend/app/appium_nodes/services/reconciler.py:472", "shortDescription": {"text": "Commented-code block (8 lines) in backend/app/appium_nodes/services/reconciler.py:472"}, "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-f4bc3b48d2310946", "name": "Commented-code block (7 lines) in backend/app/appium_nodes/services/reconciler_agent.py:187", "shortDescription": {"text": "Commented-code block (7 lines) in backend/app/appium_nodes/services/reconciler_agent.py:187"}, "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-0128b34c1999c6b2", "name": "Commented-code block (8 lines) in backend/app/appium_nodes/services/node_health.py:300", "shortDescription": {"text": "Commented-code block (8 lines) in backend/app/appium_nodes/services/node_health.py:300"}, "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-6475af2da9320e06", "name": "Legacy-named symbol `refresh_system_gauges_legacy` in backend/app/core/metrics.py:10", "shortDescription": {"text": "Legacy-named symbol `refresh_system_gauges_legacy` in backend/app/core/metrics.py:10"}, "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-13f8cad0f6acb510", "name": "Legacy-named symbol `snapshot_copy` in backend/app/core/observability.py:357", "shortDescription": {"text": "Legacy-named symbol `snapshot_copy` in backend/app/core/observability.py:357"}, "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-7a961e5e85c7899b", "name": "Commented-code block (5 lines) in backend/app/core/observability.py:131", "shortDescription": {"text": "Commented-code block (5 lines) in backend/app/core/observability.py:131"}, "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-1f6c767108b4788b", "name": "Commented-code block (5 lines) in backend/app/core/leader/advisory.py:77", "shortDescription": {"text": "Commented-code block (5 lines) in backend/app/core/leader/advisory.py:77"}, "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-3c0e04d4f66f68ae", "name": "Commented-code block (6 lines) in backend/app/hosts/router.py:175", "shortDescription": {"text": "Commented-code block (6 lines) in backend/app/hosts/router.py:175"}, "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-1f72eb5ccfc4ec98", "name": "Commented-code block (5 lines) in backend/app/hosts/service.py:174", "shortDescription": {"text": "Commented-code block (5 lines) in backend/app/hosts/service.py:174"}, "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-1631aa9b3173e337", "name": "Commented-code block (5 lines) in backend/app/devices/models/device.py:168", "shortDescription": {"text": "Commented-code block (5 lines) in backend/app/devices/models/device.py:168"}, "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-06b5ebab1aeef11f", "name": "Commented-code block (6 lines) in backend/app/devices/services/maintenance.py:66", "shortDescription": {"text": "Commented-code block (6 lines) in backend/app/devices/services/maintenance.py:66"}, "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-e67e7d4edd1a234e", "name": "Commented-code block (5 lines) in backend/app/devices/services/lifecycle_policy_state.py:143", "shortDescription": {"text": "Commented-code block (5 lines) in backend/app/devices/services/lifecycle_policy_state.py:143"}, "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-67f99212bb84b548", "name": "Commented-code block (6 lines) in backend/app/devices/services/connectivity.py:59", "shortDescription": {"text": "Commented-code block (6 lines) in backend/app/devices/services/connectivity.py:59"}, "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-4f2f9304ae55f927", "name": "Commented-code block (7 lines) in backend/app/devices/services/intent_reconciler.py:149", "shortDescription": {"text": "Commented-code block (7 lines) in backend/app/devices/services/intent_reconciler.py:149"}, "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-c6d3bd6775c5395a", "name": "Commented-code block (5 lines) in backend/app/devices/services/health.py:106", "shortDescription": {"text": "Commented-code block (5 lines) in backend/app/devices/services/health.py:106"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b085f68477d4141c", "name": "Commented-code block (5 lines) in backend/app/devices/services/intent_evaluator.py:88", "shortDescription": {"text": "Commented-code block (5 lines) in backend/app/devices/services/intent_evaluator.py:88"}, "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-4ce8f17f190124b3", "name": "Commented-code block (5 lines) in backend/app/devices/services/readiness.py:188", "shortDescription": {"text": "Commented-code block (5 lines) in backend/app/devices/services/readiness.py:188"}, "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-97981dfd70bef95c", "name": "Commented-code block (8 lines) in backend/app/devices/services/state_write_guard.py:162", "shortDescription": {"text": "Commented-code block (8 lines) in backend/app/devices/services/state_write_guard.py:162"}, "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-defdcb0376b2bc2c", "name": "Commented-code block (5 lines) in backend/app/devices/services/groups.py:132", "shortDescription": {"text": "Commented-code block (5 lines) in backend/app/devices/services/groups.py:132"}, "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-a6c5734012ff53b6", "name": "Commented-code block (5 lines) in backend/app/devices/services/state.py:174", "shortDescription": {"text": "Commented-code block (5 lines) in backend/app/devices/services/state.py:174"}, "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-fee24072601b1223", "name": "Commented-code block (6 lines) in backend/app/devices/services/intent.py:77", "shortDescription": {"text": "Commented-code block (6 lines) in backend/app/devices/services/intent.py:77"}, "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-798a3c364388afec", "name": "Commented-code block (6 lines) in backend/app/devices/services/service.py:251", "shortDescription": {"text": "Commented-code block (6 lines) in backend/app/devices/services/service.py:251"}, "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-86ec5c0a6ecde14b", "name": "Commented-code block (5 lines) in backend/app/devices/routers/control.py:262", "shortDescription": {"text": "Commented-code block (5 lines) in backend/app/devices/routers/control.py: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-46dde1664b8b1f9e", "name": "Legacy-named symbol `runstate_old` in backend/alembic/versions/2026-05-25_drop_completing_from_runstate.py:26", "shortDescription": {"text": "Legacy-named symbol `runstate_old` in backend/alembic/versions/2026-05-25_drop_completing_from_runstate.py:26"}, "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-65df07ab4020db79", "name": "18 env vars used in code but missing from .env.example", "shortDescription": {"text": "18 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `CI`, `DEV`, `E2E_WORKERS`, `ENV`, `FNM_DIR`, `GRIDFLEET_RECONCILER_CONVERGENCE_ENABLED`, `GRIDFLEET_RUN_ID`, `GRIDFLEET_TESTKIT_PACK_ID` + 10 more. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-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:\nagent/agent_app/config.py:validate_auth_pair, agent/agent_app/config.py:validate_auth_pair\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:\nagent/agent_app/pack/adapter_types.py:lifecycle_action, driver-packs/adapters/roku/adapter/__init__.py:lifecycle_action, driver-packs/adapters/android/adapter/__init__.py:lifecycle_action, driver-packs/adapters/apple/adapter/__init__.py:lifecycle_action\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-85d958a13f671355", "name": "Frontend route `/drivers/:id` has no Link/navigate to it \u2014 frontend/src/pages/DriverDetail.test.tsx", "shortDescription": {"text": "Frontend route `/drivers/:id` has no Link/navigate to it \u2014 frontend/src/pages/DriverDetail.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-83c603bd93ec324b", "name": "Frontend route `/hosts/:id` has no Link/navigate to it \u2014 frontend/src/pages/HostDetail.test.tsx", "shortDescription": {"text": "Frontend route `/hosts/:id` has no Link/navigate to it \u2014 frontend/src/pages/HostDetail.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-17d3edaa082af88d", "name": "FastAPI POST `<anonymous>` without auth dependency \u2014 agent/agent_app/appium/router.py:34", "shortDescription": {"text": "FastAPI POST `<anonymous>` without auth dependency \u2014 agent/agent_app/appium/router.py:34"}, "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-e1087f5689217780", "name": "FastAPI POST `reconfigure_appium` without auth dependency \u2014 agent/agent_app/appium/router.py:96", "shortDescription": {"text": "FastAPI POST `reconfigure_appium` without auth dependency \u2014 agent/agent_app/appium/router.py:96"}, "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-791132473e873250", "name": "FastAPI POST `stop_appium` without auth dependency \u2014 agent/agent_app/appium/router.py:123", "shortDescription": {"text": "FastAPI POST `stop_appium` without auth dependency \u2014 agent/agent_app/appium/router.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-66d63c602bfdc4a2", "name": "FastAPI POST `pack_device_lifecycle_route` without auth dependency \u2014 agent/agent_app/pack/router.py:217", "shortDescription": {"text": "FastAPI POST `pack_device_lifecycle_route` without auth dependency \u2014 agent/agent_app/pack/router.py:217"}, "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-edfa61083567be88", "name": "FastAPI POST `feature_action_route` without auth dependency \u2014 agent/agent_app/pack/router.py:255", "shortDescription": {"text": "FastAPI POST `feature_action_route` without auth dependency \u2014 agent/agent_app/pack/router.py:255"}, "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-3e89b4194689e7ab", "name": "FastAPI POST `normalize_device_route` without auth dependency \u2014 agent/agent_app/pack/router.py:287", "shortDescription": {"text": "FastAPI POST `normalize_device_route` without auth dependency \u2014 agent/agent_app/pack/router.py:287"}, "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-4cc0766023bf336e", "name": "FastAPI POST `pack_doctor_route` without auth dependency \u2014 agent/agent_app/pack/router.py:325", "shortDescription": {"text": "FastAPI POST `pack_doctor_route` without auth dependency \u2014 agent/agent_app/pack/router.py:325"}, "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-35bd64a77e762814", "name": "FastAPI POST `sync_agent_plugins` without auth dependency \u2014 agent/agent_app/plugins/router.py:28", "shortDescription": {"text": "FastAPI POST `sync_agent_plugins` without auth dependency \u2014 agent/agent_app/plugins/router.py:28"}, "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-feb946c50ee74861", "name": "FastAPI PUT `bulk_update_settings` without auth dependency \u2014 backend/app/settings/router.py:21", "shortDescription": {"text": "FastAPI PUT `bulk_update_settings` without auth dependency \u2014 backend/app/settings/router.py:21"}, "fullDescription": {"text": "`@router.put` 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-f3d513564abe1dff", "name": "FastAPI POST `reset_all_settings` without auth dependency \u2014 backend/app/settings/router.py:36", "shortDescription": {"text": "FastAPI POST `reset_all_settings` without auth dependency \u2014 backend/app/settings/router.py:36"}, "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-f61f8f33b90b7dbc", "name": "FastAPI PUT `update_setting` without auth dependency \u2014 backend/app/settings/router.py:50", "shortDescription": {"text": "FastAPI PUT `update_setting` without auth dependency \u2014 backend/app/settings/router.py:50"}, "fullDescription": {"text": "`@router.put` 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-9f02e7793cfeccd0", "name": "FastAPI POST `reset_setting` without auth dependency \u2014 backend/app/settings/router.py:66", "shortDescription": {"text": "FastAPI POST `reset_setting` without auth dependency \u2014 backend/app/settings/router.py:66"}, "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-6957bfe0187d5263", "name": "FastAPI POST `create_device_verification_job` without auth dependency \u2014 backend/app/verification/router.py:43", "shortDescription": {"text": "FastAPI POST `create_device_verification_job` without auth dependency \u2014 backend/app/verification/router.py:43"}, "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-9793396613ef2c05", "name": "FastAPI POST `create_existing_device_verification_job` without auth dependency \u2014 backend/app/verification/router.py:56", "shortDescription": {"text": "FastAPI POST `create_existing_device_verification_job` without auth dependency \u2014 backend/app/verification/router.py:56"}, "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-0aa55422b1ab9683", "name": "FastAPI POST `invoke_feature_action` without auth dependency \u2014 backend/app/packs/routers/host_features.py:42", "shortDescription": {"text": "FastAPI POST `invoke_feature_action` without auth dependency \u2014 backend/app/packs/routers/host_features.py:42"}, "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-240a19c9300cb57d", "name": "FastAPI PATCH `update_pack` without auth dependency \u2014 backend/app/packs/routers/catalog.py:38", "shortDescription": {"text": "FastAPI PATCH `update_pack` without auth dependency \u2014 backend/app/packs/routers/catalog.py:38"}, "fullDescription": {"text": "`@router.patch` 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-c4b683605df05b5f", "name": "FastAPI PATCH `update_runtime_policy` without auth dependency \u2014 backend/app/packs/routers/catalog.py:60", "shortDescription": {"text": "FastAPI PATCH `update_runtime_policy` without auth dependency \u2014 backend/app/packs/routers/catalog.py:60"}, "fullDescription": {"text": "`@router.patch` 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-97dcd636a10b3f0d", "name": "FastAPI DELETE `delete_driver_pack` without auth dependency \u2014 backend/app/packs/routers/catalog.py:73", "shortDescription": {"text": "FastAPI DELETE `delete_driver_pack` without auth dependency \u2014 backend/app/packs/routers/catalog.py:73"}, "fullDescription": {"text": "`@router.delete` 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-ef4328877e0a83e5", "name": "FastAPI POST `upload` without auth dependency \u2014 backend/app/packs/routers/uploads.py:47", "shortDescription": {"text": "FastAPI POST `upload` without auth dependency \u2014 backend/app/packs/routers/uploads.py:47"}, "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-72eeed98f2207a16", "name": "FastAPI PATCH `update_current_release` without auth dependency \u2014 backend/app/packs/routers/uploads.py:98", "shortDescription": {"text": "FastAPI PATCH `update_current_release` without auth dependency \u2014 backend/app/packs/routers/uploads.py:98"}, "fullDescription": {"text": "`@router.patch` 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-375919b80bc354d5", "name": "FastAPI DELETE `delete_release` without auth dependency \u2014 backend/app/packs/routers/uploads.py:112", "shortDescription": {"text": "FastAPI DELETE `delete_release` without auth dependency \u2014 backend/app/packs/routers/uploads.py:112"}, "fullDescription": {"text": "`@router.delete` 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-25ad9c130ffc35c3", "name": "FastAPI POST `export_release` without auth dependency \u2014 backend/app/packs/routers/export.py:34", "shortDescription": {"text": "FastAPI POST `export_release` without auth dependency \u2014 backend/app/packs/routers/export.py:34"}, "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-051a06e68e61a630", "name": "FastAPI POST `kill_session` without auth dependency \u2014 backend/app/sessions/router.py:130", "shortDescription": {"text": "FastAPI POST `kill_session` without auth dependency \u2014 backend/app/sessions/router.py:130"}, "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-c522d5ba507fdb6a", "name": "FastAPI PATCH `update_session_status` without auth dependency \u2014 backend/app/sessions/router.py:173", "shortDescription": {"text": "FastAPI PATCH `update_session_status` without auth dependency \u2014 backend/app/sessions/router.py:173"}, "fullDescription": {"text": "`@router.patch` 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-974ff13ae72a32fa", "name": "FastAPI POST `post_session_finished` without auth dependency \u2014 backend/app/sessions/router.py:185", "shortDescription": {"text": "FastAPI POST `post_session_finished` without auth dependency \u2014 backend/app/sessions/router.py:185"}, "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-86db7f3a2f9840c2", "name": "FastAPI POST `allocate` without auth dependency \u2014 backend/app/grid/router_internal.py:70", "shortDescription": {"text": "FastAPI POST `allocate` without auth dependency \u2014 backend/app/grid/router_internal.py:70"}, "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-f2c83af39eba38ee", "name": "FastAPI DELETE `cancel_ticket` without auth dependency \u2014 backend/app/grid/router_internal.py:122", "shortDescription": {"text": "FastAPI DELETE `cancel_ticket` without auth dependency \u2014 backend/app/grid/router_internal.py:122"}, "fullDescription": {"text": "`@router.delete` 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-267bb096fd5693a6", "name": "FastAPI POST `confirm` without auth dependency \u2014 backend/app/grid/router_internal.py:131", "shortDescription": {"text": "FastAPI POST `confirm` without auth dependency \u2014 backend/app/grid/router_internal.py:131"}, "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-aea37e0d865dfc90", "name": "FastAPI POST `fail` without auth dependency \u2014 backend/app/grid/router_internal.py:154", "shortDescription": {"text": "FastAPI POST `fail` without auth dependency \u2014 backend/app/grid/router_internal.py:154"}, "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-000c52ddd1b617c8", "name": "FastAPI POST `ended` without auth dependency \u2014 backend/app/grid/router_internal.py:161", "shortDescription": {"text": "FastAPI POST `ended` without auth dependency \u2014 backend/app/grid/router_internal.py:161"}, "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-d95e827d5cf2cf07", "name": "FastAPI POST `activity` without auth dependency \u2014 backend/app/grid/router_internal.py:195", "shortDescription": {"text": "FastAPI POST `activity` without auth dependency \u2014 backend/app/grid/router_internal.py:195"}, "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-acbdb0bf5c1d6e65", "name": "FastAPI POST `create_run` without auth dependency \u2014 backend/app/runs/router.py:53", "shortDescription": {"text": "FastAPI POST `create_run` without auth dependency \u2014 backend/app/runs/router.py:53"}, "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-a28b1a85a83eaa6f", "name": "FastAPI POST `signal_ready` without auth dependency \u2014 backend/app/runs/router.py:184", "shortDescription": {"text": "FastAPI POST `signal_ready` without auth dependency \u2014 backend/app/runs/router.py:184"}, "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-54a68cab0b26fdc9", "name": "FastAPI POST `signal_active` without auth dependency \u2014 backend/app/runs/router.py:194", "shortDescription": {"text": "FastAPI POST `signal_active` without auth dependency \u2014 backend/app/runs/router.py:194"}, "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-1bd776ee0900fde7", "name": "FastAPI POST `report_preparation_failed` without auth dependency \u2014 backend/app/runs/router.py:204", "shortDescription": {"text": "FastAPI POST `report_preparation_failed` without auth dependency \u2014 backend/app/runs/router.py:204"}, "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-34e40a67c5e9bd9d", "name": "FastAPI POST `cooldown_device_endpoint` without auth dependency \u2014 backend/app/runs/router.py:226", "shortDescription": {"text": "FastAPI POST `cooldown_device_endpoint` without auth dependency \u2014 backend/app/runs/router.py:226"}, "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-b33d04811e21bd57", "name": "FastAPI POST `heartbeat` without auth dependency \u2014 backend/app/runs/router.py:278", "shortDescription": {"text": "FastAPI POST `heartbeat` without auth dependency \u2014 backend/app/runs/router.py:278"}, "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-b938d1bdd008de4e", "name": "FastAPI POST `complete_run` without auth dependency \u2014 backend/app/runs/router.py:287", "shortDescription": {"text": "FastAPI POST `complete_run` without auth dependency \u2014 backend/app/runs/router.py:287"}, "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-6c0ed96c60e55086", "name": "FastAPI POST `cancel_run` without auth dependency \u2014 backend/app/runs/router.py:301", "shortDescription": {"text": "FastAPI POST `cancel_run` without auth dependency \u2014 backend/app/runs/router.py:301"}, "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-edaeced1646d12b2", "name": "FastAPI POST `force_release` without auth dependency \u2014 backend/app/runs/router.py:315", "shortDescription": {"text": "FastAPI POST `force_release` without auth dependency \u2014 backend/app/runs/router.py:315"}, "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-63c028e9ea5a13a5", "name": "FastAPI POST `export_device_diagnostics` without auth dependency \u2014 backend/app/diagnostics/router.py:93", "shortDescription": {"text": "FastAPI POST `export_device_diagnostics` without auth dependency \u2014 backend/app/diagnostics/router.py:93"}, "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-3f5ece5256e7ba65", "name": "FastAPI POST `import_validate` without auth dependency \u2014 backend/app/portability/router.py:38", "shortDescription": {"text": "FastAPI POST `import_validate` without auth dependency \u2014 backend/app/portability/router.py:38"}, "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-7c47861b30cd52c6", "name": "FastAPI POST `import_commit` without auth dependency \u2014 backend/app/portability/router.py:52", "shortDescription": {"text": "FastAPI POST `import_commit` without auth dependency \u2014 backend/app/portability/router.py:52"}, "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-d7a28302e981abfc", "name": "FastAPI POST `clear_transition` without auth dependency \u2014 backend/app/appium_nodes/routers/admin.py:27", "shortDescription": {"text": "FastAPI POST `clear_transition` without auth dependency \u2014 backend/app/appium_nodes/routers/admin.py:27"}, "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-422639447e30f2c2", "name": "FastAPI POST `start_node` without auth dependency \u2014 backend/app/appium_nodes/routers/nodes.py:47", "shortDescription": {"text": "FastAPI POST `start_node` without auth dependency \u2014 backend/app/appium_nodes/routers/nodes.py:47"}, "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-40bca071cf8dfac3", "name": "FastAPI POST `stop_node` without auth dependency \u2014 backend/app/appium_nodes/routers/nodes.py:73", "shortDescription": {"text": "FastAPI POST `stop_node` without auth dependency \u2014 backend/app/appium_nodes/routers/nodes.py:73"}, "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-8f9fb5970bc7b9d4", "name": "FastAPI POST `restart_node` without auth dependency \u2014 backend/app/appium_nodes/routers/nodes.py:86", "shortDescription": {"text": "FastAPI POST `restart_node` without auth dependency \u2014 backend/app/appium_nodes/routers/nodes.py:86"}, "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-ac3d303b9ef864e0", "name": "FastAPI POST `create_webhook` without auth dependency \u2014 backend/app/webhooks/router.py:22", "shortDescription": {"text": "FastAPI POST `create_webhook` without auth dependency \u2014 backend/app/webhooks/router.py:22"}, "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-6178bd14a02635ff", "name": "FastAPI PATCH `update_webhook` without auth dependency \u2014 backend/app/webhooks/router.py:37", "shortDescription": {"text": "FastAPI PATCH `update_webhook` without auth dependency \u2014 backend/app/webhooks/router.py:37"}, "fullDescription": {"text": "`@router.patch` 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-fa1718388a661129", "name": "FastAPI DELETE `delete_webhook` without auth dependency \u2014 backend/app/webhooks/router.py:44", "shortDescription": {"text": "FastAPI DELETE `delete_webhook` without auth dependency \u2014 backend/app/webhooks/router.py:44"}, "fullDescription": {"text": "`@router.delete` 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-de59bbbb62b435b7", "name": "FastAPI POST `test_webhook` without auth dependency \u2014 backend/app/webhooks/router.py:51", "shortDescription": {"text": "FastAPI POST `test_webhook` without auth dependency \u2014 backend/app/webhooks/router.py:51"}, "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-e963ebd3497d4858", "name": "FastAPI POST `retry_webhook_delivery` without auth dependency \u2014 backend/app/webhooks/router.py:79", "shortDescription": {"text": "FastAPI POST `retry_webhook_delivery` without auth dependency \u2014 backend/app/webhooks/router.py:79"}, "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-23d64dcbb9f69edf", "name": "FastAPI POST `approve_host` without auth dependency \u2014 backend/app/hosts/router.py:205", "shortDescription": {"text": "FastAPI POST `approve_host` without auth dependency \u2014 backend/app/hosts/router.py:205"}, "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-360563450fe65d3e", "name": "FastAPI POST `reject_host` without auth dependency \u2014 backend/app/hosts/router.py:234", "shortDescription": {"text": "FastAPI POST `reject_host` without auth dependency \u2014 backend/app/hosts/router.py:234"}, "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-065d275dbf93fd2d", "name": "FastAPI POST `create_host` without auth dependency \u2014 backend/app/hosts/router.py:241", "shortDescription": {"text": "FastAPI POST `create_host` without auth dependency \u2014 backend/app/hosts/router.py:241"}, "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-f367370b24c76ef9", "name": "FastAPI POST `trigger_driver_doctor` without auth dependency \u2014 backend/app/hosts/router.py:350", "shortDescription": {"text": "FastAPI POST `trigger_driver_doctor` without auth dependency \u2014 backend/app/hosts/router.py:350"}, "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-7978de202a3632e3", "name": "FastAPI DELETE `delete_host` without auth dependency \u2014 backend/app/hosts/router.py:441", "shortDescription": {"text": "FastAPI DELETE `delete_host` without auth dependency \u2014 backend/app/hosts/router.py:441"}, "fullDescription": {"text": "`@router.delete` 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-3e6dcaf9ca7f6145", "name": "FastAPI POST `discover_devices` without auth dependency \u2014 backend/app/hosts/router.py:451", "shortDescription": {"text": "FastAPI POST `discover_devices` without auth dependency \u2014 backend/app/hosts/router.py:451"}, "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-bb8a4c471084ce2e", "name": "FastAPI POST `confirm_discovery` without auth dependency \u2014 backend/app/hosts/router.py:473", "shortDescription": {"text": "FastAPI POST `confirm_discovery` without auth dependency \u2014 backend/app/hosts/router.py:473"}, "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-6c71562ec2b0ed60", "name": "FastAPI PUT `put_host_tool_env` without auth dependency \u2014 backend/app/hosts/router.py:507", "shortDescription": {"text": "FastAPI PUT `put_host_tool_env` without auth dependency \u2014 backend/app/hosts/router.py:507"}, "fullDescription": {"text": "`@router.put` 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-4be130980b52ae43", "name": "FastAPI POST `ingest_agent_log_batch` without auth dependency \u2014 backend/app/hosts/router_agent_logs.py:18", "shortDescription": {"text": "FastAPI POST `ingest_agent_log_batch` without auth dependency \u2014 backend/app/hosts/router_agent_logs.py:18"}, "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-e41930e049e08e17", "name": "FastAPI POST `enter_device_maintenance` without auth dependency \u2014 backend/app/devices/routers/control.py:49", "shortDescription": {"text": "FastAPI POST `enter_device_maintenance` without auth dependency \u2014 backend/app/devices/routers/control.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-0360dd653cfdc0af", "name": "FastAPI POST `exit_device_maintenance` without auth dependency \u2014 backend/app/devices/routers/control.py:64", "shortDescription": {"text": "FastAPI POST `exit_device_maintenance` without auth dependency \u2014 backend/app/devices/routers/control.py:64"}, "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-63f5c8e0f850dad3", "name": "FastAPI PATCH `merge_device_config` without auth dependency \u2014 backend/app/devices/routers/control.py:88", "shortDescription": {"text": "FastAPI PATCH `merge_device_config` without auth dependency \u2014 backend/app/devices/routers/control.py:88"}, "fullDescription": {"text": "`@router.patch` 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-0932dd29b77ac90a", "name": "FastAPI POST `device_session_test` without auth dependency \u2014 backend/app/devices/routers/control.py:203", "shortDescription": {"text": "FastAPI POST `device_session_test` without auth dependency \u2014 backend/app/devices/routers/control.py:203"}, "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-1d6e17ba30dc9741", "name": "FastAPI POST `reconnect_device` without auth dependency \u2014 backend/app/devices/routers/control.py:220", "shortDescription": {"text": "FastAPI POST `reconnect_device` without auth dependency \u2014 backend/app/devices/routers/control.py:220"}, "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-1cfbe14353645730", "name": "FastAPI POST `device_lifecycle_action` without auth dependency \u2014 backend/app/devices/routers/control.py:305", "shortDescription": {"text": "FastAPI POST `device_lifecycle_action` without auth dependency \u2014 backend/app/devices/routers/control.py:305"}, "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-cb37ef69e4d0c46c", "name": "FastAPI POST `bulk_start_nodes` without auth dependency \u2014 backend/app/devices/routers/bulk.py:20", "shortDescription": {"text": "FastAPI POST `bulk_start_nodes` without auth dependency \u2014 backend/app/devices/routers/bulk.py:20"}, "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-9d2ca91b5911fef1", "name": "FastAPI POST `bulk_stop_nodes` without auth dependency \u2014 backend/app/devices/routers/bulk.py:25", "shortDescription": {"text": "FastAPI POST `bulk_stop_nodes` without auth dependency \u2014 backend/app/devices/routers/bulk.py:25"}, "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-e0f94264fc4bb8d2", "name": "FastAPI POST `bulk_restart_nodes` without auth dependency \u2014 backend/app/devices/routers/bulk.py:30", "shortDescription": {"text": "FastAPI POST `bulk_restart_nodes` without auth dependency \u2014 backend/app/devices/routers/bulk.py:30"}, "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-2f46a852e9d7e7ab", "name": "FastAPI POST `bulk_update_tags` without auth dependency \u2014 backend/app/devices/routers/bulk.py:35", "shortDescription": {"text": "FastAPI POST `bulk_update_tags` without auth dependency \u2014 backend/app/devices/routers/bulk.py:35"}, "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-34d9ccdf1a6e271e", "name": "FastAPI POST `bulk_delete` without auth dependency \u2014 backend/app/devices/routers/bulk.py:40", "shortDescription": {"text": "FastAPI POST `bulk_delete` without auth dependency \u2014 backend/app/devices/routers/bulk.py:40"}, "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-ffb62dd3cca11d93", "name": "FastAPI POST `bulk_enter_maintenance` without auth dependency \u2014 backend/app/devices/routers/bulk.py:45", "shortDescription": {"text": "FastAPI POST `bulk_enter_maintenance` without auth dependency \u2014 backend/app/devices/routers/bulk.py:45"}, "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-e8f6d14367043db3", "name": "FastAPI POST `bulk_exit_maintenance` without auth dependency \u2014 backend/app/devices/routers/bulk.py:52", "shortDescription": {"text": "FastAPI POST `bulk_exit_maintenance` without auth dependency \u2014 backend/app/devices/routers/bulk.py:52"}, "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-dde775b8ceb0597d", "name": "FastAPI POST `bulk_reconnect` without auth dependency \u2014 backend/app/devices/routers/bulk.py:57", "shortDescription": {"text": "FastAPI POST `bulk_reconnect` without auth dependency \u2014 backend/app/devices/routers/bulk.py:57"}, "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-75d963ae0def8887", "name": "FastAPI PATCH `update_device` without auth dependency \u2014 backend/app/devices/routers/core.py:190", "shortDescription": {"text": "FastAPI PATCH `update_device` without auth dependency \u2014 backend/app/devices/routers/core.py:190"}, "fullDescription": {"text": "`@router.patch` 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-aef5ff56b1021fec", "name": "FastAPI DELETE `delete_device` without auth dependency \u2014 backend/app/devices/routers/core.py:204", "shortDescription": {"text": "FastAPI DELETE `delete_device` without auth dependency \u2014 backend/app/devices/routers/core.py:204"}, "fullDescription": {"text": "`@router.delete` 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-820691df995d4298", "name": "FastAPI POST `create_group` without auth dependency \u2014 backend/app/devices/routers/groups.py:38", "shortDescription": {"text": "FastAPI POST `create_group` without auth dependency \u2014 backend/app/devices/routers/groups.py:38"}, "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-065fa61465b9dae5", "name": "FastAPI PATCH `update_group` without auth dependency \u2014 backend/app/devices/routers/groups.py:60", "shortDescription": {"text": "FastAPI PATCH `update_group` without auth dependency \u2014 backend/app/devices/routers/groups.py:60"}, "fullDescription": {"text": "`@router.patch` 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-51a7e3850ef9fcce", "name": "FastAPI DELETE `delete_group` without auth dependency \u2014 backend/app/devices/routers/groups.py:71", "shortDescription": {"text": "FastAPI DELETE `delete_group` without auth dependency \u2014 backend/app/devices/routers/groups.py:71"}, "fullDescription": {"text": "`@router.delete` 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-16975d4632cfcc66", "name": "FastAPI POST `add_members` without auth dependency \u2014 backend/app/devices/routers/groups.py:78", "shortDescription": {"text": "FastAPI POST `add_members` without auth dependency \u2014 backend/app/devices/routers/groups.py:78"}, "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-6b1e715f7efc5ddd", "name": "FastAPI DELETE `remove_members` without auth dependency \u2014 backend/app/devices/routers/groups.py:92", "shortDescription": {"text": "FastAPI DELETE `remove_members` without auth dependency \u2014 backend/app/devices/routers/groups.py:92"}, "fullDescription": {"text": "`@router.delete` 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-ec76ff68b3c489da", "name": "FastAPI POST `group_bulk_start` without auth dependency \u2014 backend/app/devices/routers/groups.py:106", "shortDescription": {"text": "FastAPI POST `group_bulk_start` without auth dependency \u2014 backend/app/devices/routers/groups.py:106"}, "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-2ed9bdaefe6791c1", "name": "FastAPI POST `group_bulk_stop` without auth dependency \u2014 backend/app/devices/routers/groups.py:112", "shortDescription": {"text": "FastAPI POST `group_bulk_stop` without auth dependency \u2014 backend/app/devices/routers/groups.py:112"}, "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-2028d5b0e2045f31", "name": "FastAPI POST `group_bulk_restart` without auth dependency \u2014 backend/app/devices/routers/groups.py:118", "shortDescription": {"text": "FastAPI POST `group_bulk_restart` without auth dependency \u2014 backend/app/devices/routers/groups.py:118"}, "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-1f018f3bd8932eda", "name": "FastAPI POST `group_bulk_enter_maintenance` without auth dependency \u2014 backend/app/devices/routers/groups.py:124", "shortDescription": {"text": "FastAPI POST `group_bulk_enter_maintenance` without auth dependency \u2014 backend/app/devices/routers/groups.py:124"}, "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-4893129fd17b6e5e", "name": "FastAPI POST `group_bulk_exit_maintenance` without auth dependency \u2014 backend/app/devices/routers/groups.py:135", "shortDescription": {"text": "FastAPI POST `group_bulk_exit_maintenance` without auth dependency \u2014 backend/app/devices/routers/groups.py:135"}, "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-36ddcb9c4a5f36c1", "name": "FastAPI POST `group_bulk_reconnect` without auth dependency \u2014 backend/app/devices/routers/groups.py:143", "shortDescription": {"text": "FastAPI POST `group_bulk_reconnect` without auth dependency \u2014 backend/app/devices/routers/groups.py:143"}, "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-87bf5497b3c4e8c2", "name": "FastAPI POST `group_bulk_update_tags` without auth dependency \u2014 backend/app/devices/routers/groups.py:153", "shortDescription": {"text": "FastAPI POST `group_bulk_update_tags` without auth dependency \u2014 backend/app/devices/routers/groups.py:153"}, "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-a0b09b4a609fe1f1", "name": "FastAPI POST `group_bulk_delete` without auth dependency \u2014 backend/app/devices/routers/groups.py:164", "shortDescription": {"text": "FastAPI POST `group_bulk_delete` without auth dependency \u2014 backend/app/devices/routers/groups.py:164"}, "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-a027c4b7a28fcf17", "name": "FastAPI POST `create_plugin` without auth dependency \u2014 backend/app/plugins/router.py:31", "shortDescription": {"text": "FastAPI POST `create_plugin` without auth dependency \u2014 backend/app/plugins/router.py:31"}, "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-659747c7bd1d305f", "name": "FastAPI PATCH `update_plugin` without auth dependency \u2014 backend/app/plugins/router.py:39", "shortDescription": {"text": "FastAPI PATCH `update_plugin` without auth dependency \u2014 backend/app/plugins/router.py:39"}, "fullDescription": {"text": "`@router.patch` 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-4027c07b2d98a672", "name": "FastAPI DELETE `delete_plugin` without auth dependency \u2014 backend/app/plugins/router.py:49", "shortDescription": {"text": "FastAPI DELETE `delete_plugin` without auth dependency \u2014 backend/app/plugins/router.py:49"}, "fullDescription": {"text": "`@router.delete` 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-63ab5bb97de1420a", "name": "FastAPI POST `sync_all_plugins` without auth dependency \u2014 backend/app/plugins/router.py:56", "shortDescription": {"text": "FastAPI POST `sync_all_plugins` without auth dependency \u2014 backend/app/plugins/router.py:56"}, "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-4a732af071989be5", "name": "FastAPI POST `sync_host_plugins` without auth dependency \u2014 backend/app/plugins/router.py:70", "shortDescription": {"text": "FastAPI POST `sync_host_plugins` without auth dependency \u2014 backend/app/plugins/router.py:70"}, "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-8a770fbb3852259c", "name": "Unused endpoint: GET /host/telemetry", "shortDescription": {"text": "Unused endpoint: GET /host/telemetry"}, "fullDescription": {"text": "`agent/agent_app/host/router.py` declares `GET /host/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-a13a7e97aeacf55f", "name": "Unused endpoint: POST /start", "shortDescription": {"text": "Unused endpoint: POST /start"}, "fullDescription": {"text": "`agent/agent_app/appium/router.py` declares `POST /start` 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-c5ef560d543c0347", "name": "Unused endpoint: POST /{port}/reconfigure", "shortDescription": {"text": "Unused endpoint: POST /{port}/reconfigure"}, "fullDescription": {"text": "`agent/agent_app/appium/router.py` declares `POST /{port}/reconfigure` 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-e69c90752a76eba5", "name": "Unused endpoint: POST /stop", "shortDescription": {"text": "Unused endpoint: POST /stop"}, "fullDescription": {"text": "`agent/agent_app/appium/router.py` declares `POST /stop` 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-cda2be61c3b5c707", "name": "Unused endpoint: GET /{port}/status", "shortDescription": {"text": "Unused endpoint: GET /{port}/status"}, "fullDescription": {"text": "`agent/agent_app/appium/router.py` declares `GET /{port}/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-ea67a2c89b4c9b55", "name": "Unused endpoint: GET /{port}/logs", "shortDescription": {"text": "Unused endpoint: GET /{port}/logs"}, "fullDescription": {"text": "`agent/agent_app/appium/router.py` declares `GET /{port}/logs` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e8ebe817d16c5e42", "name": "Unused endpoint: GET /devices", "shortDescription": {"text": "Unused endpoint: GET /devices"}, "fullDescription": {"text": "`agent/agent_app/pack/router.py` declares `GET /devices` 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-f2ed2b40326547fa", "name": "Unused endpoint: GET /devices/{connection_target}/properties", "shortDescription": {"text": "Unused endpoint: GET /devices/{connection_target}/properties"}, "fullDescription": {"text": "`agent/agent_app/pack/router.py` declares `GET /devices/{connection_target}/properties` 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-e181cb1f53bacf69", "name": "Unused endpoint: GET /devices/{connection_target}/health", "shortDescription": {"text": "Unused endpoint: GET /devices/{connection_target}/health"}, "fullDescription": {"text": "`agent/agent_app/pack/router.py` declares `GET /devices/{connection_target}/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-64139a5a3506c2a7", "name": "Unused endpoint: GET /devices/{connection_target}/telemetry", "shortDescription": {"text": "Unused endpoint: GET /devices/{connection_target}/telemetry"}, "fullDescription": {"text": "`agent/agent_app/pack/router.py` declares `GET /devices/{connection_target}/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-223518f79d81a98c", "name": "Unused endpoint: POST /devices/{connection_target}/lifecycle/{action}", "shortDescription": {"text": "Unused endpoint: POST /devices/{connection_target}/lifecycle/{action}"}, "fullDescription": {"text": "`agent/agent_app/pack/router.py` declares `POST /devices/{connection_target}/lifecycle/{action}` 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-40bd3f68d649a21f", "name": "Unused endpoint: POST /features/{feature_id}/actions/{action_id}", "shortDescription": {"text": "Unused endpoint: POST /features/{feature_id}/actions/{action_id}"}, "fullDescription": {"text": "`agent/agent_app/pack/router.py` declares `POST /features/{feature_id}/actions/{action_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-57ffcf5e7b8bb8f8", "name": "Unused endpoint: POST /devices/normalize", "shortDescription": {"text": "Unused endpoint: POST /devices/normalize"}, "fullDescription": {"text": "`agent/agent_app/pack/router.py` declares `POST /devices/normalize` 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-9a67925c38e2e553", "name": "Unused endpoint: POST /{pack_id}/doctor", "shortDescription": {"text": "Unused endpoint: POST /{pack_id}/doctor"}, "fullDescription": {"text": "`agent/agent_app/pack/router.py` declares `POST /{pack_id}/doctor` 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": "`agent/agent_app/plugins/router.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-fa413208496243a5", "name": "Unused endpoint: POST /sync", "shortDescription": {"text": "Unused endpoint: POST /sync"}, "fullDescription": {"text": "`agent/agent_app/plugins/router.py` declares `POST /sync` 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-3710d49b08b59946", "name": "Unused endpoint: GET /api/availability", "shortDescription": {"text": "Unused endpoint: GET /api/availability"}, "fullDescription": {"text": "`backend/app/main.py` declares `GET /api/availability` 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-ed183ae894826b40", "name": "Unused endpoint: PUT /bulk", "shortDescription": {"text": "Unused endpoint: PUT /bulk"}, "fullDescription": {"text": "`backend/app/settings/router.py` declares `PUT /bulk` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dab404178984fc5d", "name": "Unused endpoint: POST /reset-all", "shortDescription": {"text": "Unused endpoint: POST /reset-all"}, "fullDescription": {"text": "`backend/app/settings/router.py` declares `POST /reset-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-8f9421ca9c1482a4", "name": "Unused endpoint: GET /{key:path}", "shortDescription": {"text": "Unused endpoint: GET /{key:path}"}, "fullDescription": {"text": "`backend/app/settings/router.py` declares `GET /{key: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-3e3b73028e9e1f84", "name": "Unused endpoint: PUT /{key:path}", "shortDescription": {"text": "Unused endpoint: PUT /{key:path}"}, "fullDescription": {"text": "`backend/app/settings/router.py` declares `PUT /{key: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-cdfdfac7a5828b11", "name": "Unused endpoint: POST /reset/{key:path}", "shortDescription": {"text": "Unused endpoint: POST /reset/{key:path}"}, "fullDescription": {"text": "`backend/app/settings/router.py` declares `POST /reset/{key: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-1daa53f3c56e6b16", "name": "Unused endpoint: GET /session", "shortDescription": {"text": "Unused endpoint: GET /session"}, "fullDescription": {"text": "`backend/app/auth/router.py` declares `GET /session` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-618721b912bad1c2", "name": "Unused endpoint: POST /login", "shortDescription": {"text": "Unused endpoint: POST /login"}, "fullDescription": {"text": "`backend/app/auth/router.py` declares `POST /login` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-99fc36db98c134ce", "name": "Unused endpoint: POST /logout", "shortDescription": {"text": "Unused endpoint: POST /logout"}, "fullDescription": {"text": "`backend/app/auth/router.py` declares `POST /logout` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2b73face5b06aa67", "name": "Unused endpoint: POST /jobs", "shortDescription": {"text": "Unused endpoint: POST /jobs"}, "fullDescription": {"text": "`backend/app/verification/router.py` declares `POST /jobs` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a9f0261152044acf", "name": "Unused endpoint: POST /devices/{device_id}/jobs", "shortDescription": {"text": "Unused endpoint: POST /devices/{device_id}/jobs"}, "fullDescription": {"text": "`backend/app/verification/router.py` declares `POST /devices/{device_id}/jobs` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ee53a8b03729481e", "name": "Unused endpoint: GET /jobs/{job_id}", "shortDescription": {"text": "Unused endpoint: GET /jobs/{job_id}"}, "fullDescription": {"text": "`backend/app/verification/router.py` declares `GET /jobs/{job_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-81986784ebc79f89", "name": "Unused endpoint: GET /jobs/{job_id}/events", "shortDescription": {"text": "Unused endpoint: GET /jobs/{job_id}/events"}, "fullDescription": {"text": "`backend/app/verification/router.py` declares `GET /jobs/{job_id}/events` 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-3305a9a09a622afc", "name": "Unused endpoint: GET /sessions/summary", "shortDescription": {"text": "Unused endpoint: GET /sessions/summary"}, "fullDescription": {"text": "`backend/app/analytics/router.py` declares `GET /sessions/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-4b9d2dcf3bb9290a", "name": "Unused endpoint: GET /devices/utilization", "shortDescription": {"text": "Unused endpoint: GET /devices/utilization"}, "fullDescription": {"text": "`backend/app/analytics/router.py` declares `GET /devices/utilization` 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-aa57a0346d234bb5", "name": "Unused endpoint: GET /devices/reliability", "shortDescription": {"text": "Unused endpoint: GET /devices/reliability"}, "fullDescription": {"text": "`backend/app/analytics/router.py` declares `GET /devices/reliability` 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-a94011a996874a7c", "name": "Unused endpoint: GET /fleet/overview", "shortDescription": {"text": "Unused endpoint: GET /fleet/overview"}, "fullDescription": {"text": "`backend/app/analytics/router.py` declares `GET /fleet/overview` 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-28904fab2cc55fd7", "name": "Unused endpoint: GET /fleet/capacity-timeline", "shortDescription": {"text": "Unused endpoint: GET /fleet/capacity-timeline"}, "fullDescription": {"text": "`backend/app/analytics/router.py` declares `GET /fleet/capacity-timeline` 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-02366b5530ccc8cf", "name": "Unused endpoint: GET /events/catalog", "shortDescription": {"text": "Unused endpoint: GET /events/catalog"}, "fullDescription": {"text": "`backend/app/events/router.py` declares `GET /events/catalog` 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-43269e4e79c2e69e", "name": "Unused endpoint: GET /events", "shortDescription": {"text": "Unused endpoint: GET /events"}, "fullDescription": {"text": "`backend/app/events/router.py` declares `GET /events` 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-3af64e805d88ef35", "name": "Unused endpoint: GET /notifications", "shortDescription": {"text": "Unused endpoint: GET /notifications"}, "fullDescription": {"text": "`backend/app/events/router.py` declares `GET /notifications` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e5ddcd21d5dd8c8b", "name": "Unused endpoint: GET /desired", "shortDescription": {"text": "Unused endpoint: GET /desired"}, "fullDescription": {"text": "`backend/app/packs/routers/agent_state.py` declares `GET /desired` 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-837dd4aa29c78726", "name": "Unused endpoint: POST /{host_id}/driver-packs/{pack_id:path}/features/{feature_id}/actions/{action_id}", "shortDescription": {"text": "Unused endpoint: POST /{host_id}/driver-packs/{pack_id:path}/features/{feature_id}/actions/{action_id}"}, "fullDescription": {"text": "`backend/app/packs/routers/host_features.py` declares `POST /{host_id}/driver-packs/{pack_id:path}/features/{feature_id}/actions/{action_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-34a0d470c601d97f", "name": "Unused endpoint: GET /catalog", "shortDescription": {"text": "Unused endpoint: GET /catalog"}, "fullDescription": {"text": "`backend/app/packs/routers/catalog.py` declares `GET /catalog` 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-1b4c290cc2e1ac1e", "name": "Unused endpoint: GET /{pack_id}", "shortDescription": {"text": "Unused endpoint: GET /{pack_id}"}, "fullDescription": {"text": "`backend/app/packs/routers/catalog.py` declares `GET /{pack_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-19ef3f5e195134f4", "name": "Unused endpoint: GET /{pack_id}/hosts", "shortDescription": {"text": "Unused endpoint: GET /{pack_id}/hosts"}, "fullDescription": {"text": "`backend/app/packs/routers/catalog.py` declares `GET /{pack_id}/hosts` 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-b190839ef6c6fa4d", "name": "Unused endpoint: PATCH /{pack_id}", "shortDescription": {"text": "Unused endpoint: PATCH /{pack_id}"}, "fullDescription": {"text": "`backend/app/packs/routers/catalog.py` declares `PATCH /{pack_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-9b3bba269d9ad92c", "name": "Unused endpoint: PATCH /{pack_id}/policy", "shortDescription": {"text": "Unused endpoint: PATCH /{pack_id}/policy"}, "fullDescription": {"text": "`backend/app/packs/routers/catalog.py` declares `PATCH /{pack_id}/policy` 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-ed6c303f83dab8af", "name": "Unused endpoint: DELETE /{pack_id}", "shortDescription": {"text": "Unused endpoint: DELETE /{pack_id}"}, "fullDescription": {"text": "`backend/app/packs/routers/catalog.py` declares `DELETE /{pack_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-f440e5eb48cf128b", "name": "Unused endpoint: POST /uploads", "shortDescription": {"text": "Unused endpoint: POST /uploads"}, "fullDescription": {"text": "`backend/app/packs/routers/uploads.py` declares `POST /uploads` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-24662740b2451ede", "name": "Unused endpoint: GET /{pack_id}/releases/{release}/tarball", "shortDescription": {"text": "Unused endpoint: GET /{pack_id}/releases/{release}/tarball"}, "fullDescription": {"text": "`backend/app/packs/routers/uploads.py` declares `GET /{pack_id}/releases/{release}/tarball` 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-b587e2568ff27abc", "name": "Unused endpoint: GET /{pack_id}/releases", "shortDescription": {"text": "Unused endpoint: GET /{pack_id}/releases"}, "fullDescription": {"text": "`backend/app/packs/routers/uploads.py` declares `GET /{pack_id}/releases` 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-396a87ecef94428c", "name": "Unused endpoint: PATCH /{pack_id}/releases/current", "shortDescription": {"text": "Unused endpoint: PATCH /{pack_id}/releases/current"}, "fullDescription": {"text": "`backend/app/packs/routers/uploads.py` declares `PATCH /{pack_id}/releases/current` 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/17661"}, "properties": {"repository": "quidow/gridfleet", "repoUrl": "https://github.com/quidow/gridfleet", "branch": "main"}, "results": [{"ruleId": "scanner-360b137b7d085e60", "level": "note", "message": {"text": "Possibly dead Python function: send_wrapper"}, "properties": {"repobilityId": "f34ba48c1fd7571b", "scanner": "scanner-primary", "fingerprint": "360b137b7d085e60", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "agent/agent_app/observability.py:122"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-17aa6e201d95d0cc", "level": "note", "message": {"text": "Possibly dead Python function: set_backoff"}, "properties": {"repobilityId": "fbadc6c421f63f79", "scanner": "scanner-primary", "fingerprint": "17aa6e201d95d0cc", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/devices/services/lifecycle_policy_state.py:282"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-229ffbf1fb16608d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/Sidebar.tsx:211"}, "properties": {"repobilityId": "d939641c15c40bf5", "scanner": "scanner-primary", "fingerprint": "229ffbf1fb16608d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-899d825079ae719a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/deviceDetail/DeviceLifecyclePolicyPanel.tsx:32"}, "properties": {"repobilityId": "a329829cb8327779", "scanner": "scanner-primary", "fingerprint": "899d825079ae719a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e662dd424fb4cf9b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/deviceDetail/DeviceCapabilitiesPanel.tsx:55"}, "properties": {"repobilityId": "16f474f571c9faea", "scanner": "scanner-primary", "fingerprint": "e662dd424fb4cf9b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6d6820d11bfda93f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/deviceDetail/DeviceNodePanel.tsx:110"}, "properties": {"repobilityId": "43a8fb0f88fbc455", "scanner": "scanner-primary", "fingerprint": "6d6820d11bfda93f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-02f04fad02a952b9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/dashboard/ActivityCard.tsx:54"}, "properties": {"repobilityId": "a5f1843b6fd0b7d3", "scanner": "scanner-primary", "fingerprint": "02f04fad02a952b9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-972c7b4b8f7b7184", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/dashboard/AttentionCard.tsx:75"}, "properties": {"repobilityId": "f6d08f3e89a6e2b8", "scanner": "scanner-primary", "fingerprint": "972c7b4b8f7b7184", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d3524d18644db3e1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/hostDetail/HostOverviewResourceStrip.tsx:58"}, "properties": {"repobilityId": "acb55ef5a9d6bd13", "scanner": "scanner-primary", "fingerprint": "d3524d18644db3e1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-41e27e8a68edca30", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/hosts/HostDiscoveryModal.tsx:110"}, "properties": {"repobilityId": "1ef87f4a111ba21f", "scanner": "scanner-primary", "fingerprint": "41e27e8a68edca30", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bec84bef4d954683", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/pages/DeviceDetail.tsx:225"}, "properties": {"repobilityId": "282c0cd1fc185b8b", "scanner": "scanner-primary", "fingerprint": "bec84bef4d954683", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f86e4583a7ef869d", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: rust:1.96-slim-bookworm"}, "properties": {"repobilityId": "57fae5447d6080b5", "scanner": "scanner-primary", "fingerprint": "f86e4583a7ef869d", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "router/Dockerfile"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4cded2d88e308a06", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: debian:bookworm-slim"}, "properties": {"repobilityId": "557660ffe038881a", "scanner": "scanner-primary", "fingerprint": "4cded2d88e308a06", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "router/Dockerfile"}, "region": {"startLine": 9}}}]}, {"ruleId": "scanner-aa5acaa49eb8315b", "level": "note", "message": {"text": "Containers defined but no K8s/orchestration manifest found"}, "properties": {"repobilityId": "b230ea9b68736081", "scanner": "scanner-primary", "fingerprint": "aa5acaa49eb8315b", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["coverage", "deployment"]}}, {"ruleId": "scanner-532e54ac0b2f9122", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in frontend/scripts/run-playwright.mjs:1"}, "properties": {"repobilityId": "592585b03bedd594", "scanner": "scanner-primary", "fingerprint": "532e54ac0b2f9122", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/scripts/run-playwright.mjs"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c66daf275ecae09e", "level": "error", "message": {"text": "Possible secret in frontend/e2e/devices.spec.ts"}, "properties": {"repobilityId": "2155d6a1c5915f24", "scanner": "scanner-primary", "fingerprint": "c66daf275ecae09e", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/e2e/devices.spec.ts"}, "region": {"startLine": 1237}}}]}, {"ruleId": "scanner-eea92d7748146c20", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "1295e3fbe434e573", "scanner": "scanner-primary", "fingerprint": "eea92d7748146c20", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release-please.yml"}, "region": {"startLine": 27}}}]}, {"ruleId": "scanner-eea92d7748146c20", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "e6d9d4a2589ba127", "scanner": "scanner-primary", "fingerprint": "eea92d7748146c20", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release-please.yml"}, "region": {"startLine": 46}}}]}, {"ruleId": "scanner-eea92d7748146c20", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "16eedae8d6596058", "scanner": "scanner-primary", "fingerprint": "eea92d7748146c20", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release-please.yml"}, "region": {"startLine": 51}}}]}, {"ruleId": "scanner-eea92d7748146c20", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "dc9b6439762ee602", "scanner": "scanner-primary", "fingerprint": "eea92d7748146c20", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release-please.yml"}, "region": {"startLine": 95}}}]}, {"ruleId": "scanner-eea92d7748146c20", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "e6d9d4a2589ba127", "scanner": "scanner-primary", "fingerprint": "eea92d7748146c20", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release-please.yml"}, "region": {"startLine": 113}}}]}, {"ruleId": "scanner-eea92d7748146c20", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "16eedae8d6596058", "scanner": "scanner-primary", "fingerprint": "eea92d7748146c20", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release-please.yml"}, "region": {"startLine": 118}}}]}, {"ruleId": "scanner-eea92d7748146c20", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "dc9b6439762ee602", "scanner": "scanner-primary", "fingerprint": "eea92d7748146c20", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release-please.yml"}, "region": {"startLine": 162}}}]}, {"ruleId": "scanner-cbe310f193a6df9f", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "573212e145c44806", "scanner": "scanner-primary", "fingerprint": "cbe310f193a6df9f", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release-please.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3b51a9585bb32eb9", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "c96951a4c94245ac", "scanner": "scanner-primary", "fingerprint": "3b51a9585bb32eb9", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/router.yml"}, "region": {"startLine": 26}}}]}, {"ruleId": "scanner-3b51a9585bb32eb9", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "a36a2f0e5635cfb7", "scanner": "scanner-primary", "fingerprint": "3b51a9585bb32eb9", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/router.yml"}, "region": {"startLine": 29}}}]}, {"ruleId": "scanner-3b51a9585bb32eb9", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "c96951a4c94245ac", "scanner": "scanner-primary", "fingerprint": "3b51a9585bb32eb9", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/router.yml"}, "region": {"startLine": 48}}}]}, {"ruleId": "scanner-939049ecfb596846", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "80b27bbdee1f1eeb", "scanner": "scanner-primary", "fingerprint": "939049ecfb596846", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/publish-testkit.yml"}, "region": {"startLine": 31}}}]}, {"ruleId": "scanner-939049ecfb596846", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "5411c0f025409187", "scanner": "scanner-primary", "fingerprint": "939049ecfb596846", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/publish-testkit.yml"}, "region": {"startLine": 34}}}]}, {"ruleId": "scanner-939049ecfb596846", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "a767c446636f016b", "scanner": "scanner-primary", "fingerprint": "939049ecfb596846", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/publish-testkit.yml"}, "region": {"startLine": 81}}}]}, {"ruleId": "scanner-939049ecfb596846", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "a767c446636f016b", "scanner": "scanner-primary", "fingerprint": "939049ecfb596846", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/publish-testkit.yml"}, "region": {"startLine": 88}}}]}, {"ruleId": "scanner-b67940ce6b00ef1d", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "634821b48f7275e2", "scanner": "scanner-primary", "fingerprint": "b67940ce6b00ef1d", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/publish-testkit.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "97a9a5de61d82fcd", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 23}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "4a63b1fd6887cae9", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 28}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "97a9a5de61d82fcd", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 60}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ef7e6ef84bc585df", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 63}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "97a9a5de61d82fcd", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 106}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ef7e6ef84bc585df", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 109}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "97a9a5de61d82fcd", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 168}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ef7e6ef84bc585df", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 171}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "97a9a5de61d82fcd", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 226}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "4a63b1fd6887cae9", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 229}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ef7e6ef84bc585df", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 240}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "a22664b58dca3181", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 294}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "97a9a5de61d82fcd", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 315}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "4a63b1fd6887cae9", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 343}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "a22664b58dca3181", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 370}}}]}, {"ruleId": "scanner-bfed62aa44767542", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "6dedd5b7fcc0db7e", "scanner": "scanner-primary", "fingerprint": "bfed62aa44767542", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/publish-agent.yml"}, "region": {"startLine": 31}}}]}, {"ruleId": "scanner-bfed62aa44767542", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "e3a9ce8cad265114", "scanner": "scanner-primary", "fingerprint": "bfed62aa44767542", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/publish-agent.yml"}, "region": {"startLine": 34}}}]}, {"ruleId": "scanner-bfed62aa44767542", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "7f02cd39ef4c77ec", "scanner": "scanner-primary", "fingerprint": "bfed62aa44767542", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/publish-agent.yml"}, "region": {"startLine": 81}}}]}, {"ruleId": "scanner-bfed62aa44767542", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "7f02cd39ef4c77ec", "scanner": "scanner-primary", "fingerprint": "bfed62aa44767542", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/publish-agent.yml"}, "region": {"startLine": 88}}}]}, {"ruleId": "scanner-16526d8b7aa2b5dd", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "37686e7243e7c0f4", "scanner": "scanner-primary", "fingerprint": "16526d8b7aa2b5dd", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/publish-agent.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-21aa0c39a7c1ca23", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "2fdc0456c2cf4f92", "scanner": "scanner-primary", "fingerprint": "21aa0c39a7c1ca23", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/security.yml"}, "region": {"startLine": 30}}}]}, {"ruleId": "scanner-21aa0c39a7c1ca23", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "f2c4611b99452528", "scanner": "scanner-primary", "fingerprint": "21aa0c39a7c1ca23", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/security.yml"}, "region": {"startLine": 33}}}]}, {"ruleId": "scanner-21aa0c39a7c1ca23", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "c692784fe6accfa4", "scanner": "scanner-primary", "fingerprint": "21aa0c39a7c1ca23", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/security.yml"}, "region": {"startLine": 39}}}]}, {"ruleId": "scanner-21aa0c39a7c1ca23", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "2fdc0456c2cf4f92", "scanner": "scanner-primary", "fingerprint": "21aa0c39a7c1ca23", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/security.yml"}, "region": {"startLine": 50}}}]}, {"ruleId": "scanner-21aa0c39a7c1ca23", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "a18eeb9a9ec081f5", "scanner": "scanner-primary", "fingerprint": "21aa0c39a7c1ca23", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/security.yml"}, "region": {"startLine": 53}}}]}, {"ruleId": "scanner-2ce5dc13f416f529", "level": "note", "message": {"text": "Very large file: frontend/src/api/openapi.ts (13488 lines)"}, "properties": {"repobilityId": "2021b113fdb52ed7", "scanner": "scanner-primary", "fingerprint": "2ce5dc13f416f529", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-2a9166107fb4eaab", "level": "note", "message": {"text": "Very large file: frontend/e2e/devices.spec.ts (2539 lines)"}, "properties": {"repobilityId": "40d5e836f549df8b", "scanner": "scanner-primary", "fingerprint": "2a9166107fb4eaab", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-4074b6fe8a1a82c7", "level": "note", "message": {"text": "Very large file: router/tests/e2e.rs (1521 lines)"}, "properties": {"repobilityId": "35b1bdb0f0624e6a", "scanner": "scanner-primary", "fingerprint": "4074b6fe8a1a82c7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f90b74c443538983", "level": "note", "message": {"text": "Very large file: agent/tests/test_appium_process.py (1745 lines)"}, "properties": {"repobilityId": "32a89b0c6112e6de", "scanner": "scanner-primary", "fingerprint": "f90b74c443538983", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d882a81077a0376c", "level": "note", "message": {"text": "Very large file: backend/tests/verification/test_device_verification.py (1828 lines)"}, "properties": {"repobilityId": "0376c4edffb15316", "scanner": "scanner-primary", "fingerprint": "d882a81077a0376c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3e54d84a1ec1b373", "level": "note", "message": {"text": "Very large file: backend/tests/verification/test_device_verification_units_more.py (1422 lines)"}, "properties": {"repobilityId": "2c59f079279cd844", "scanner": "scanner-primary", "fingerprint": "3e54d84a1ec1b373", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d693be3d041bad23", "level": "note", "message": {"text": "Very large file: backend/tests/sessions/test_session_viability.py (1436 lines)"}, "properties": {"repobilityId": "fe47633d09d7de7f", "scanner": "scanner-primary", "fingerprint": "d693be3d041bad23", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-29b287a0eb192239", "level": "note", "message": {"text": "Very large file: backend/tests/sessions/test_session_sync.py (1204 lines)"}, "properties": {"repobilityId": "25d2c0df4ca9dea0", "scanner": "scanner-primary", "fingerprint": "29b287a0eb192239", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-cd8ae370d9666f50", "level": "note", "message": {"text": "Very large file: backend/tests/lifecycle/test_lifecycle_policy.py (2441 lines)"}, "properties": {"repobilityId": "0ac96d47fe986079", "scanner": "scanner-primary", "fingerprint": "cd8ae370d9666f50", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c0bb34413b27b55b", "level": "note", "message": {"text": "Very large file: backend/tests/grid/test_router_units_more.py (3044 lines)"}, "properties": {"repobilityId": "63fdde6b664e4e90", "scanner": "scanner-primary", "fingerprint": "c0bb34413b27b55b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-4cffb66a8ecd6b06", "level": "note", "message": {"text": "Very large file: backend/tests/runs/test_run_service_coverage_more.py (1262 lines)"}, "properties": {"repobilityId": "b5a0f8cff26247e3", "scanner": "scanner-primary", "fingerprint": "4cffb66a8ecd6b06", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-50bac7841d023b3b", "level": "note", "message": {"text": "Very large file: backend/tests/devices/test_devices_api.py (2275 lines)"}, "properties": {"repobilityId": "a9718c53604180c9", "scanner": "scanner-primary", "fingerprint": "50bac7841d023b3b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d2dd3849b89c453a", "level": "note", "message": {"text": "Very large file: backend/tests/devices/test_device_connectivity.py (2355 lines)"}, "properties": {"repobilityId": "bec13aa33e385b9f", "scanner": "scanner-primary", "fingerprint": "d2dd3849b89c453a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-88da338ad7a2bb9b", "level": "note", "message": {"text": "Very large file: backend/alembic/versions/53063d67b14c_baseline_postgresql_18_schema.py (906 lines)"}, "properties": {"repobilityId": "3da0a3d6d80cef14", "scanner": "scanner-primary", "fingerprint": "88da338ad7a2bb9b", "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": "d1d7e09e9bb767f7", "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": "c1c83b7258539489", "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": "6a8dc65f7fa78071", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "5e8fa2b53f8a2a94", "scanner": "scanner-primary", "fingerprint": "ea8f3013f588db25", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-8424db9c75e04ba4", "level": "none", "message": {"text": "Very short observed git history"}, "properties": {"repobilityId": "35680c5ab1c37d41", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-2854d1af299ac2c5", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/components/deviceDetail/DiagnosticBundleButton.tsx:11"}, "properties": {"repobilityId": "39539af68ac142be", "scanner": "scanner-primary", "fingerprint": "2854d1af299ac2c5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fe80c2822d526841", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/build_driver_pack_tarball.py:34"}, "properties": {"repobilityId": "46c5eb090a492975", "scanner": "scanner-primary", "fingerprint": "fe80c2822d526841", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-30d81c025d1e66f7", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/build_driver_tarballs.py:56"}, "properties": {"repobilityId": "2068341bd85fd889", "scanner": "scanner-primary", "fingerprint": "30d81c025d1e66f7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a3d2f85fae506911", "level": "none", "message": {"text": "Commented-code block (6 lines) in agent/tests/test_appium_process.py:623"}, "properties": {"repobilityId": "89e104fe86ff35bb", "scanner": "scanner-primary", "fingerprint": "a3d2f85fae506911", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-26283d9b44b974e7", "level": "none", "message": {"text": "Commented-code block (5 lines) in agent/agent_app/appium/process.py:537"}, "properties": {"repobilityId": "88b82e6352d104ed", "scanner": "scanner-primary", "fingerprint": "26283d9b44b974e7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e8ddd3b2f5e59e00", "level": "none", "message": {"text": "Commented-code block (7 lines) in agent/agent_app/pack/adapter_types.py:104"}, "properties": {"repobilityId": "f5180c9842338802", "scanner": "scanner-primary", "fingerprint": "e8ddd3b2f5e59e00", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8e9e174dda33e57c", "level": "none", "message": {"text": "Commented-code block (6 lines) in agent/agent_app/pack/discovery.py:221"}, "properties": {"repobilityId": "54137a991aa6e4bb", "scanner": "scanner-primary", "fingerprint": "8e9e174dda33e57c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d44d90e98be9016e", "level": "none", "message": {"text": "Commented-code block (5 lines) in agent/agent_app/pack/host_identity.py:20"}, "properties": {"repobilityId": "b9c9eeeb6380bf75", "scanner": "scanner-primary", "fingerprint": "d44d90e98be9016e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2bb0f49a3bc85cd0", "level": "none", "message": {"text": "Commented-code block (6 lines) in agent/agent_app/pack/state.py:306"}, "properties": {"repobilityId": "95820271259cd26b", "scanner": "scanner-primary", "fingerprint": "2bb0f49a3bc85cd0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-013c4f251b0d8a4f", "level": "note", "message": {"text": "Stub function `post_session` (body is just `pass`/`return`) \u2014 driver-packs/adapters/roku/adapter/__init__.py:114"}, "properties": {"repobilityId": "122321bb27377467", "scanner": "scanner-primary", "fingerprint": "013c4f251b0d8a4f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "empty-handler", "dead-code"]}}, {"ruleId": "scanner-12aeb373a4a944e9", "level": "error", "message": {"text": "Blocking `urllib.request.urlopen(...)` inside `async def fetch_device_info` \u2014 driver-packs/adapters/roku/adapter/normalize.py:14"}, "properties": {"repobilityId": "eed79cda2154cd0e", "scanner": "scanner-primary", "fingerprint": "12aeb373a4a944e9", "layer": "quality", "severity": "high", "confidence": 1.0, "tags": ["integrity", "sync-io-in-async", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "driver-packs/adapters/roku/adapter/normalize.py"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-109fbac147111b4e", "level": "none", "message": {"text": "Commented-code block (5 lines) in driver-packs/adapters/android/adapter/normalize.py:16"}, "properties": {"repobilityId": "5950fa72d656f101", "scanner": "scanner-primary", "fingerprint": "109fbac147111b4e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8fd01ed86434cfa1", "level": "note", "message": {"text": "Stub function `post_session` (body is just `pass`/`return`) \u2014 driver-packs/adapters/android/adapter/session.py:15"}, "properties": {"repobilityId": "17e61018d4d3ebb5", "scanner": "scanner-primary", "fingerprint": "8fd01ed86434cfa1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "empty-handler", "dead-code"]}}, {"ruleId": "scanner-7ef98e98bb552219", "level": "note", "message": {"text": "Stub function `post_session` (body is just `pass`/`return`) \u2014 driver-packs/adapters/apple/adapter/session.py:20"}, "properties": {"repobilityId": "cf9d65da84e06e5a", "scanner": "scanner-primary", "fingerprint": "7ef98e98bb552219", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "empty-handler", "dead-code"]}}, {"ruleId": "scanner-6f8099923ef4e15f", "level": "none", "message": {"text": "Commented-code block (7 lines) in backend/tests/conftest.py:236"}, "properties": {"repobilityId": "252ec79040dabec7", "scanner": "scanner-primary", "fingerprint": "6f8099923ef4e15f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cd2e36be93454300", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/tests/regressions/test_bug_audit_exclude_after_release.py:85"}, "properties": {"repobilityId": "2a6982bd2ce70f33", "scanner": "scanner-primary", "fingerprint": "cd2e36be93454300", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-97b2318c503b6c61", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/tests/regressions/test_bug_audit_precondition_sweep_toctou.py:86"}, "properties": {"repobilityId": "15b3f8f21f085c33", "scanner": "scanner-primary", "fingerprint": "97b2318c503b6c61", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-35e7659e7a9a72b4", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/tests/concurrency/test_concurrency_lifecycle_state.py:314"}, "properties": {"repobilityId": "b9f4b044bb2702b5", "scanner": "scanner-primary", "fingerprint": "35e7659e7a9a72b4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4c5be410cb3469f9", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/tests/concurrency/test_bug_audit_group_add_members_race.py:67"}, "properties": {"repobilityId": "fc15195a48b32975", "scanner": "scanner-primary", "fingerprint": "4c5be410cb3469f9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f1c276c0455e8f70", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/tests/concurrency/test_bug_audit_approve_host_race.py:90"}, "properties": {"repobilityId": "2436c8e49bd70224", "scanner": "scanner-primary", "fingerprint": "f1c276c0455e8f70", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-31593d8b79014c91", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/tests/concurrency/test_concurrency_heartbeat_check_hosts_device_lock.py:44"}, "properties": {"repobilityId": "0baeb6c392fc3d4c", "scanner": "scanner-primary", "fingerprint": "31593d8b79014c91", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5e2eeb8a5ec67eac", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/tests/concurrency/test_bug_audit_pack_drain_race.py:71"}, "properties": {"repobilityId": "a788e3c5cbc718c8", "scanner": "scanner-primary", "fingerprint": "5e2eeb8a5ec67eac", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d187be0075fea99c", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/tests/auth/test_auth.py:317"}, "properties": {"repobilityId": "92ef4cc3c2f1d5ab", "scanner": "scanner-primary", "fingerprint": "d187be0075fea99c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-27a967b726949eee", "level": "note", "message": {"text": "Legacy-named symbol `model_copy` in backend/tests/analytics/test_fleet_capacity.py:65"}, "properties": {"repobilityId": "8f3c8a13b7acd194", "scanner": "scanner-primary", "fingerprint": "27a967b726949eee", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-05208daf9124d6c8", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/tests/events/test_event_bus_more.py:152"}, "properties": {"repobilityId": "5e58dc5ff0ee0595", "scanner": "scanner-primary", "fingerprint": "05208daf9124d6c8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fd38b807fe0ae3ff", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/tests/sessions/test_session_close_lock_order.py:148"}, "properties": {"repobilityId": "becfbc0d8e120a01", "scanner": "scanner-primary", "fingerprint": "fd38b807fe0ae3ff", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-228ac7a669aa3a79", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/tests/sessions/test_session_service.py:563"}, "properties": {"repobilityId": "501cd9a716fa016a", "scanner": "scanner-primary", "fingerprint": "228ac7a669aa3a79", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c5892f10e6cac297", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/tests/lifecycle/test_lifecycle_policy.py:1402"}, "properties": {"repobilityId": "77334bc1acf95bbf", "scanner": "scanner-primary", "fingerprint": "c5892f10e6cac297", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5091e295ef980d8d", "level": "none", "message": {"text": "Commented-code block (8 lines) in backend/tests/lifecycle/test_lifecycle_policy_desired_state.py:114"}, "properties": {"repobilityId": "9b5e2c5845a54bbd", "scanner": "scanner-primary", "fingerprint": "5091e295ef980d8d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c4cb9f7fe7537347", "level": "none", "message": {"text": "Commented-code block (8 lines) in backend/tests/lifecycle/test_lifecycle_write_state_allowlist.py:23"}, "properties": {"repobilityId": "1380f77de902f527", "scanner": "scanner-primary", "fingerprint": "c4cb9f7fe7537347", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3267383bcd21b8ab", "level": "none", "message": {"text": "Commented-code block (7 lines) in backend/tests/grid/test_grid_allocation_guards.py:252"}, "properties": {"repobilityId": "d72baa6f45b7a3b9", "scanner": "scanner-primary", "fingerprint": "3267383bcd21b8ab", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d382b1a6748c5279", "level": "note", "message": {"text": "Legacy-named symbol `model_copy` in backend/tests/runs/test_runs_api.py:901"}, "properties": {"repobilityId": "07eee53bf5bc6208", "scanner": "scanner-primary", "fingerprint": "d382b1a6748c5279", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-a4baa7bcde5db193", "level": "note", "message": {"text": "Legacy-named symbol `real_old` in backend/tests/core/test_data_cleanup.py:118"}, "properties": {"repobilityId": "111de1c79687deea", "scanner": "scanner-primary", "fingerprint": "a4baa7bcde5db193", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-4e94b2329b1be8ed", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/tests/webhooks/test_dispatcher.py:150"}, "properties": {"repobilityId": "d76817d20d9bf2ff", "scanner": "scanner-primary", "fingerprint": "4e94b2329b1be8ed", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d74064dbb22f21f8", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/tests/hosts/test_host_status_event_after_commit.py:41"}, "properties": {"repobilityId": "ac331f9fd29c6047", "scanner": "scanner-primary", "fingerprint": "d74064dbb22f21f8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-72d319c162b80934", "level": "none", "message": {"text": "Commented-code block (7 lines) in backend/tests/devices/test_bulk_service.py:196"}, "properties": {"repobilityId": "9944d7091227ab60", "scanner": "scanner-primary", "fingerprint": "72d319c162b80934", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a251bad2cb24989c", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/tests/devices/test_state_write_guard_resolver.py:61"}, "properties": {"repobilityId": "bcc9bbedf91d5599", "scanner": "scanner-primary", "fingerprint": "a251bad2cb24989c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8616e2da7e35b0e2", "level": "note", "message": {"text": "Legacy-named symbol `pydantic_v2` in backend/scripts/generate_agent_schemas.py:100"}, "properties": {"repobilityId": "5a728c161b5dec04", "scanner": "scanner-primary", "fingerprint": "8616e2da7e35b0e2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-76fafc461fae00b1", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 backend/scripts/generate_agent_schemas.py:45"}, "properties": {"repobilityId": "eaaab097ea2013a0", "scanner": "scanner-primary", "fingerprint": "76fafc461fae00b1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-78ab651140d9b184", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/app/verification/services/execution.py:434"}, "properties": {"repobilityId": "b8377caedd370c9e", "scanner": "scanner-primary", "fingerprint": "78ab651140d9b184", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1d85812edaba1b03", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/app/events/event_bus.py:307"}, "properties": {"repobilityId": "c451008d88276a27", "scanner": "scanner-primary", "fingerprint": "1d85812edaba1b03", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5f7a065edbfafd79", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/app/packs/manifest.py:125"}, "properties": {"repobilityId": "ddc154409cff0e92", "scanner": "scanner-primary", "fingerprint": "5f7a065edbfafd79", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-249411683d102f8e", "level": "none", "message": {"text": "Commented-code block (7 lines) in backend/app/packs/adapter.py:71"}, "properties": {"repobilityId": "31f915402dc26517", "scanner": "scanner-primary", "fingerprint": "249411683d102f8e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c81e0a41657d6564", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/app/packs/services/lifecycle.py:54"}, "properties": {"repobilityId": "d41ada094a66c486", "scanner": "scanner-primary", "fingerprint": "c81e0a41657d6564", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5dc709bce33e5640", "level": "none", "message": {"text": "Commented-code block (7 lines) in backend/app/packs/services/discovery.py:221"}, "properties": {"repobilityId": "ef2bfaa478893469", "scanner": "scanner-primary", "fingerprint": "5dc709bce33e5640", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3cbbcb37b8a82c98", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/app/packs/services/ingest.py:158"}, "properties": {"repobilityId": "e487132149f36c4c", "scanner": "scanner-primary", "fingerprint": "3cbbcb37b8a82c98", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f32a5c7fd42ff4a4", "level": "none", "message": {"text": "Commented-code block (7 lines) in backend/app/packs/services/platform_resolver.py:149"}, "properties": {"repobilityId": "c57c5cce23708600", "scanner": "scanner-primary", "fingerprint": "f32a5c7fd42ff4a4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a8ea8686444f1082", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/app/sessions/service_viability.py:87"}, "properties": {"repobilityId": "d3592ac3d9f73635", "scanner": "scanner-primary", "fingerprint": "a8ea8686444f1082", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5619e3db8f4d2ea6", "level": "none", "message": {"text": "Commented-code block (7 lines) in backend/app/sessions/service_sync.py:143"}, "properties": {"repobilityId": "7854d15b0bf2a30e", "scanner": "scanner-primary", "fingerprint": "5619e3db8f4d2ea6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c990f84159c6ac7e", "level": "none", "message": {"text": "Commented-code block (7 lines) in backend/app/sessions/service.py:203"}, "properties": {"repobilityId": "c1863cfcb147a578", "scanner": "scanner-primary", "fingerprint": "c990f84159c6ac7e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-49d02bfb9c1706c0", "level": "none", "message": {"text": "Commented-code block (10 lines) in backend/app/lifecycle/services/policy.py:155"}, "properties": {"repobilityId": "7690b4c0e507ba9b", "scanner": "scanner-primary", "fingerprint": "49d02bfb9c1706c0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-40829bdc60c72232", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/app/lifecycle/services/operator_node.py:176"}, "properties": {"repobilityId": "f0ef28f5e069e434", "scanner": "scanner-primary", "fingerprint": "40829bdc60c72232", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3b30f11c89c2e059", "level": "none", "message": {"text": "Commented-code block (8 lines) in backend/app/lifecycle/services/actions.py:289"}, "properties": {"repobilityId": "1a6713caf0c64284", "scanner": "scanner-primary", "fingerprint": "3b30f11c89c2e059", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5d197cb216a124a5", "level": "none", "message": {"text": "Commented-code block (7 lines) in backend/app/grid/allocation.py:83"}, "properties": {"repobilityId": "585b03713075cea9", "scanner": "scanner-primary", "fingerprint": "5d197cb216a124a5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5f7639873aaffc0a", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/app/grid/router_internal.py:106"}, "properties": {"repobilityId": "4e8d0a6454b1bed3", "scanner": "scanner-primary", "fingerprint": "5f7639873aaffc0a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-65a49b32888beb2b", "level": "none", "message": {"text": "Commented-code block (8 lines) in backend/app/runs/service_lifecycle.py:22"}, "properties": {"repobilityId": "9fdacff17cd524fe", "scanner": "scanner-primary", "fingerprint": "65a49b32888beb2b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b70f28ae01892aad", "level": "none", "message": {"text": "Commented-code block (7 lines) in backend/app/runs/router.py:250"}, "properties": {"repobilityId": "2ccf8fc6fcaf3d5e", "scanner": "scanner-primary", "fingerprint": "b70f28ae01892aad", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5e1e14cf34a60606", "level": "none", "message": {"text": "Commented-code block (13 lines) in backend/app/runs/service_reaper.py:74"}, "properties": {"repobilityId": "c186d626cb30b8ec", "scanner": "scanner-primary", "fingerprint": "5e1e14cf34a60606", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c3a32d441d5bb65e", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/app/runs/service_lifecycle_release.py:223"}, "properties": {"repobilityId": "81cefaff44de20ca", "scanner": "scanner-primary", "fingerprint": "c3a32d441d5bb65e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dbc58e139e76fff7", "level": "none", "message": {"text": "Commented-code block (8 lines) in backend/app/runs/service_allocator.py:47"}, "properties": {"repobilityId": "5e8178e61382b962", "scanner": "scanner-primary", "fingerprint": "dbc58e139e76fff7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-52b02631aa7fceec", "level": "none", "message": {"text": "Commented-code block (11 lines) in backend/app/agent_comm/client.py:139"}, "properties": {"repobilityId": "cebc8cce69111a64", "scanner": "scanner-primary", "fingerprint": "52b02631aa7fceec", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cc88bdc31cf0cf3f", "level": "none", "message": {"text": "Commented-code block (9 lines) in backend/app/agent_comm/operations.py:49"}, "properties": {"repobilityId": "689b39afae1b163e", "scanner": "scanner-primary", "fingerprint": "cc88bdc31cf0cf3f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8f94c8a0f8d57908", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/app/agent_comm/reconfigure_delivery.py:29"}, "properties": {"repobilityId": "e2a154d5da5f78fa", "scanner": "scanner-primary", "fingerprint": "8f94c8a0f8d57908", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-21bd42de96cb2140", "level": "none", "message": {"text": "Commented-code block (7 lines) in backend/app/diagnostics/services/export.py:333"}, "properties": {"repobilityId": "d2659700cca3e2fd", "scanner": "scanner-primary", "fingerprint": "21bd42de96cb2140", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1832117b8121ddc3", "level": "none", "message": {"text": "Commented-code block (10 lines) in backend/app/appium_nodes/services/heartbeat.py:420"}, "properties": {"repobilityId": "c93b7859a3c3d3e2", "scanner": "scanner-primary", "fingerprint": "1832117b8121ddc3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3317ef3d89fb32a5", "level": "none", "message": {"text": "Commented-code block (8 lines) in backend/app/appium_nodes/services/reconciler.py:472"}, "properties": {"repobilityId": "2940340792dbfaaa", "scanner": "scanner-primary", "fingerprint": "3317ef3d89fb32a5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f4bc3b48d2310946", "level": "none", "message": {"text": "Commented-code block (7 lines) in backend/app/appium_nodes/services/reconciler_agent.py:187"}, "properties": {"repobilityId": "3a9e090be080bf20", "scanner": "scanner-primary", "fingerprint": "f4bc3b48d2310946", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0128b34c1999c6b2", "level": "none", "message": {"text": "Commented-code block (8 lines) in backend/app/appium_nodes/services/node_health.py:300"}, "properties": {"repobilityId": "10a1c5fe54396396", "scanner": "scanner-primary", "fingerprint": "0128b34c1999c6b2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6475af2da9320e06", "level": "note", "message": {"text": "Legacy-named symbol `refresh_system_gauges_legacy` in backend/app/core/metrics.py:10"}, "properties": {"repobilityId": "17edbc79494de8eb", "scanner": "scanner-primary", "fingerprint": "6475af2da9320e06", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-13f8cad0f6acb510", "level": "note", "message": {"text": "Legacy-named symbol `snapshot_copy` in backend/app/core/observability.py:357"}, "properties": {"repobilityId": "e46bfb4138ffa546", "scanner": "scanner-primary", "fingerprint": "13f8cad0f6acb510", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-7a961e5e85c7899b", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/app/core/observability.py:131"}, "properties": {"repobilityId": "209c98aa87d690d8", "scanner": "scanner-primary", "fingerprint": "7a961e5e85c7899b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1f6c767108b4788b", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/app/core/leader/advisory.py:77"}, "properties": {"repobilityId": "177775c78d3b70b7", "scanner": "scanner-primary", "fingerprint": "1f6c767108b4788b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3c0e04d4f66f68ae", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/app/hosts/router.py:175"}, "properties": {"repobilityId": "cee1a47dea8c9f67", "scanner": "scanner-primary", "fingerprint": "3c0e04d4f66f68ae", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1f72eb5ccfc4ec98", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/app/hosts/service.py:174"}, "properties": {"repobilityId": "6f60e7935a6390c8", "scanner": "scanner-primary", "fingerprint": "1f72eb5ccfc4ec98", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1631aa9b3173e337", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/app/devices/models/device.py:168"}, "properties": {"repobilityId": "53bd834d01260805", "scanner": "scanner-primary", "fingerprint": "1631aa9b3173e337", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-06b5ebab1aeef11f", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/app/devices/services/maintenance.py:66"}, "properties": {"repobilityId": "622ac434e00554de", "scanner": "scanner-primary", "fingerprint": "06b5ebab1aeef11f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e67e7d4edd1a234e", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/app/devices/services/lifecycle_policy_state.py:143"}, "properties": {"repobilityId": "c4ba5ddd9b64cf28", "scanner": "scanner-primary", "fingerprint": "e67e7d4edd1a234e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-67f99212bb84b548", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/app/devices/services/connectivity.py:59"}, "properties": {"repobilityId": "87273203af45c8da", "scanner": "scanner-primary", "fingerprint": "67f99212bb84b548", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4f2f9304ae55f927", "level": "none", "message": {"text": "Commented-code block (7 lines) in backend/app/devices/services/intent_reconciler.py:149"}, "properties": {"repobilityId": "876798563380e5fc", "scanner": "scanner-primary", "fingerprint": "4f2f9304ae55f927", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c6d3bd6775c5395a", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/app/devices/services/health.py:106"}, "properties": {"repobilityId": "0f56c2081aeb3b37", "scanner": "scanner-primary", "fingerprint": "c6d3bd6775c5395a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b085f68477d4141c", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/app/devices/services/intent_evaluator.py:88"}, "properties": {"repobilityId": "d2d60ac47bfb237b", "scanner": "scanner-primary", "fingerprint": "b085f68477d4141c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4ce8f17f190124b3", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/app/devices/services/readiness.py:188"}, "properties": {"repobilityId": "94d98b5e8ba3c190", "scanner": "scanner-primary", "fingerprint": "4ce8f17f190124b3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-97981dfd70bef95c", "level": "none", "message": {"text": "Commented-code block (8 lines) in backend/app/devices/services/state_write_guard.py:162"}, "properties": {"repobilityId": "370df32b0aab41c0", "scanner": "scanner-primary", "fingerprint": "97981dfd70bef95c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-defdcb0376b2bc2c", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/app/devices/services/groups.py:132"}, "properties": {"repobilityId": "78d5b8d404cae27b", "scanner": "scanner-primary", "fingerprint": "defdcb0376b2bc2c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a6c5734012ff53b6", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/app/devices/services/state.py:174"}, "properties": {"repobilityId": "74c47a355901bd7a", "scanner": "scanner-primary", "fingerprint": "a6c5734012ff53b6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fee24072601b1223", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/app/devices/services/intent.py:77"}, "properties": {"repobilityId": "5c0a94c1bcb16fec", "scanner": "scanner-primary", "fingerprint": "fee24072601b1223", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-798a3c364388afec", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/app/devices/services/service.py:251"}, "properties": {"repobilityId": "079cbea89e548e56", "scanner": "scanner-primary", "fingerprint": "798a3c364388afec", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-86ec5c0a6ecde14b", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/app/devices/routers/control.py:262"}, "properties": {"repobilityId": "315edcf79fcc83f6", "scanner": "scanner-primary", "fingerprint": "86ec5c0a6ecde14b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-46dde1664b8b1f9e", "level": "note", "message": {"text": "Legacy-named symbol `runstate_old` in backend/alembic/versions/2026-05-25_drop_completing_from_runstate.py:26"}, "properties": {"repobilityId": "b1be5d5769b64575", "scanner": "scanner-primary", "fingerprint": "46dde1664b8b1f9e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-65df07ab4020db79", "level": "note", "message": {"text": "18 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "5e334d56f52c02e1", "scanner": "scanner-primary", "fingerprint": "65df07ab4020db79", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "88fa07f3aa44702c", "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": "dafeb7c027ab2740", "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": "155336ea645de34d", "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": "275c1bed9621c2fd", "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": "76b4e57a03f02201", "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": "169c305a4a3be09d", "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": "5bea00baf78a543c", "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": "47809c6cc88f620a", "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": "b9db021b34cbc518", "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": "879d9db72e8d381d", "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": "342bec1c7949dadc", "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": "f5ef74d2a7d3f55e", "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": "0cf30d13801e06a6", "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": "66b1ece3cc3e6810", "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": "f41be56c682278b0", "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": "a27ccb3791c4542c", "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": "cb9fda48d8c5e6d0", "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": "c66d2fc8480f9bb4", "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": "f10bd095a7a9cc02", "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": "bee188bf52127a78", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-85d958a13f671355", "level": "warning", "message": {"text": "Frontend route `/drivers/:id` has no Link/navigate to it \u2014 frontend/src/pages/DriverDetail.test.tsx"}, "properties": {"repobilityId": "d4f7ac6b55fa10e2", "scanner": "scanner-primary", "fingerprint": "85d958a13f671355", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-83c603bd93ec324b", "level": "warning", "message": {"text": "Frontend route `/hosts/:id` has no Link/navigate to it \u2014 frontend/src/pages/HostDetail.test.tsx"}, "properties": {"repobilityId": "b1a4ff9a875e2644", "scanner": "scanner-primary", "fingerprint": "83c603bd93ec324b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-17d3edaa082af88d", "level": "error", "message": {"text": "FastAPI POST `<anonymous>` without auth dependency \u2014 agent/agent_app/appium/router.py:34"}, "properties": {"repobilityId": "dea1bbe6fdaa9907", "scanner": "scanner-primary", "fingerprint": "17d3edaa082af88d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "agent/agent_app/appium/router.py"}, "region": {"startLine": 34}}}]}, {"ruleId": "scanner-e1087f5689217780", "level": "error", "message": {"text": "FastAPI POST `reconfigure_appium` without auth dependency \u2014 agent/agent_app/appium/router.py:96"}, "properties": {"repobilityId": "3e0c327f85575914", "scanner": "scanner-primary", "fingerprint": "e1087f5689217780", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "agent/agent_app/appium/router.py"}, "region": {"startLine": 96}}}]}, {"ruleId": "scanner-791132473e873250", "level": "error", "message": {"text": "FastAPI POST `stop_appium` without auth dependency \u2014 agent/agent_app/appium/router.py:123"}, "properties": {"repobilityId": "99c7282ea1f423f2", "scanner": "scanner-primary", "fingerprint": "791132473e873250", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "agent/agent_app/appium/router.py"}, "region": {"startLine": 123}}}]}, {"ruleId": "scanner-66d63c602bfdc4a2", "level": "error", "message": {"text": "FastAPI POST `pack_device_lifecycle_route` without auth dependency \u2014 agent/agent_app/pack/router.py:217"}, "properties": {"repobilityId": "6bb031856cff8a92", "scanner": "scanner-primary", "fingerprint": "66d63c602bfdc4a2", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "agent/agent_app/pack/router.py"}, "region": {"startLine": 217}}}]}, {"ruleId": "scanner-edfa61083567be88", "level": "error", "message": {"text": "FastAPI POST `feature_action_route` without auth dependency \u2014 agent/agent_app/pack/router.py:255"}, "properties": {"repobilityId": "08864b0b08563ac4", "scanner": "scanner-primary", "fingerprint": "edfa61083567be88", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "agent/agent_app/pack/router.py"}, "region": {"startLine": 255}}}]}, {"ruleId": "scanner-3e89b4194689e7ab", "level": "error", "message": {"text": "FastAPI POST `normalize_device_route` without auth dependency \u2014 agent/agent_app/pack/router.py:287"}, "properties": {"repobilityId": "e64a36d42c0b6ac1", "scanner": "scanner-primary", "fingerprint": "3e89b4194689e7ab", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "agent/agent_app/pack/router.py"}, "region": {"startLine": 287}}}]}, {"ruleId": "scanner-4cc0766023bf336e", "level": "error", "message": {"text": "FastAPI POST `pack_doctor_route` without auth dependency \u2014 agent/agent_app/pack/router.py:325"}, "properties": {"repobilityId": "37bc492a30b63239", "scanner": "scanner-primary", "fingerprint": "4cc0766023bf336e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "agent/agent_app/pack/router.py"}, "region": {"startLine": 325}}}]}, {"ruleId": "scanner-35bd64a77e762814", "level": "error", "message": {"text": "FastAPI POST `sync_agent_plugins` without auth dependency \u2014 agent/agent_app/plugins/router.py:28"}, "properties": {"repobilityId": "579f35e49be979d1", "scanner": "scanner-primary", "fingerprint": "35bd64a77e762814", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "agent/agent_app/plugins/router.py"}, "region": {"startLine": 28}}}]}, {"ruleId": "scanner-feb946c50ee74861", "level": "error", "message": {"text": "FastAPI PUT `bulk_update_settings` without auth dependency \u2014 backend/app/settings/router.py:21"}, "properties": {"repobilityId": "bfa641fab16f4a4d", "scanner": "scanner-primary", "fingerprint": "feb946c50ee74861", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/settings/router.py"}, "region": {"startLine": 21}}}]}, {"ruleId": "scanner-f3d513564abe1dff", "level": "error", "message": {"text": "FastAPI POST `reset_all_settings` without auth dependency \u2014 backend/app/settings/router.py:36"}, "properties": {"repobilityId": "4a982b3243d36128", "scanner": "scanner-primary", "fingerprint": "f3d513564abe1dff", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/settings/router.py"}, "region": {"startLine": 36}}}]}, {"ruleId": "scanner-f61f8f33b90b7dbc", "level": "error", "message": {"text": "FastAPI PUT `update_setting` without auth dependency \u2014 backend/app/settings/router.py:50"}, "properties": {"repobilityId": "5da0b440d26b019f", "scanner": "scanner-primary", "fingerprint": "f61f8f33b90b7dbc", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/settings/router.py"}, "region": {"startLine": 50}}}]}, {"ruleId": "scanner-9f02e7793cfeccd0", "level": "error", "message": {"text": "FastAPI POST `reset_setting` without auth dependency \u2014 backend/app/settings/router.py:66"}, "properties": {"repobilityId": "3748993f360d1683", "scanner": "scanner-primary", "fingerprint": "9f02e7793cfeccd0", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/settings/router.py"}, "region": {"startLine": 66}}}]}, {"ruleId": "scanner-6957bfe0187d5263", "level": "error", "message": {"text": "FastAPI POST `create_device_verification_job` without auth dependency \u2014 backend/app/verification/router.py:43"}, "properties": {"repobilityId": "22f0bc750c7281b3", "scanner": "scanner-primary", "fingerprint": "6957bfe0187d5263", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/verification/router.py"}, "region": {"startLine": 43}}}]}, {"ruleId": "scanner-9793396613ef2c05", "level": "error", "message": {"text": "FastAPI POST `create_existing_device_verification_job` without auth dependency \u2014 backend/app/verification/router.py:56"}, "properties": {"repobilityId": "a22d5ff0a379abdf", "scanner": "scanner-primary", "fingerprint": "9793396613ef2c05", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/verification/router.py"}, "region": {"startLine": 56}}}]}, {"ruleId": "scanner-0aa55422b1ab9683", "level": "error", "message": {"text": "FastAPI POST `invoke_feature_action` without auth dependency \u2014 backend/app/packs/routers/host_features.py:42"}, "properties": {"repobilityId": "ecda8e0cc3341b2f", "scanner": "scanner-primary", "fingerprint": "0aa55422b1ab9683", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/packs/routers/host_features.py"}, "region": {"startLine": 42}}}]}, {"ruleId": "scanner-240a19c9300cb57d", "level": "error", "message": {"text": "FastAPI PATCH `update_pack` without auth dependency \u2014 backend/app/packs/routers/catalog.py:38"}, "properties": {"repobilityId": "6e832d666bfadc77", "scanner": "scanner-primary", "fingerprint": "240a19c9300cb57d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/packs/routers/catalog.py"}, "region": {"startLine": 38}}}]}, {"ruleId": "scanner-c4b683605df05b5f", "level": "error", "message": {"text": "FastAPI PATCH `update_runtime_policy` without auth dependency \u2014 backend/app/packs/routers/catalog.py:60"}, "properties": {"repobilityId": "9b22eaf65276d234", "scanner": "scanner-primary", "fingerprint": "c4b683605df05b5f", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/packs/routers/catalog.py"}, "region": {"startLine": 60}}}]}, {"ruleId": "scanner-97dcd636a10b3f0d", "level": "error", "message": {"text": "FastAPI DELETE `delete_driver_pack` without auth dependency \u2014 backend/app/packs/routers/catalog.py:73"}, "properties": {"repobilityId": "02546dc41e3bb036", "scanner": "scanner-primary", "fingerprint": "97dcd636a10b3f0d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/packs/routers/catalog.py"}, "region": {"startLine": 73}}}]}, {"ruleId": "scanner-ef4328877e0a83e5", "level": "error", "message": {"text": "FastAPI POST `upload` without auth dependency \u2014 backend/app/packs/routers/uploads.py:47"}, "properties": {"repobilityId": "3baa3547887b878c", "scanner": "scanner-primary", "fingerprint": "ef4328877e0a83e5", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/packs/routers/uploads.py"}, "region": {"startLine": 47}}}]}, {"ruleId": "scanner-72eeed98f2207a16", "level": "error", "message": {"text": "FastAPI PATCH `update_current_release` without auth dependency \u2014 backend/app/packs/routers/uploads.py:98"}, "properties": {"repobilityId": "a7d5efc505e306b7", "scanner": "scanner-primary", "fingerprint": "72eeed98f2207a16", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/packs/routers/uploads.py"}, "region": {"startLine": 98}}}]}, {"ruleId": "scanner-375919b80bc354d5", "level": "error", "message": {"text": "FastAPI DELETE `delete_release` without auth dependency \u2014 backend/app/packs/routers/uploads.py:112"}, "properties": {"repobilityId": "a648b3880dfc753d", "scanner": "scanner-primary", "fingerprint": "375919b80bc354d5", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/packs/routers/uploads.py"}, "region": {"startLine": 112}}}]}, {"ruleId": "scanner-25ad9c130ffc35c3", "level": "error", "message": {"text": "FastAPI POST `export_release` without auth dependency \u2014 backend/app/packs/routers/export.py:34"}, "properties": {"repobilityId": "05e1b54f2af75e08", "scanner": "scanner-primary", "fingerprint": "25ad9c130ffc35c3", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/packs/routers/export.py"}, "region": {"startLine": 34}}}]}, {"ruleId": "scanner-051a06e68e61a630", "level": "error", "message": {"text": "FastAPI POST `kill_session` without auth dependency \u2014 backend/app/sessions/router.py:130"}, "properties": {"repobilityId": "315a4611daee801e", "scanner": "scanner-primary", "fingerprint": "051a06e68e61a630", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/sessions/router.py"}, "region": {"startLine": 130}}}]}, {"ruleId": "scanner-c522d5ba507fdb6a", "level": "error", "message": {"text": "FastAPI PATCH `update_session_status` without auth dependency \u2014 backend/app/sessions/router.py:173"}, "properties": {"repobilityId": "b6509a602d2b19cd", "scanner": "scanner-primary", "fingerprint": "c522d5ba507fdb6a", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/sessions/router.py"}, "region": {"startLine": 173}}}]}, {"ruleId": "scanner-974ff13ae72a32fa", "level": "error", "message": {"text": "FastAPI POST `post_session_finished` without auth dependency \u2014 backend/app/sessions/router.py:185"}, "properties": {"repobilityId": "aa14eff77dd78451", "scanner": "scanner-primary", "fingerprint": "974ff13ae72a32fa", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/sessions/router.py"}, "region": {"startLine": 185}}}]}, {"ruleId": "scanner-86db7f3a2f9840c2", "level": "error", "message": {"text": "FastAPI POST `allocate` without auth dependency \u2014 backend/app/grid/router_internal.py:70"}, "properties": {"repobilityId": "8eb378b82dea0963", "scanner": "scanner-primary", "fingerprint": "86db7f3a2f9840c2", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/grid/router_internal.py"}, "region": {"startLine": 70}}}]}, {"ruleId": "scanner-f2c83af39eba38ee", "level": "error", "message": {"text": "FastAPI DELETE `cancel_ticket` without auth dependency \u2014 backend/app/grid/router_internal.py:122"}, "properties": {"repobilityId": "9cade5ad429c9838", "scanner": "scanner-primary", "fingerprint": "f2c83af39eba38ee", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/grid/router_internal.py"}, "region": {"startLine": 122}}}]}, {"ruleId": "scanner-267bb096fd5693a6", "level": "error", "message": {"text": "FastAPI POST `confirm` without auth dependency \u2014 backend/app/grid/router_internal.py:131"}, "properties": {"repobilityId": "1b70a3150762cd70", "scanner": "scanner-primary", "fingerprint": "267bb096fd5693a6", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/grid/router_internal.py"}, "region": {"startLine": 131}}}]}, {"ruleId": "scanner-aea37e0d865dfc90", "level": "error", "message": {"text": "FastAPI POST `fail` without auth dependency \u2014 backend/app/grid/router_internal.py:154"}, "properties": {"repobilityId": "7e4b84a2509b2335", "scanner": "scanner-primary", "fingerprint": "aea37e0d865dfc90", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/grid/router_internal.py"}, "region": {"startLine": 154}}}]}, {"ruleId": "scanner-000c52ddd1b617c8", "level": "error", "message": {"text": "FastAPI POST `ended` without auth dependency \u2014 backend/app/grid/router_internal.py:161"}, "properties": {"repobilityId": "14a209cf0cf5baff", "scanner": "scanner-primary", "fingerprint": "000c52ddd1b617c8", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/grid/router_internal.py"}, "region": {"startLine": 161}}}]}, {"ruleId": "scanner-d95e827d5cf2cf07", "level": "error", "message": {"text": "FastAPI POST `activity` without auth dependency \u2014 backend/app/grid/router_internal.py:195"}, "properties": {"repobilityId": "42a00e119882431a", "scanner": "scanner-primary", "fingerprint": "d95e827d5cf2cf07", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/grid/router_internal.py"}, "region": {"startLine": 195}}}]}, {"ruleId": "scanner-acbdb0bf5c1d6e65", "level": "error", "message": {"text": "FastAPI POST `create_run` without auth dependency \u2014 backend/app/runs/router.py:53"}, "properties": {"repobilityId": "7c5b480c07e088b1", "scanner": "scanner-primary", "fingerprint": "acbdb0bf5c1d6e65", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/runs/router.py"}, "region": {"startLine": 53}}}]}, {"ruleId": "scanner-a28b1a85a83eaa6f", "level": "error", "message": {"text": "FastAPI POST `signal_ready` without auth dependency \u2014 backend/app/runs/router.py:184"}, "properties": {"repobilityId": "b1fa909bc787e411", "scanner": "scanner-primary", "fingerprint": "a28b1a85a83eaa6f", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/runs/router.py"}, "region": {"startLine": 184}}}]}, {"ruleId": "scanner-54a68cab0b26fdc9", "level": "error", "message": {"text": "FastAPI POST `signal_active` without auth dependency \u2014 backend/app/runs/router.py:194"}, "properties": {"repobilityId": "05c823b438fe079a", "scanner": "scanner-primary", "fingerprint": "54a68cab0b26fdc9", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/runs/router.py"}, "region": {"startLine": 194}}}]}, {"ruleId": "scanner-1bd776ee0900fde7", "level": "error", "message": {"text": "FastAPI POST `report_preparation_failed` without auth dependency \u2014 backend/app/runs/router.py:204"}, "properties": {"repobilityId": "23130c4a340dca77", "scanner": "scanner-primary", "fingerprint": "1bd776ee0900fde7", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/runs/router.py"}, "region": {"startLine": 204}}}]}, {"ruleId": "scanner-34e40a67c5e9bd9d", "level": "error", "message": {"text": "FastAPI POST `cooldown_device_endpoint` without auth dependency \u2014 backend/app/runs/router.py:226"}, "properties": {"repobilityId": "c167f685946e9360", "scanner": "scanner-primary", "fingerprint": "34e40a67c5e9bd9d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/runs/router.py"}, "region": {"startLine": 226}}}]}, {"ruleId": "scanner-b33d04811e21bd57", "level": "error", "message": {"text": "FastAPI POST `heartbeat` without auth dependency \u2014 backend/app/runs/router.py:278"}, "properties": {"repobilityId": "38284f6509fed682", "scanner": "scanner-primary", "fingerprint": "b33d04811e21bd57", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/runs/router.py"}, "region": {"startLine": 278}}}]}, {"ruleId": "scanner-b938d1bdd008de4e", "level": "error", "message": {"text": "FastAPI POST `complete_run` without auth dependency \u2014 backend/app/runs/router.py:287"}, "properties": {"repobilityId": "5dcfac8ebc3f8342", "scanner": "scanner-primary", "fingerprint": "b938d1bdd008de4e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/runs/router.py"}, "region": {"startLine": 287}}}]}, {"ruleId": "scanner-6c0ed96c60e55086", "level": "error", "message": {"text": "FastAPI POST `cancel_run` without auth dependency \u2014 backend/app/runs/router.py:301"}, "properties": {"repobilityId": "461794819ecc547c", "scanner": "scanner-primary", "fingerprint": "6c0ed96c60e55086", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/runs/router.py"}, "region": {"startLine": 301}}}]}, {"ruleId": "scanner-edaeced1646d12b2", "level": "error", "message": {"text": "FastAPI POST `force_release` without auth dependency \u2014 backend/app/runs/router.py:315"}, "properties": {"repobilityId": "09838ba2ff52496b", "scanner": "scanner-primary", "fingerprint": "edaeced1646d12b2", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/runs/router.py"}, "region": {"startLine": 315}}}]}, {"ruleId": "scanner-63c028e9ea5a13a5", "level": "error", "message": {"text": "FastAPI POST `export_device_diagnostics` without auth dependency \u2014 backend/app/diagnostics/router.py:93"}, "properties": {"repobilityId": "31aeacd8bd644878", "scanner": "scanner-primary", "fingerprint": "63c028e9ea5a13a5", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/diagnostics/router.py"}, "region": {"startLine": 93}}}]}, {"ruleId": "scanner-3f5ece5256e7ba65", "level": "error", "message": {"text": "FastAPI POST `import_validate` without auth dependency \u2014 backend/app/portability/router.py:38"}, "properties": {"repobilityId": "62bbf50d1a7d8233", "scanner": "scanner-primary", "fingerprint": "3f5ece5256e7ba65", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/portability/router.py"}, "region": {"startLine": 38}}}]}, {"ruleId": "scanner-7c47861b30cd52c6", "level": "error", "message": {"text": "FastAPI POST `import_commit` without auth dependency \u2014 backend/app/portability/router.py:52"}, "properties": {"repobilityId": "8ccf0e8549e95cd7", "scanner": "scanner-primary", "fingerprint": "7c47861b30cd52c6", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/portability/router.py"}, "region": {"startLine": 52}}}]}, {"ruleId": "scanner-d7a28302e981abfc", "level": "error", "message": {"text": "FastAPI POST `clear_transition` without auth dependency \u2014 backend/app/appium_nodes/routers/admin.py:27"}, "properties": {"repobilityId": "8b9632128c953c85", "scanner": "scanner-primary", "fingerprint": "d7a28302e981abfc", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/appium_nodes/routers/admin.py"}, "region": {"startLine": 27}}}]}, {"ruleId": "scanner-422639447e30f2c2", "level": "error", "message": {"text": "FastAPI POST `start_node` without auth dependency \u2014 backend/app/appium_nodes/routers/nodes.py:47"}, "properties": {"repobilityId": "b0c87bd006ce35b3", "scanner": "scanner-primary", "fingerprint": "422639447e30f2c2", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/appium_nodes/routers/nodes.py"}, "region": {"startLine": 47}}}]}, {"ruleId": "scanner-40bca071cf8dfac3", "level": "error", "message": {"text": "FastAPI POST `stop_node` without auth dependency \u2014 backend/app/appium_nodes/routers/nodes.py:73"}, "properties": {"repobilityId": "7e195b72b61ce8b7", "scanner": "scanner-primary", "fingerprint": "40bca071cf8dfac3", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/appium_nodes/routers/nodes.py"}, "region": {"startLine": 73}}}]}, {"ruleId": "scanner-8f9fb5970bc7b9d4", "level": "error", "message": {"text": "FastAPI POST `restart_node` without auth dependency \u2014 backend/app/appium_nodes/routers/nodes.py:86"}, "properties": {"repobilityId": "41b39236b9ec3fd6", "scanner": "scanner-primary", "fingerprint": "8f9fb5970bc7b9d4", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/appium_nodes/routers/nodes.py"}, "region": {"startLine": 86}}}]}, {"ruleId": "scanner-ac3d303b9ef864e0", "level": "error", "message": {"text": "FastAPI POST `create_webhook` without auth dependency \u2014 backend/app/webhooks/router.py:22"}, "properties": {"repobilityId": "8d79f111529aa5fa", "scanner": "scanner-primary", "fingerprint": "ac3d303b9ef864e0", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/webhooks/router.py"}, "region": {"startLine": 22}}}]}, {"ruleId": "scanner-6178bd14a02635ff", "level": "error", "message": {"text": "FastAPI PATCH `update_webhook` without auth dependency \u2014 backend/app/webhooks/router.py:37"}, "properties": {"repobilityId": "2e87b691b924893a", "scanner": "scanner-primary", "fingerprint": "6178bd14a02635ff", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/webhooks/router.py"}, "region": {"startLine": 37}}}]}, {"ruleId": "scanner-fa1718388a661129", "level": "error", "message": {"text": "FastAPI DELETE `delete_webhook` without auth dependency \u2014 backend/app/webhooks/router.py:44"}, "properties": {"repobilityId": "0a700363e82cb046", "scanner": "scanner-primary", "fingerprint": "fa1718388a661129", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/webhooks/router.py"}, "region": {"startLine": 44}}}]}, {"ruleId": "scanner-de59bbbb62b435b7", "level": "error", "message": {"text": "FastAPI POST `test_webhook` without auth dependency \u2014 backend/app/webhooks/router.py:51"}, "properties": {"repobilityId": "4d9047b1f033c5ba", "scanner": "scanner-primary", "fingerprint": "de59bbbb62b435b7", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/webhooks/router.py"}, "region": {"startLine": 51}}}]}, {"ruleId": "scanner-e963ebd3497d4858", "level": "error", "message": {"text": "FastAPI POST `retry_webhook_delivery` without auth dependency \u2014 backend/app/webhooks/router.py:79"}, "properties": {"repobilityId": "69277279c42985c6", "scanner": "scanner-primary", "fingerprint": "e963ebd3497d4858", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/webhooks/router.py"}, "region": {"startLine": 79}}}]}, {"ruleId": "scanner-23d64dcbb9f69edf", "level": "error", "message": {"text": "FastAPI POST `approve_host` without auth dependency \u2014 backend/app/hosts/router.py:205"}, "properties": {"repobilityId": "1b17d751249ccd32", "scanner": "scanner-primary", "fingerprint": "23d64dcbb9f69edf", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/hosts/router.py"}, "region": {"startLine": 205}}}]}, {"ruleId": "scanner-360563450fe65d3e", "level": "error", "message": {"text": "FastAPI POST `reject_host` without auth dependency \u2014 backend/app/hosts/router.py:234"}, "properties": {"repobilityId": "bd409c542cc57f78", "scanner": "scanner-primary", "fingerprint": "360563450fe65d3e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/hosts/router.py"}, "region": {"startLine": 234}}}]}, {"ruleId": "scanner-065d275dbf93fd2d", "level": "error", "message": {"text": "FastAPI POST `create_host` without auth dependency \u2014 backend/app/hosts/router.py:241"}, "properties": {"repobilityId": "998d65ab4a7051ba", "scanner": "scanner-primary", "fingerprint": "065d275dbf93fd2d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/hosts/router.py"}, "region": {"startLine": 241}}}]}, {"ruleId": "scanner-f367370b24c76ef9", "level": "error", "message": {"text": "FastAPI POST `trigger_driver_doctor` without auth dependency \u2014 backend/app/hosts/router.py:350"}, "properties": {"repobilityId": "d6e8972c39e6d49f", "scanner": "scanner-primary", "fingerprint": "f367370b24c76ef9", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/hosts/router.py"}, "region": {"startLine": 350}}}]}, {"ruleId": "scanner-7978de202a3632e3", "level": "error", "message": {"text": "FastAPI DELETE `delete_host` without auth dependency \u2014 backend/app/hosts/router.py:441"}, "properties": {"repobilityId": "4db4197544414039", "scanner": "scanner-primary", "fingerprint": "7978de202a3632e3", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/hosts/router.py"}, "region": {"startLine": 441}}}]}, {"ruleId": "scanner-3e6dcaf9ca7f6145", "level": "error", "message": {"text": "FastAPI POST `discover_devices` without auth dependency \u2014 backend/app/hosts/router.py:451"}, "properties": {"repobilityId": "d2a8e4ccf955ade0", "scanner": "scanner-primary", "fingerprint": "3e6dcaf9ca7f6145", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/hosts/router.py"}, "region": {"startLine": 451}}}]}, {"ruleId": "scanner-bb8a4c471084ce2e", "level": "error", "message": {"text": "FastAPI POST `confirm_discovery` without auth dependency \u2014 backend/app/hosts/router.py:473"}, "properties": {"repobilityId": "e9016dfea8001e54", "scanner": "scanner-primary", "fingerprint": "bb8a4c471084ce2e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/hosts/router.py"}, "region": {"startLine": 473}}}]}, {"ruleId": "scanner-6c71562ec2b0ed60", "level": "error", "message": {"text": "FastAPI PUT `put_host_tool_env` without auth dependency \u2014 backend/app/hosts/router.py:507"}, "properties": {"repobilityId": "eb9101354e352f08", "scanner": "scanner-primary", "fingerprint": "6c71562ec2b0ed60", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/hosts/router.py"}, "region": {"startLine": 507}}}]}, {"ruleId": "scanner-4be130980b52ae43", "level": "error", "message": {"text": "FastAPI POST `ingest_agent_log_batch` without auth dependency \u2014 backend/app/hosts/router_agent_logs.py:18"}, "properties": {"repobilityId": "83aba30f68577976", "scanner": "scanner-primary", "fingerprint": "4be130980b52ae43", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/hosts/router_agent_logs.py"}, "region": {"startLine": 18}}}]}, {"ruleId": "scanner-e41930e049e08e17", "level": "error", "message": {"text": "FastAPI POST `enter_device_maintenance` without auth dependency \u2014 backend/app/devices/routers/control.py:49"}, "properties": {"repobilityId": "70e99f827221a3b9", "scanner": "scanner-primary", "fingerprint": "e41930e049e08e17", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/devices/routers/control.py"}, "region": {"startLine": 49}}}]}, {"ruleId": "scanner-0360dd653cfdc0af", "level": "error", "message": {"text": "FastAPI POST `exit_device_maintenance` without auth dependency \u2014 backend/app/devices/routers/control.py:64"}, "properties": {"repobilityId": "249593943224f910", "scanner": "scanner-primary", "fingerprint": "0360dd653cfdc0af", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/devices/routers/control.py"}, "region": {"startLine": 64}}}]}, {"ruleId": "scanner-63f5c8e0f850dad3", "level": "error", "message": {"text": "FastAPI PATCH `merge_device_config` without auth dependency \u2014 backend/app/devices/routers/control.py:88"}, "properties": {"repobilityId": "85786ecc1f1cbe99", "scanner": "scanner-primary", "fingerprint": "63f5c8e0f850dad3", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/devices/routers/control.py"}, "region": {"startLine": 88}}}]}, {"ruleId": "scanner-0932dd29b77ac90a", "level": "error", "message": {"text": "FastAPI POST `device_session_test` without auth dependency \u2014 backend/app/devices/routers/control.py:203"}, "properties": {"repobilityId": "a7e805200b01ca60", "scanner": "scanner-primary", "fingerprint": "0932dd29b77ac90a", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/devices/routers/control.py"}, "region": {"startLine": 203}}}]}, {"ruleId": "scanner-1d6e17ba30dc9741", "level": "error", "message": {"text": "FastAPI POST `reconnect_device` without auth dependency \u2014 backend/app/devices/routers/control.py:220"}, "properties": {"repobilityId": "1dc90a28fe574728", "scanner": "scanner-primary", "fingerprint": "1d6e17ba30dc9741", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/devices/routers/control.py"}, "region": {"startLine": 220}}}]}, {"ruleId": "scanner-1cfbe14353645730", "level": "error", "message": {"text": "FastAPI POST `device_lifecycle_action` without auth dependency \u2014 backend/app/devices/routers/control.py:305"}, "properties": {"repobilityId": "3201b33b87a63eb7", "scanner": "scanner-primary", "fingerprint": "1cfbe14353645730", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/devices/routers/control.py"}, "region": {"startLine": 305}}}]}, {"ruleId": "scanner-cb37ef69e4d0c46c", "level": "error", "message": {"text": "FastAPI POST `bulk_start_nodes` without auth dependency \u2014 backend/app/devices/routers/bulk.py:20"}, "properties": {"repobilityId": "b7fb26b9adfc0f34", "scanner": "scanner-primary", "fingerprint": "cb37ef69e4d0c46c", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/devices/routers/bulk.py"}, "region": {"startLine": 20}}}]}, {"ruleId": "scanner-9d2ca91b5911fef1", "level": "error", "message": {"text": "FastAPI POST `bulk_stop_nodes` without auth dependency \u2014 backend/app/devices/routers/bulk.py:25"}, "properties": {"repobilityId": "d4b2f304351365c6", "scanner": "scanner-primary", "fingerprint": "9d2ca91b5911fef1", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/devices/routers/bulk.py"}, "region": {"startLine": 25}}}]}, {"ruleId": "scanner-e0f94264fc4bb8d2", "level": "error", "message": {"text": "FastAPI POST `bulk_restart_nodes` without auth dependency \u2014 backend/app/devices/routers/bulk.py:30"}, "properties": {"repobilityId": "dbf1bed4b5c55e5b", "scanner": "scanner-primary", "fingerprint": "e0f94264fc4bb8d2", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/devices/routers/bulk.py"}, "region": {"startLine": 30}}}]}, {"ruleId": "scanner-2f46a852e9d7e7ab", "level": "error", "message": {"text": "FastAPI POST `bulk_update_tags` without auth dependency \u2014 backend/app/devices/routers/bulk.py:35"}, "properties": {"repobilityId": "7838ec725b0ab963", "scanner": "scanner-primary", "fingerprint": "2f46a852e9d7e7ab", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/devices/routers/bulk.py"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-34d9ccdf1a6e271e", "level": "error", "message": {"text": "FastAPI POST `bulk_delete` without auth dependency \u2014 backend/app/devices/routers/bulk.py:40"}, "properties": {"repobilityId": "423da31c721221ec", "scanner": "scanner-primary", "fingerprint": "34d9ccdf1a6e271e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/devices/routers/bulk.py"}, "region": {"startLine": 40}}}]}, {"ruleId": "scanner-ffb62dd3cca11d93", "level": "error", "message": {"text": "FastAPI POST `bulk_enter_maintenance` without auth dependency \u2014 backend/app/devices/routers/bulk.py:45"}, "properties": {"repobilityId": "4efdabc35fc8b92c", "scanner": "scanner-primary", "fingerprint": "ffb62dd3cca11d93", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/devices/routers/bulk.py"}, "region": {"startLine": 45}}}]}, {"ruleId": "scanner-e8f6d14367043db3", "level": "error", "message": {"text": "FastAPI POST `bulk_exit_maintenance` without auth dependency \u2014 backend/app/devices/routers/bulk.py:52"}, "properties": {"repobilityId": "269b51c537d461aa", "scanner": "scanner-primary", "fingerprint": "e8f6d14367043db3", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/devices/routers/bulk.py"}, "region": {"startLine": 52}}}]}, {"ruleId": "scanner-dde775b8ceb0597d", "level": "error", "message": {"text": "FastAPI POST `bulk_reconnect` without auth dependency \u2014 backend/app/devices/routers/bulk.py:57"}, "properties": {"repobilityId": "08aeab4a37fd3463", "scanner": "scanner-primary", "fingerprint": "dde775b8ceb0597d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/devices/routers/bulk.py"}, "region": {"startLine": 57}}}]}, {"ruleId": "scanner-75d963ae0def8887", "level": "error", "message": {"text": "FastAPI PATCH `update_device` without auth dependency \u2014 backend/app/devices/routers/core.py:190"}, "properties": {"repobilityId": "f6f68cbf1efd50cd", "scanner": "scanner-primary", "fingerprint": "75d963ae0def8887", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/devices/routers/core.py"}, "region": {"startLine": 190}}}]}, {"ruleId": "scanner-aef5ff56b1021fec", "level": "error", "message": {"text": "FastAPI DELETE `delete_device` without auth dependency \u2014 backend/app/devices/routers/core.py:204"}, "properties": {"repobilityId": "5112d85472060d51", "scanner": "scanner-primary", "fingerprint": "aef5ff56b1021fec", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/devices/routers/core.py"}, "region": {"startLine": 204}}}]}, {"ruleId": "scanner-820691df995d4298", "level": "error", "message": {"text": "FastAPI POST `create_group` without auth dependency \u2014 backend/app/devices/routers/groups.py:38"}, "properties": {"repobilityId": "73f5113002b1adc0", "scanner": "scanner-primary", "fingerprint": "820691df995d4298", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/devices/routers/groups.py"}, "region": {"startLine": 38}}}]}, {"ruleId": "scanner-065fa61465b9dae5", "level": "error", "message": {"text": "FastAPI PATCH `update_group` without auth dependency \u2014 backend/app/devices/routers/groups.py:60"}, "properties": {"repobilityId": "d33dcf8e75adbb05", "scanner": "scanner-primary", "fingerprint": "065fa61465b9dae5", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/devices/routers/groups.py"}, "region": {"startLine": 60}}}]}, {"ruleId": "scanner-51a7e3850ef9fcce", "level": "error", "message": {"text": "FastAPI DELETE `delete_group` without auth dependency \u2014 backend/app/devices/routers/groups.py:71"}, "properties": {"repobilityId": "686b989b018f88e5", "scanner": "scanner-primary", "fingerprint": "51a7e3850ef9fcce", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/devices/routers/groups.py"}, "region": {"startLine": 71}}}]}, {"ruleId": "scanner-16975d4632cfcc66", "level": "error", "message": {"text": "FastAPI POST `add_members` without auth dependency \u2014 backend/app/devices/routers/groups.py:78"}, "properties": {"repobilityId": "c4b2fdbda98d8176", "scanner": "scanner-primary", "fingerprint": "16975d4632cfcc66", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/devices/routers/groups.py"}, "region": {"startLine": 78}}}]}, {"ruleId": "scanner-6b1e715f7efc5ddd", "level": "error", "message": {"text": "FastAPI DELETE `remove_members` without auth dependency \u2014 backend/app/devices/routers/groups.py:92"}, "properties": {"repobilityId": "d99de132eeb59fdc", "scanner": "scanner-primary", "fingerprint": "6b1e715f7efc5ddd", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/devices/routers/groups.py"}, "region": {"startLine": 92}}}]}, {"ruleId": "scanner-ec76ff68b3c489da", "level": "error", "message": {"text": "FastAPI POST `group_bulk_start` without auth dependency \u2014 backend/app/devices/routers/groups.py:106"}, "properties": {"repobilityId": "e8fa6a2e7132dc5f", "scanner": "scanner-primary", "fingerprint": "ec76ff68b3c489da", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/devices/routers/groups.py"}, "region": {"startLine": 106}}}]}, {"ruleId": "scanner-2ed9bdaefe6791c1", "level": "error", "message": {"text": "FastAPI POST `group_bulk_stop` without auth dependency \u2014 backend/app/devices/routers/groups.py:112"}, "properties": {"repobilityId": "d7e4af7e42fbe114", "scanner": "scanner-primary", "fingerprint": "2ed9bdaefe6791c1", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/devices/routers/groups.py"}, "region": {"startLine": 112}}}]}, {"ruleId": "scanner-2028d5b0e2045f31", "level": "error", "message": {"text": "FastAPI POST `group_bulk_restart` without auth dependency \u2014 backend/app/devices/routers/groups.py:118"}, "properties": {"repobilityId": "92d47f04c547e02b", "scanner": "scanner-primary", "fingerprint": "2028d5b0e2045f31", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/devices/routers/groups.py"}, "region": {"startLine": 118}}}]}, {"ruleId": "scanner-1f018f3bd8932eda", "level": "error", "message": {"text": "FastAPI POST `group_bulk_enter_maintenance` without auth dependency \u2014 backend/app/devices/routers/groups.py:124"}, "properties": {"repobilityId": "b27d68d050f82d1c", "scanner": "scanner-primary", "fingerprint": "1f018f3bd8932eda", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/devices/routers/groups.py"}, "region": {"startLine": 124}}}]}, {"ruleId": "scanner-4893129fd17b6e5e", "level": "error", "message": {"text": "FastAPI POST `group_bulk_exit_maintenance` without auth dependency \u2014 backend/app/devices/routers/groups.py:135"}, "properties": {"repobilityId": "384650333bb20188", "scanner": "scanner-primary", "fingerprint": "4893129fd17b6e5e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/devices/routers/groups.py"}, "region": {"startLine": 135}}}]}, {"ruleId": "scanner-36ddcb9c4a5f36c1", "level": "error", "message": {"text": "FastAPI POST `group_bulk_reconnect` without auth dependency \u2014 backend/app/devices/routers/groups.py:143"}, "properties": {"repobilityId": "d39b5da43124f45f", "scanner": "scanner-primary", "fingerprint": "36ddcb9c4a5f36c1", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/devices/routers/groups.py"}, "region": {"startLine": 143}}}]}, {"ruleId": "scanner-87bf5497b3c4e8c2", "level": "error", "message": {"text": "FastAPI POST `group_bulk_update_tags` without auth dependency \u2014 backend/app/devices/routers/groups.py:153"}, "properties": {"repobilityId": "e6a77f214109caf4", "scanner": "scanner-primary", "fingerprint": "87bf5497b3c4e8c2", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/devices/routers/groups.py"}, "region": {"startLine": 153}}}]}, {"ruleId": "scanner-a0b09b4a609fe1f1", "level": "error", "message": {"text": "FastAPI POST `group_bulk_delete` without auth dependency \u2014 backend/app/devices/routers/groups.py:164"}, "properties": {"repobilityId": "d36224a72706a18e", "scanner": "scanner-primary", "fingerprint": "a0b09b4a609fe1f1", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/devices/routers/groups.py"}, "region": {"startLine": 164}}}]}, {"ruleId": "scanner-a027c4b7a28fcf17", "level": "error", "message": {"text": "FastAPI POST `create_plugin` without auth dependency \u2014 backend/app/plugins/router.py:31"}, "properties": {"repobilityId": "38d9093874172050", "scanner": "scanner-primary", "fingerprint": "a027c4b7a28fcf17", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/plugins/router.py"}, "region": {"startLine": 31}}}]}, {"ruleId": "scanner-659747c7bd1d305f", "level": "error", "message": {"text": "FastAPI PATCH `update_plugin` without auth dependency \u2014 backend/app/plugins/router.py:39"}, "properties": {"repobilityId": "06d75c22428587f8", "scanner": "scanner-primary", "fingerprint": "659747c7bd1d305f", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/plugins/router.py"}, "region": {"startLine": 39}}}]}, {"ruleId": "scanner-4027c07b2d98a672", "level": "error", "message": {"text": "FastAPI DELETE `delete_plugin` without auth dependency \u2014 backend/app/plugins/router.py:49"}, "properties": {"repobilityId": "6466a8a9e4313ad1", "scanner": "scanner-primary", "fingerprint": "4027c07b2d98a672", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/plugins/router.py"}, "region": {"startLine": 49}}}]}, {"ruleId": "scanner-63ab5bb97de1420a", "level": "error", "message": {"text": "FastAPI POST `sync_all_plugins` without auth dependency \u2014 backend/app/plugins/router.py:56"}, "properties": {"repobilityId": "503557c7ce30c595", "scanner": "scanner-primary", "fingerprint": "63ab5bb97de1420a", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/plugins/router.py"}, "region": {"startLine": 56}}}]}, {"ruleId": "scanner-4a732af071989be5", "level": "error", "message": {"text": "FastAPI POST `sync_host_plugins` without auth dependency \u2014 backend/app/plugins/router.py:70"}, "properties": {"repobilityId": "7224d9bd35295353", "scanner": "scanner-primary", "fingerprint": "4a732af071989be5", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/app/plugins/router.py"}, "region": {"startLine": 70}}}]}, {"ruleId": "scanner-8a770fbb3852259c", "level": "note", "message": {"text": "Unused endpoint: GET /host/telemetry"}, "properties": {"repobilityId": "50371d98c61041ab", "scanner": "scanner-primary", "fingerprint": "8a770fbb3852259c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a13a7e97aeacf55f", "level": "note", "message": {"text": "Unused endpoint: POST /start"}, "properties": {"repobilityId": "f0f595a8e31f0d99", "scanner": "scanner-primary", "fingerprint": "a13a7e97aeacf55f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c5ef560d543c0347", "level": "note", "message": {"text": "Unused endpoint: POST /{port}/reconfigure"}, "properties": {"repobilityId": "696549122c00d50e", "scanner": "scanner-primary", "fingerprint": "c5ef560d543c0347", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e69c90752a76eba5", "level": "note", "message": {"text": "Unused endpoint: POST /stop"}, "properties": {"repobilityId": "955a103825fef68b", "scanner": "scanner-primary", "fingerprint": "e69c90752a76eba5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cda2be61c3b5c707", "level": "note", "message": {"text": "Unused endpoint: GET /{port}/status"}, "properties": {"repobilityId": "bd45b91000aaaada", "scanner": "scanner-primary", "fingerprint": "cda2be61c3b5c707", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ea67a2c89b4c9b55", "level": "note", "message": {"text": "Unused endpoint: GET /{port}/logs"}, "properties": {"repobilityId": "08ee685b8b6c671a", "scanner": "scanner-primary", "fingerprint": "ea67a2c89b4c9b55", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e8ebe817d16c5e42", "level": "note", "message": {"text": "Unused endpoint: GET /devices"}, "properties": {"repobilityId": "bdf0e32fc39e82cc", "scanner": "scanner-primary", "fingerprint": "e8ebe817d16c5e42", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f2ed2b40326547fa", "level": "note", "message": {"text": "Unused endpoint: GET /devices/{connection_target}/properties"}, "properties": {"repobilityId": "b7670076f33fe38d", "scanner": "scanner-primary", "fingerprint": "f2ed2b40326547fa", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e181cb1f53bacf69", "level": "note", "message": {"text": "Unused endpoint: GET /devices/{connection_target}/health"}, "properties": {"repobilityId": "d17f4483a430a351", "scanner": "scanner-primary", "fingerprint": "e181cb1f53bacf69", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-64139a5a3506c2a7", "level": "note", "message": {"text": "Unused endpoint: GET /devices/{connection_target}/telemetry"}, "properties": {"repobilityId": "5602097f42a06c90", "scanner": "scanner-primary", "fingerprint": "64139a5a3506c2a7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-223518f79d81a98c", "level": "note", "message": {"text": "Unused endpoint: POST /devices/{connection_target}/lifecycle/{action}"}, "properties": {"repobilityId": "a3ad4f6667e26cb4", "scanner": "scanner-primary", "fingerprint": "223518f79d81a98c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-40bd3f68d649a21f", "level": "note", "message": {"text": "Unused endpoint: POST /features/{feature_id}/actions/{action_id}"}, "properties": {"repobilityId": "84757aeb3d7c185e", "scanner": "scanner-primary", "fingerprint": "40bd3f68d649a21f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-57ffcf5e7b8bb8f8", "level": "note", "message": {"text": "Unused endpoint: POST /devices/normalize"}, "properties": {"repobilityId": "6908355986dfa986", "scanner": "scanner-primary", "fingerprint": "57ffcf5e7b8bb8f8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9a67925c38e2e553", "level": "note", "message": {"text": "Unused endpoint: POST /{pack_id}/doctor"}, "properties": {"repobilityId": "b3a54fef5b104f38", "scanner": "scanner-primary", "fingerprint": "9a67925c38e2e553", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5baa8971ebe192a1", "level": "note", "message": {"text": "Unused endpoint: GET /"}, "properties": {"repobilityId": "ca26781854cb2be1", "scanner": "scanner-primary", "fingerprint": "5baa8971ebe192a1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fa413208496243a5", "level": "note", "message": {"text": "Unused endpoint: POST /sync"}, "properties": {"repobilityId": "a64f9025b9ab0c78", "scanner": "scanner-primary", "fingerprint": "fa413208496243a5", "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-3710d49b08b59946", "level": "note", "message": {"text": "Unused endpoint: GET /api/availability"}, "properties": {"repobilityId": "4fa8e086e11cf859", "scanner": "scanner-primary", "fingerprint": "3710d49b08b59946", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ed183ae894826b40", "level": "note", "message": {"text": "Unused endpoint: PUT /bulk"}, "properties": {"repobilityId": "a173ece089c6a30b", "scanner": "scanner-primary", "fingerprint": "ed183ae894826b40", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-dab404178984fc5d", "level": "note", "message": {"text": "Unused endpoint: POST /reset-all"}, "properties": {"repobilityId": "78dbfcb1708b3517", "scanner": "scanner-primary", "fingerprint": "dab404178984fc5d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8f9421ca9c1482a4", "level": "note", "message": {"text": "Unused endpoint: GET /{key:path}"}, "properties": {"repobilityId": "5be73d67158e50d5", "scanner": "scanner-primary", "fingerprint": "8f9421ca9c1482a4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3e3b73028e9e1f84", "level": "note", "message": {"text": "Unused endpoint: PUT /{key:path}"}, "properties": {"repobilityId": "e039fa7160b9471c", "scanner": "scanner-primary", "fingerprint": "3e3b73028e9e1f84", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cdfdfac7a5828b11", "level": "note", "message": {"text": "Unused endpoint: POST /reset/{key:path}"}, "properties": {"repobilityId": "b2913d689d85fba6", "scanner": "scanner-primary", "fingerprint": "cdfdfac7a5828b11", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1daa53f3c56e6b16", "level": "note", "message": {"text": "Unused endpoint: GET /session"}, "properties": {"repobilityId": "d1592d1940583bf5", "scanner": "scanner-primary", "fingerprint": "1daa53f3c56e6b16", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-618721b912bad1c2", "level": "note", "message": {"text": "Unused endpoint: POST /login"}, "properties": {"repobilityId": "20e94e218bd82f32", "scanner": "scanner-primary", "fingerprint": "618721b912bad1c2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-99fc36db98c134ce", "level": "note", "message": {"text": "Unused endpoint: POST /logout"}, "properties": {"repobilityId": "10811ba64fb08ebf", "scanner": "scanner-primary", "fingerprint": "99fc36db98c134ce", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2b73face5b06aa67", "level": "note", "message": {"text": "Unused endpoint: POST /jobs"}, "properties": {"repobilityId": "58a4af4f0b436c13", "scanner": "scanner-primary", "fingerprint": "2b73face5b06aa67", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a9f0261152044acf", "level": "note", "message": {"text": "Unused endpoint: POST /devices/{device_id}/jobs"}, "properties": {"repobilityId": "7a9db1b6a858b97e", "scanner": "scanner-primary", "fingerprint": "a9f0261152044acf", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ee53a8b03729481e", "level": "note", "message": {"text": "Unused endpoint: GET /jobs/{job_id}"}, "properties": {"repobilityId": "9ba091eafdff583b", "scanner": "scanner-primary", "fingerprint": "ee53a8b03729481e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-81986784ebc79f89", "level": "note", "message": {"text": "Unused endpoint: GET /jobs/{job_id}/events"}, "properties": {"repobilityId": "de4ff7a6fce40e2d", "scanner": "scanner-primary", "fingerprint": "81986784ebc79f89", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3305a9a09a622afc", "level": "note", "message": {"text": "Unused endpoint: GET /sessions/summary"}, "properties": {"repobilityId": "48e91b2ea00c4131", "scanner": "scanner-primary", "fingerprint": "3305a9a09a622afc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4b9d2dcf3bb9290a", "level": "note", "message": {"text": "Unused endpoint: GET /devices/utilization"}, "properties": {"repobilityId": "279e029b248e59ea", "scanner": "scanner-primary", "fingerprint": "4b9d2dcf3bb9290a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-aa57a0346d234bb5", "level": "note", "message": {"text": "Unused endpoint: GET /devices/reliability"}, "properties": {"repobilityId": "4d2e45059ff64522", "scanner": "scanner-primary", "fingerprint": "aa57a0346d234bb5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a94011a996874a7c", "level": "note", "message": {"text": "Unused endpoint: GET /fleet/overview"}, "properties": {"repobilityId": "0558636c240e0c53", "scanner": "scanner-primary", "fingerprint": "a94011a996874a7c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-28904fab2cc55fd7", "level": "note", "message": {"text": "Unused endpoint: GET /fleet/capacity-timeline"}, "properties": {"repobilityId": "6e9a80f88c0cbfa2", "scanner": "scanner-primary", "fingerprint": "28904fab2cc55fd7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-02366b5530ccc8cf", "level": "note", "message": {"text": "Unused endpoint: GET /events/catalog"}, "properties": {"repobilityId": "6582be50b5fa53c3", "scanner": "scanner-primary", "fingerprint": "02366b5530ccc8cf", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-43269e4e79c2e69e", "level": "note", "message": {"text": "Unused endpoint: GET /events"}, "properties": {"repobilityId": "977503bcf712d5a4", "scanner": "scanner-primary", "fingerprint": "43269e4e79c2e69e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3af64e805d88ef35", "level": "note", "message": {"text": "Unused endpoint: GET /notifications"}, "properties": {"repobilityId": "033a7d2be778fcfc", "scanner": "scanner-primary", "fingerprint": "3af64e805d88ef35", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e5ddcd21d5dd8c8b", "level": "note", "message": {"text": "Unused endpoint: GET /desired"}, "properties": {"repobilityId": "868c8a0b410c73a6", "scanner": "scanner-primary", "fingerprint": "e5ddcd21d5dd8c8b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-837dd4aa29c78726", "level": "note", "message": {"text": "Unused endpoint: POST /{host_id}/driver-packs/{pack_id:path}/features/{feature_id}/actions/{action_id}"}, "properties": {"repobilityId": "70fafdf7151abea5", "scanner": "scanner-primary", "fingerprint": "837dd4aa29c78726", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-34a0d470c601d97f", "level": "note", "message": {"text": "Unused endpoint: GET /catalog"}, "properties": {"repobilityId": "4e25b7b8d82a693c", "scanner": "scanner-primary", "fingerprint": "34a0d470c601d97f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1b4c290cc2e1ac1e", "level": "note", "message": {"text": "Unused endpoint: GET /{pack_id}"}, "properties": {"repobilityId": "00452e546231ddac", "scanner": "scanner-primary", "fingerprint": "1b4c290cc2e1ac1e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-19ef3f5e195134f4", "level": "note", "message": {"text": "Unused endpoint: GET /{pack_id}/hosts"}, "properties": {"repobilityId": "e1d4a9ab85100824", "scanner": "scanner-primary", "fingerprint": "19ef3f5e195134f4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b190839ef6c6fa4d", "level": "note", "message": {"text": "Unused endpoint: PATCH /{pack_id}"}, "properties": {"repobilityId": "64df1879f86dbf23", "scanner": "scanner-primary", "fingerprint": "b190839ef6c6fa4d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9b3bba269d9ad92c", "level": "note", "message": {"text": "Unused endpoint: PATCH /{pack_id}/policy"}, "properties": {"repobilityId": "58bc76b18181733a", "scanner": "scanner-primary", "fingerprint": "9b3bba269d9ad92c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ed6c303f83dab8af", "level": "note", "message": {"text": "Unused endpoint: DELETE /{pack_id}"}, "properties": {"repobilityId": "587d9aea3456c04c", "scanner": "scanner-primary", "fingerprint": "ed6c303f83dab8af", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f440e5eb48cf128b", "level": "note", "message": {"text": "Unused endpoint: POST /uploads"}, "properties": {"repobilityId": "f1b8e16c3083d53d", "scanner": "scanner-primary", "fingerprint": "f440e5eb48cf128b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-24662740b2451ede", "level": "note", "message": {"text": "Unused endpoint: GET /{pack_id}/releases/{release}/tarball"}, "properties": {"repobilityId": "57c90dd81817496d", "scanner": "scanner-primary", "fingerprint": "24662740b2451ede", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b587e2568ff27abc", "level": "note", "message": {"text": "Unused endpoint: GET /{pack_id}/releases"}, "properties": {"repobilityId": "164d9a0187227afa", "scanner": "scanner-primary", "fingerprint": "b587e2568ff27abc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-396a87ecef94428c", "level": "note", "message": {"text": "Unused endpoint: PATCH /{pack_id}/releases/current"}, "properties": {"repobilityId": "4b78a2bd08c45e6b", "scanner": "scanner-primary", "fingerprint": "396a87ecef94428c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}