{"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-bbaabfad530c3a3f", "name": "Possibly dead Python function: run_vg_pipeline", "shortDescription": {"text": "Possibly dead Python function: run_vg_pipeline"}, "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-a8f4180ac841db8b", "name": "Possibly dead Python function: select_top_k_grasps", "shortDescription": {"text": "Possibly dead Python function: select_top_k_grasps"}, "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-896ca90ac283bf02", "name": "Possibly dead Python function: filter_grasps", "shortDescription": {"text": "Possibly dead Python function: filter_grasps"}, "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-de35936088606497", "name": "Possibly dead Python function: select_best", "shortDescription": {"text": "Possibly dead Python function: select_best"}, "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-1f848d6f7495c558", "name": "Possibly dead Python function: save_grasp_viz_best", "shortDescription": {"text": "Possibly dead Python function: save_grasp_viz_best"}, "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-7c9260ed2b835800", "name": "Possibly dead Python function: build_grounding_messages", "shortDescription": {"text": "Possibly dead Python function: build_grounding_messages"}, "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-8998ba1dcd28bd0d", "name": "Possibly dead Python function: backproject_roi_points", "shortDescription": {"text": "Possibly dead Python function: backproject_roi_points"}, "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-0e83933ea90e3ae2", "name": "Possibly dead Python function: project_points_to_rgb_overlay_png", "shortDescription": {"text": "Possibly dead Python function: project_points_to_rgb_overlay_png"}, "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-c308236612b4077c", "name": "Possibly dead Python function: parse_align_result", "shortDescription": {"text": "Possibly dead Python function: parse_align_result"}, "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-e37134970f1f4268", "name": "Possibly dead Python function: resolve_rgbd_pair", "shortDescription": {"text": "Possibly dead Python function: resolve_rgbd_pair"}, "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-f38af4bab76a26c2", "name": "Possibly dead Python function: mime_type_for_image_path", "shortDescription": {"text": "Possibly dead Python function: mime_type_for_image_path"}, "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-bd7c0502c9b4c4ec", "name": "Possibly dead Python function: parse_box_coords", "shortDescription": {"text": "Possibly dead Python function: parse_box_coords"}, "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-66c52b162c83a2ba", "name": "Possibly dead Python function: crop_depth_rgb", "shortDescription": {"text": "Possibly dead Python function: crop_depth_rgb"}, "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-fc86273c162bb1e0", "name": "Possibly dead Python function: save_cropped_rgb_png", "shortDescription": {"text": "Possibly dead Python function: save_cropped_rgb_png"}, "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-9710c8d059e53154", "name": "No frontend routes/components detected", "shortDescription": {"text": "No frontend routes/components detected"}, "fullDescription": {"text": "No React/Vue/Next routes were found. This is fine for backend-only repos."}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6372cebde0220094", "name": "No auth library detected", "shortDescription": {"text": "No auth library detected"}, "fullDescription": {"text": "The scanner did not find any standard auth library (JWT, OAuth, NextAuth, Auth0, etc.). The repo has auth/admin/session surface indicators, so auth may live in custom code, in a separate service, or be missing."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4601e3ad3bb28677", "name": "No CI/CD pipelines detected", "shortDescription": {"text": "No CI/CD pipelines detected"}, "fullDescription": {"text": "No GitHub Actions, GitLab CI, or CircleCI configs found. Without CI you can't gate deploys on tests/lints."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "1 test file(s) for 28 source file(s) (ratio 0.04). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 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-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, ci, tests. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-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-d4c911d1415bb86e", "name": "Legacy-named symbol `vla_dual_sam2_v1` in vg_roi_pipeline.py:86", "shortDescription": {"text": "Legacy-named symbol `vla_dual_sam2_v1` in vg_roi_pipeline.py:86"}, "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-dd8fbe4dc62b8e71", "name": "Commented-code block (5 lines) in grasp_server/grasp_filter.py:260", "shortDescription": {"text": "Commented-code block (5 lines) in grasp_server/grasp_filter.py:260"}, "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-4e56bd96023a29c6", "name": "Legacy-named symbol `vla_dual_sam2_v1` in vg_pipeline/pipeline.py:28", "shortDescription": {"text": "Legacy-named symbol `vla_dual_sam2_v1` in vg_pipeline/pipeline.py:28"}, "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-f7960be2c8970e6d", "name": "Commented-code block (5 lines) in vg_pipeline/pipeline.py:344", "shortDescription": {"text": "Commented-code block (5 lines) in vg_pipeline/pipeline.py:344"}, "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-be46ea126aa5d8dc", "name": "Near-duplicate function bodies in 3 places", "shortDescription": {"text": "Near-duplicate function bodies in 3 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nscripts/mock_upload_capture.py:upload_capture, scripts/mock_upload_capture.py:do_upload, scripts/mock_upload_capture.py:run_daemon\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-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:\ngrasp_server/app.py:grasp_viz_image, grasp_server/app.py:grasp\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-47e2a859e6fddaee", "name": "FastAPI POST `upload_capture` without auth dependency \u2014 grasp_server/app.py:135", "shortDescription": {"text": "FastAPI POST `upload_capture` without auth dependency \u2014 grasp_server/app.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-468f1b22a85a824a", "name": "FastAPI POST `run_grasp` without auth dependency \u2014 grasp_server/app.py:214", "shortDescription": {"text": "FastAPI POST `run_grasp` without auth dependency \u2014 grasp_server/app.py:214"}, "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-f8d2b287a2884dc2", "name": "FastAPI POST `run_align` without auth dependency \u2014 grasp_server/app.py:371", "shortDescription": {"text": "FastAPI POST `run_align` without auth dependency \u2014 grasp_server/app.py:371"}, "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-36b12909fbaa2755", "name": "FastAPI POST `grasp` without auth dependency \u2014 grasp_server/app.py:442", "shortDescription": {"text": "FastAPI POST `grasp` without auth dependency \u2014 grasp_server/app.py:442"}, "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-d1586f2807e0511f", "name": "FastAPI POST `request_capture` without auth dependency \u2014 grasp_server/app.py:573", "shortDescription": {"text": "FastAPI POST `request_capture` without auth dependency \u2014 grasp_server/app.py:573"}, "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-e7fde82baff62128", "name": "FastAPI POST `push_frame` without auth dependency \u2014 grasp_server/app.py:591", "shortDescription": {"text": "FastAPI POST `push_frame` without auth dependency \u2014 grasp_server/app.py:591"}, "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-64166beaa758697e", "name": "FastAPI POST `trigger_ik_check` without auth dependency \u2014 grasp_server/app.py:618", "shortDescription": {"text": "FastAPI POST `trigger_ik_check` without auth dependency \u2014 grasp_server/app.py:618"}, "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-a90e054592c35686", "name": "FastAPI POST `submit_ik_result` without auth dependency \u2014 grasp_server/app.py:679", "shortDescription": {"text": "FastAPI POST `submit_ik_result` without auth dependency \u2014 grasp_server/app.py:679"}, "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-2d7783d489960336", "name": "FastAPI POST `select_and_execute` without auth dependency \u2014 grasp_server/app.py:719", "shortDescription": {"text": "FastAPI POST `select_and_execute` without auth dependency \u2014 grasp_server/app.py:719"}, "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-5baa8971ebe192a1", "name": "Unused endpoint: GET /", "shortDescription": {"text": "Unused endpoint: GET /"}, "fullDescription": {"text": "`grasp_server/app.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-e4e3dbe430f50afb", "name": "Unused endpoint: POST /upload_capture", "shortDescription": {"text": "Unused endpoint: POST /upload_capture"}, "fullDescription": {"text": "`grasp_server/app.py` declares `POST /upload_capture` 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-0013df3230956a89", "name": "Unused endpoint: GET /latest_image", "shortDescription": {"text": "Unused endpoint: GET /latest_image"}, "fullDescription": {"text": "`grasp_server/app.py` declares `GET /latest_image` 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-2ef5bc509d738911", "name": "Unused endpoint: GET /grasp_viz_image", "shortDescription": {"text": "Unused endpoint: GET /grasp_viz_image"}, "fullDescription": {"text": "`grasp_server/app.py` declares `GET /grasp_viz_image` 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-c0eaba244704d8fa", "name": "Unused endpoint: GET /grasp_viz_best_image", "shortDescription": {"text": "Unused endpoint: GET /grasp_viz_best_image"}, "fullDescription": {"text": "`grasp_server/app.py` declares `GET /grasp_viz_best_image` 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-e00c1952d4464247", "name": "Unused endpoint: GET /grasp_viz_3d", "shortDescription": {"text": "Unused endpoint: GET /grasp_viz_3d"}, "fullDescription": {"text": "`grasp_server/app.py` declares `GET /grasp_viz_3d` 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-52d0fbaad8c9ca17", "name": "Unused endpoint: POST /run_grasp", "shortDescription": {"text": "Unused endpoint: POST /run_grasp"}, "fullDescription": {"text": "`grasp_server/app.py` declares `POST /run_grasp` 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-03e990b66b43f588", "name": "Unused endpoint: POST /run_align", "shortDescription": {"text": "Unused endpoint: POST /run_align"}, "fullDescription": {"text": "`grasp_server/app.py` declares `POST /run_align` 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-303378e70a07332f", "name": "Unused endpoint: POST /grasp", "shortDescription": {"text": "Unused endpoint: POST /grasp"}, "fullDescription": {"text": "`grasp_server/app.py` declares `POST /grasp` 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-b876393f9e934a0e", "name": "Unused endpoint: POST /request_capture", "shortDescription": {"text": "Unused endpoint: POST /request_capture"}, "fullDescription": {"text": "`grasp_server/app.py` declares `POST /request_capture` 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-a54898975c8e065f", "name": "Unused endpoint: GET /poll_capture_request", "shortDescription": {"text": "Unused endpoint: GET /poll_capture_request"}, "fullDescription": {"text": "`grasp_server/app.py` declares `GET /poll_capture_request` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-98e0dee283b2d228", "name": "Unused endpoint: POST /push_frame", "shortDescription": {"text": "Unused endpoint: POST /push_frame"}, "fullDescription": {"text": "`grasp_server/app.py` declares `POST /push_frame` 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-35c24fe62a4b09b5", "name": "Unused endpoint: GET /latest_frame", "shortDescription": {"text": "Unused endpoint: GET /latest_frame"}, "fullDescription": {"text": "`grasp_server/app.py` declares `GET /latest_frame` 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-1dc0619a4e43e39c", "name": "Unused endpoint: GET /capture_status", "shortDescription": {"text": "Unused endpoint: GET /capture_status"}, "fullDescription": {"text": "`grasp_server/app.py` declares `GET /capture_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-45e247cd604727dc", "name": "Unused endpoint: POST /trigger_ik_check", "shortDescription": {"text": "Unused endpoint: POST /trigger_ik_check"}, "fullDescription": {"text": "`grasp_server/app.py` declares `POST /trigger_ik_check` 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-a2112cbec0c53baa", "name": "Unused endpoint: POST /submit_ik_result", "shortDescription": {"text": "Unused endpoint: POST /submit_ik_result"}, "fullDescription": {"text": "`grasp_server/app.py` declares `POST /submit_ik_result` 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-bee4c88f4be12764", "name": "Unused endpoint: GET /ik_result_status", "shortDescription": {"text": "Unused endpoint: GET /ik_result_status"}, "fullDescription": {"text": "`grasp_server/app.py` declares `GET /ik_result_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-1046513cec71483a", "name": "Unused endpoint: POST /select_and_execute", "shortDescription": {"text": "Unused endpoint: POST /select_and_execute"}, "fullDescription": {"text": "`grasp_server/app.py` declares `POST /select_and_execute` 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-c6515c66a9533878", "name": "Unused endpoint: GET /poll_publish", "shortDescription": {"text": "Unused endpoint: GET /poll_publish"}, "fullDescription": {"text": "`grasp_server/app.py` declares `GET /poll_publish` 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/23586"}, "properties": {"repository": "ZenWang00/vla-grasp-server", "repoUrl": "https://github.com/ZenWang00/vla-grasp-server", "branch": "main"}, "results": [{"ruleId": "scanner-bbaabfad530c3a3f", "level": "note", "message": {"text": "Possibly dead Python function: run_vg_pipeline"}, "properties": {"repobilityId": "f8f070c1bf213745", "scanner": "scanner-primary", "fingerprint": "bbaabfad530c3a3f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "grasp_server/pipeline_runner.py:41"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a8f4180ac841db8b", "level": "note", "message": {"text": "Possibly dead Python function: select_top_k_grasps"}, "properties": {"repobilityId": "d4c5b45e0f195f6c", "scanner": "scanner-primary", "fingerprint": "a8f4180ac841db8b", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "grasp_server/grasp_selection.py:114"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-896ca90ac283bf02", "level": "note", "message": {"text": "Possibly dead Python function: filter_grasps"}, "properties": {"repobilityId": "c2446d35087da307", "scanner": "scanner-primary", "fingerprint": "896ca90ac283bf02", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "grasp_server/grasp_filter.py:362"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-de35936088606497", "level": "note", "message": {"text": "Possibly dead Python function: select_best"}, "properties": {"repobilityId": "031ffa2dde0c68b0", "scanner": "scanner-primary", "fingerprint": "de35936088606497", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "grasp_server/grasp_scorer.py:170"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1f848d6f7495c558", "level": "note", "message": {"text": "Possibly dead Python function: save_grasp_viz_best"}, "properties": {"repobilityId": "a181bbbedd0f1c77", "scanner": "scanner-primary", "fingerprint": "1f848d6f7495c558", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "grasp_server/grasp_viz.py:387"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7c9260ed2b835800", "level": "note", "message": {"text": "Possibly dead Python function: build_grounding_messages"}, "properties": {"repobilityId": "faddb2bf0a7533d7", "scanner": "scanner-primary", "fingerprint": "7c9260ed2b835800", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "vg_pipeline/prompting.py:129"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8998ba1dcd28bd0d", "level": "note", "message": {"text": "Possibly dead Python function: backproject_roi_points"}, "properties": {"repobilityId": "73ce7c5cc758317f", "scanner": "scanner-primary", "fingerprint": "8998ba1dcd28bd0d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "vg_pipeline/geometry.py:55"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0e83933ea90e3ae2", "level": "note", "message": {"text": "Possibly dead Python function: project_points_to_rgb_overlay_png"}, "properties": {"repobilityId": "35729792d2dc8114", "scanner": "scanner-primary", "fingerprint": "0e83933ea90e3ae2", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "vg_pipeline/geometry.py:131"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c308236612b4077c", "level": "note", "message": {"text": "Possibly dead Python function: parse_align_result"}, "properties": {"repobilityId": "d04dc8b447143553", "scanner": "scanner-primary", "fingerprint": "c308236612b4077c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "vg_pipeline/align.py:27"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e37134970f1f4268", "level": "note", "message": {"text": "Possibly dead Python function: resolve_rgbd_pair"}, "properties": {"repobilityId": "a6c7589db005c9a9", "scanner": "scanner-primary", "fingerprint": "e37134970f1f4268", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "vg_pipeline/io.py:47"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f38af4bab76a26c2", "level": "note", "message": {"text": "Possibly dead Python function: mime_type_for_image_path"}, "properties": {"repobilityId": "3a7848e3faaff038", "scanner": "scanner-primary", "fingerprint": "f38af4bab76a26c2", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "vg_pipeline/io.py:105"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-bd7c0502c9b4c4ec", "level": "note", "message": {"text": "Possibly dead Python function: parse_box_coords"}, "properties": {"repobilityId": "ce4f7a09bb8897b1", "scanner": "scanner-primary", "fingerprint": "bd7c0502c9b4c4ec", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "vg_pipeline/roi.py:139"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-66c52b162c83a2ba", "level": "note", "message": {"text": "Possibly dead Python function: crop_depth_rgb"}, "properties": {"repobilityId": "c08a54fd3d04d085", "scanner": "scanner-primary", "fingerprint": "66c52b162c83a2ba", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "vg_pipeline/roi.py:144"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-fc86273c162bb1e0", "level": "note", "message": {"text": "Possibly dead Python function: save_cropped_rgb_png"}, "properties": {"repobilityId": "c6caeeee7b0682b9", "scanner": "scanner-primary", "fingerprint": "fc86273c162bb1e0", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "vg_pipeline/roi.py:192"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9710c8d059e53154", "level": "none", "message": {"text": "No frontend routes/components detected"}, "properties": {"repobilityId": "44ca61485762e494", "scanner": "scanner-primary", "fingerprint": "9710c8d059e53154", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-6372cebde0220094", "level": "warning", "message": {"text": "No auth library detected"}, "properties": {"repobilityId": "a5b6035a5bbf8054", "scanner": "scanner-primary", "fingerprint": "6372cebde0220094", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["coverage", "auth"]}}, {"ruleId": "scanner-4601e3ad3bb28677", "level": "warning", "message": {"text": "No CI/CD pipelines detected"}, "properties": {"repobilityId": "c3ee439bce2bc51e", "scanner": "scanner-primary", "fingerprint": "4601e3ad3bb28677", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-6893a6c8b0861585", "level": "warning", "message": {"text": "Very low test-to-source ratio"}, "properties": {"repobilityId": "54a7de3f06314bf0", "scanner": "scanner-primary", "fingerprint": "6893a6c8b0861585", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "coverage"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "4bda2bfcf1b7261a", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "add1661a2b985683", "scanner": "scanner-primary", "fingerprint": "3ab5d313dda8e5f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["debug", "cleanup", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "8343e5899a2dd0f3", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "warning", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "cd3693ea99abeb4c", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "c72c7bf262b05fa7", "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": "b7535fcda8e2e3eb", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-d4c911d1415bb86e", "level": "note", "message": {"text": "Legacy-named symbol `vla_dual_sam2_v1` in vg_roi_pipeline.py:86"}, "properties": {"repobilityId": "e7d85d940e592ea5", "scanner": "scanner-primary", "fingerprint": "d4c911d1415bb86e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-dd8fbe4dc62b8e71", "level": "none", "message": {"text": "Commented-code block (5 lines) in grasp_server/grasp_filter.py:260"}, "properties": {"repobilityId": "0594bdb9febb2812", "scanner": "scanner-primary", "fingerprint": "dd8fbe4dc62b8e71", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4e56bd96023a29c6", "level": "note", "message": {"text": "Legacy-named symbol `vla_dual_sam2_v1` in vg_pipeline/pipeline.py:28"}, "properties": {"repobilityId": "04459fa7e1488eea", "scanner": "scanner-primary", "fingerprint": "4e56bd96023a29c6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-f7960be2c8970e6d", "level": "none", "message": {"text": "Commented-code block (5 lines) in vg_pipeline/pipeline.py:344"}, "properties": {"repobilityId": "44eff3e99a7c7445", "scanner": "scanner-primary", "fingerprint": "f7960be2c8970e6d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "ccd53908e53ecbe3", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "bb1cced68d2731f2", "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": "5974bac44e855240", "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": "7907eca7c2386d8a", "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": "6373f7c1f290b820", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-47e2a859e6fddaee", "level": "error", "message": {"text": "FastAPI POST `upload_capture` without auth dependency \u2014 grasp_server/app.py:135"}, "properties": {"repobilityId": "c527a132a02ddff2", "scanner": "scanner-primary", "fingerprint": "47e2a859e6fddaee", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "grasp_server/app.py"}, "region": {"startLine": 135}}}]}, {"ruleId": "scanner-468f1b22a85a824a", "level": "error", "message": {"text": "FastAPI POST `run_grasp` without auth dependency \u2014 grasp_server/app.py:214"}, "properties": {"repobilityId": "73c1430ceaaaae17", "scanner": "scanner-primary", "fingerprint": "468f1b22a85a824a", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "grasp_server/app.py"}, "region": {"startLine": 214}}}]}, {"ruleId": "scanner-f8d2b287a2884dc2", "level": "error", "message": {"text": "FastAPI POST `run_align` without auth dependency \u2014 grasp_server/app.py:371"}, "properties": {"repobilityId": "19cea72a607cbf6b", "scanner": "scanner-primary", "fingerprint": "f8d2b287a2884dc2", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "grasp_server/app.py"}, "region": {"startLine": 371}}}]}, {"ruleId": "scanner-36b12909fbaa2755", "level": "error", "message": {"text": "FastAPI POST `grasp` without auth dependency \u2014 grasp_server/app.py:442"}, "properties": {"repobilityId": "25bda78a050cb016", "scanner": "scanner-primary", "fingerprint": "36b12909fbaa2755", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "grasp_server/app.py"}, "region": {"startLine": 442}}}]}, {"ruleId": "scanner-d1586f2807e0511f", "level": "error", "message": {"text": "FastAPI POST `request_capture` without auth dependency \u2014 grasp_server/app.py:573"}, "properties": {"repobilityId": "d4ed2ef9ccf976b4", "scanner": "scanner-primary", "fingerprint": "d1586f2807e0511f", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "grasp_server/app.py"}, "region": {"startLine": 573}}}]}, {"ruleId": "scanner-e7fde82baff62128", "level": "error", "message": {"text": "FastAPI POST `push_frame` without auth dependency \u2014 grasp_server/app.py:591"}, "properties": {"repobilityId": "5d5dc30c53407cc9", "scanner": "scanner-primary", "fingerprint": "e7fde82baff62128", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "grasp_server/app.py"}, "region": {"startLine": 591}}}]}, {"ruleId": "scanner-64166beaa758697e", "level": "error", "message": {"text": "FastAPI POST `trigger_ik_check` without auth dependency \u2014 grasp_server/app.py:618"}, "properties": {"repobilityId": "2acff3ffe5b28769", "scanner": "scanner-primary", "fingerprint": "64166beaa758697e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "grasp_server/app.py"}, "region": {"startLine": 618}}}]}, {"ruleId": "scanner-a90e054592c35686", "level": "error", "message": {"text": "FastAPI POST `submit_ik_result` without auth dependency \u2014 grasp_server/app.py:679"}, "properties": {"repobilityId": "02277eca4aa2ac6f", "scanner": "scanner-primary", "fingerprint": "a90e054592c35686", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "grasp_server/app.py"}, "region": {"startLine": 679}}}]}, {"ruleId": "scanner-2d7783d489960336", "level": "error", "message": {"text": "FastAPI POST `select_and_execute` without auth dependency \u2014 grasp_server/app.py:719"}, "properties": {"repobilityId": "e524b3db28a1d5dc", "scanner": "scanner-primary", "fingerprint": "2d7783d489960336", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "grasp_server/app.py"}, "region": {"startLine": 719}}}]}, {"ruleId": "scanner-5baa8971ebe192a1", "level": "note", "message": {"text": "Unused endpoint: GET /"}, "properties": {"repobilityId": "2bb07f56ef15edc3", "scanner": "scanner-primary", "fingerprint": "5baa8971ebe192a1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e4e3dbe430f50afb", "level": "note", "message": {"text": "Unused endpoint: POST /upload_capture"}, "properties": {"repobilityId": "628f0b925c63ac04", "scanner": "scanner-primary", "fingerprint": "e4e3dbe430f50afb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0013df3230956a89", "level": "note", "message": {"text": "Unused endpoint: GET /latest_image"}, "properties": {"repobilityId": "12c8a516fa7ceec1", "scanner": "scanner-primary", "fingerprint": "0013df3230956a89", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2ef5bc509d738911", "level": "note", "message": {"text": "Unused endpoint: GET /grasp_viz_image"}, "properties": {"repobilityId": "17b203b8337e4eb8", "scanner": "scanner-primary", "fingerprint": "2ef5bc509d738911", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c0eaba244704d8fa", "level": "note", "message": {"text": "Unused endpoint: GET /grasp_viz_best_image"}, "properties": {"repobilityId": "75a74b89a17b7eb1", "scanner": "scanner-primary", "fingerprint": "c0eaba244704d8fa", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e00c1952d4464247", "level": "note", "message": {"text": "Unused endpoint: GET /grasp_viz_3d"}, "properties": {"repobilityId": "42d58e0e0359f0d7", "scanner": "scanner-primary", "fingerprint": "e00c1952d4464247", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-52d0fbaad8c9ca17", "level": "note", "message": {"text": "Unused endpoint: POST /run_grasp"}, "properties": {"repobilityId": "36be284d0b668fa1", "scanner": "scanner-primary", "fingerprint": "52d0fbaad8c9ca17", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-03e990b66b43f588", "level": "note", "message": {"text": "Unused endpoint: POST /run_align"}, "properties": {"repobilityId": "67c795cb7a3cf4a2", "scanner": "scanner-primary", "fingerprint": "03e990b66b43f588", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-303378e70a07332f", "level": "note", "message": {"text": "Unused endpoint: POST /grasp"}, "properties": {"repobilityId": "afe412a576afa952", "scanner": "scanner-primary", "fingerprint": "303378e70a07332f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b876393f9e934a0e", "level": "note", "message": {"text": "Unused endpoint: POST /request_capture"}, "properties": {"repobilityId": "a6669ddbb25e3fb0", "scanner": "scanner-primary", "fingerprint": "b876393f9e934a0e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a54898975c8e065f", "level": "note", "message": {"text": "Unused endpoint: GET /poll_capture_request"}, "properties": {"repobilityId": "7e7e1a7388c6d081", "scanner": "scanner-primary", "fingerprint": "a54898975c8e065f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-98e0dee283b2d228", "level": "note", "message": {"text": "Unused endpoint: POST /push_frame"}, "properties": {"repobilityId": "d031786180244ae1", "scanner": "scanner-primary", "fingerprint": "98e0dee283b2d228", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-35c24fe62a4b09b5", "level": "note", "message": {"text": "Unused endpoint: GET /latest_frame"}, "properties": {"repobilityId": "f23a2706fc987a77", "scanner": "scanner-primary", "fingerprint": "35c24fe62a4b09b5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1dc0619a4e43e39c", "level": "note", "message": {"text": "Unused endpoint: GET /capture_status"}, "properties": {"repobilityId": "fce1f37bc0dc4391", "scanner": "scanner-primary", "fingerprint": "1dc0619a4e43e39c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-45e247cd604727dc", "level": "note", "message": {"text": "Unused endpoint: POST /trigger_ik_check"}, "properties": {"repobilityId": "5eaa01f730ce8a68", "scanner": "scanner-primary", "fingerprint": "45e247cd604727dc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a2112cbec0c53baa", "level": "note", "message": {"text": "Unused endpoint: POST /submit_ik_result"}, "properties": {"repobilityId": "e31d73ad2ab303e2", "scanner": "scanner-primary", "fingerprint": "a2112cbec0c53baa", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-bee4c88f4be12764", "level": "note", "message": {"text": "Unused endpoint: GET /ik_result_status"}, "properties": {"repobilityId": "02039c35611fecc9", "scanner": "scanner-primary", "fingerprint": "bee4c88f4be12764", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1046513cec71483a", "level": "note", "message": {"text": "Unused endpoint: POST /select_and_execute"}, "properties": {"repobilityId": "682516deb8ec2fe0", "scanner": "scanner-primary", "fingerprint": "1046513cec71483a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c6515c66a9533878", "level": "note", "message": {"text": "Unused endpoint: GET /poll_publish"}, "properties": {"repobilityId": "9f05c05d425d4cdb", "scanner": "scanner-primary", "fingerprint": "c6515c66a9533878", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}