{"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-ecc1de0616556217", "name": "Possibly dead Python function: render_upload_section", "shortDescription": {"text": "Possibly dead Python function: render_upload_section"}, "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-d2b4fa021b846bed", "name": "Possibly dead Python function: upload_document", "shortDescription": {"text": "Possibly dead Python function: upload_document"}, "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-5df6826cd1ca381b", "name": "Possibly dead Python function: poll_document_status", "shortDescription": {"text": "Possibly dead Python function: poll_document_status"}, "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-6efc260f3f6b35c2", "name": "Possibly dead Python function: render_document_list", "shortDescription": {"text": "Possibly dead Python function: render_document_list"}, "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-a5d4a32279bd662d", "name": "Possibly dead Python function: handle_starttag", "shortDescription": {"text": "Possibly dead Python function: handle_starttag"}, "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-34413453d27bcadb", "name": "Possibly dead Python function: handle_endtag", "shortDescription": {"text": "Possibly dead Python function: handle_endtag"}, "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-2918028360292866", "name": "Possibly dead Python function: handle_startendtag", "shortDescription": {"text": "Possibly dead Python function: handle_startendtag"}, "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-d11613e4fe2394c7", "name": "Possibly dead Python function: handle_data", "shortDescription": {"text": "Possibly dead Python function: handle_data"}, "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-ed120ed3b7cb3e5d", "name": "Possibly dead Python function: handle_entityref", "shortDescription": {"text": "Possibly dead Python function: handle_entityref"}, "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-dc1caf31c1d716cb", "name": "Possibly dead Python function: handle_charref", "shortDescription": {"text": "Possibly dead Python function: handle_charref"}, "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-7de3589c4f5ea2d1", "name": "Possibly dead Python function: handle_comment", "shortDescription": {"text": "Possibly dead Python function: handle_comment"}, "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-7a4e7118c1e150d4", "name": "Possibly dead Python function: replace_display_math", "shortDescription": {"text": "Possibly dead Python function: replace_display_math"}, "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-6292b98c175055ba", "name": "Possibly dead Python function: replace_inline_math", "shortDescription": {"text": "Possibly dead Python function: replace_inline_math"}, "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-5288ea92720d5019", "name": "Possibly dead Python function: sort_key", "shortDescription": {"text": "Possibly dead Python function: sort_key"}, "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-ff7f6ee355ba49a7", "name": "Possibly dead Python function: reload_skill", "shortDescription": {"text": "Possibly dead Python function: reload_skill"}, "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-9c769235b3f483fe", "name": "Possibly dead Python function: bulk_set_enabled", "shortDescription": {"text": "Possibly dead Python function: bulk_set_enabled"}, "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-0aca8b20646841cf", "name": "Possibly dead Python function: search_skills", "shortDescription": {"text": "Possibly dead Python function: search_skills"}, "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-9c5736695bdd5b82", "name": "Possibly dead Python function: list_user_messages", "shortDescription": {"text": "Possibly dead Python function: list_user_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-308b99a1802d40f2", "name": "Possibly dead Python function: stream_message", "shortDescription": {"text": "Possibly dead Python function: stream_message"}, "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-a59b824f0ac5edc6", "name": "Possibly dead Python function: upload_document", "shortDescription": {"text": "Possibly dead Python function: upload_document"}, "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-c4f68bb41b15607d", "name": "Possibly dead Python function: validate_workspace_path", "shortDescription": {"text": "Possibly dead Python function: validate_workspace_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-d34abe7dc752cf18", "name": "Possibly dead Python function: sanitize_filename", "shortDescription": {"text": "Possibly dead Python function: sanitize_filename"}, "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-684fb86870120d13", "name": "Possibly dead Python function: to_posix_path", "shortDescription": {"text": "Possibly dead Python function: to_posix_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-b30ea053bc985026", "name": "Possibly dead Python function: make_relative_to_root", "shortDescription": {"text": "Possibly dead Python function: make_relative_to_root"}, "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-71a2a5e3690e5859", "name": "Possibly dead Python function: redact_path_for_audit", "shortDescription": {"text": "Possibly dead Python function: redact_path_for_audit"}, "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-de44f47e69d3b077", "name": "Possibly dead Python function: redact_env_for_audit", "shortDescription": {"text": "Possibly dead Python function: redact_env_for_audit"}, "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-3d06f0337f783a04", "name": "Insecure pattern 'local_storage_auth_token' in demo.py:2074", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in demo.py:2074"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ebded200136047b3", "name": "Insecure pattern 'cors_wildcard' in client_backend/main.py:85", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in client_backend/main.py:85"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ca71be0c7eacce11", "name": "Insecure pattern 'cors_wildcard' in app/main.py:206", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in app/main.py:206"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-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-fbc0ead47fb226f3", "name": "Very large file: demo.py (10204 lines)", "shortDescription": {"text": "Very large file: demo.py (10204 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-90a810f1c202caee", "name": "Very large file: tests/test_graph_planning_subagents.py (1903 lines)", "shortDescription": {"text": "Very large file: tests/test_graph_planning_subagents.py (1903 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-6b6d5e65c4dad886", "name": "Very large file: app/ai/graph.py (4908 lines)", "shortDescription": {"text": "Very large file: app/ai/graph.py (4908 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-5492f0f9e3aef29a", "name": "Very large file: app/ai/agents/base_agent.py (1357 lines)", "shortDescription": {"text": "Very large file: app/ai/agents/base_agent.py (1357 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-f77cc2bdd9ad32c5", "name": "Very large file: app/services/message_service.py (2593 lines)", "shortDescription": {"text": "Very large file: app/services/message_service.py (2593 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-a896ac66edffeaf6", "name": "Very large file: app/services/document_processing_service.py (1649 lines)", "shortDescription": {"text": "Very large file: app/services/document_processing_service.py (1649 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-99ab1557271d72be", "name": "63 TODO/FIXME markers", "shortDescription": {"text": "63 TODO/FIXME markers"}, "fullDescription": {"text": "High count of TODO/FIXME/HACK markers \u2014 track them as issues so they're not forgotten."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 9 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 62 placeholder/mock markers across 8 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, ci. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-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-5a8b928c7bdf22a5", "name": "Agent authority lacks a verifier contract: app/ai/mcp_config.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: app/ai/mcp_config.json"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-17aced0672d2e818", "name": "Legacy-named symbol `cache_cleared_v2` in demo.py:2121", "shortDescription": {"text": "Legacy-named symbol `cache_cleared_v2` in demo.py:2121"}, "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-96b96c506d930f39", "name": "Commented-code block (5 lines) in demo.py:995", "shortDescription": {"text": "Commented-code block (5 lines) in demo.py:995"}, "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-77d0d68ed5aba73d", "name": "Legacy-named symbol `model_copy` in client_backend/services/runtime_bridge.py:121", "shortDescription": {"text": "Legacy-named symbol `model_copy` in client_backend/services/runtime_bridge.py:121"}, "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-dbb82783020e6378", "name": "Legacy-named symbol `from_buffer_copy` in client_backend/core/security.py:211", "shortDescription": {"text": "Legacy-named symbol `from_buffer_copy` in client_backend/core/security.py:211"}, "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-b840c321f24c1017", "name": "Commented-code block (7 lines) in tests/test_provider_model_context_metadata.py:263", "shortDescription": {"text": "Commented-code block (7 lines) in tests/test_provider_model_context_metadata.py:263"}, "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-3df278f9074a64ee", "name": "Legacy-named symbol `inline_rich_response_v1` in tests/test_rich_response_prompt_inventory.py:125", "shortDescription": {"text": "Legacy-named symbol `inline_rich_response_v1` in tests/test_rich_response_prompt_inventory.py:125"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5226853ecaa97758", "name": "Legacy-named symbol `inline_rich_response_v1` in tests/test_rich_response_streaming.py:121", "shortDescription": {"text": "Legacy-named symbol `inline_rich_response_v1` in tests/test_rich_response_streaming.py:121"}, "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-dc23b575ac3c726a", "name": "Legacy-named symbol `model_copy` in tests/test_custom_agent_client_tool_resync.py:95", "shortDescription": {"text": "Legacy-named symbol `model_copy` in tests/test_custom_agent_client_tool_resync.py:95"}, "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-c7df803d39cd3eda", "name": "Legacy-named symbol `_inline_rich_response_v1` in tests/test_article_image_flow.py:41", "shortDescription": {"text": "Legacy-named symbol `_inline_rich_response_v1` in tests/test_article_image_flow.py:41"}, "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-f16076a7de1ac908", "name": "Legacy-named symbol `inline_rich_response_v1` in tests/test_client_invocation_isolation.py:181", "shortDescription": {"text": "Legacy-named symbol `inline_rich_response_v1` in tests/test_client_invocation_isolation.py:181"}, "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-027ce06d41b15f6e", "name": "Legacy-named symbol `inline_rich_response_v1` in tests/test_message_history_pipeline.py:320", "shortDescription": {"text": "Legacy-named symbol `inline_rich_response_v1` in tests/test_message_history_pipeline.py:320"}, "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-163a9e612b8467a4", "name": "Legacy-named symbol `_inline_rich_response_v1` in tests/test_rich_placement.py:133", "shortDescription": {"text": "Legacy-named symbol `_inline_rich_response_v1` in tests/test_rich_placement.py:133"}, "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-dc351f8a039e340b", "name": "Legacy-named symbol `is_v1` in tests/test_demo_plan_widget.py:533", "shortDescription": {"text": "Legacy-named symbol `is_v1` in tests/test_demo_plan_widget.py:533"}, "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-4475e8b6eac11bcf", "name": "Legacy-named symbol `_inline_rich_response_v1` in tests/test_rich_response_metadata.py:60", "shortDescription": {"text": "Legacy-named symbol `_inline_rich_response_v1` in tests/test_rich_response_metadata.py:60"}, "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-a4ff75219486d40b", "name": "Commented-code block (8 lines) in tests/test_history_provider.py:143", "shortDescription": {"text": "Commented-code block (8 lines) in tests/test_history_provider.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-fb6fb236d021a6b7", "name": "Legacy-named symbol `client__old` in tests/test_multi_sidecar_hardening.py:883", "shortDescription": {"text": "Legacy-named symbol `client__old` in tests/test_multi_sidecar_hardening.py:883"}, "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-59f5d336b12a448c", "name": "Commented-code block (5 lines) in tests/test_rag_agent.py:225", "shortDescription": {"text": "Commented-code block (5 lines) in tests/test_rag_agent.py:225"}, "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-7e2adfb8098a71bd", "name": "Legacy-named symbol `model_copy` in app/ai/deferred_tool_binding.py:43", "shortDescription": {"text": "Legacy-named symbol `model_copy` in app/ai/deferred_tool_binding.py:43"}, "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-0ba54d60d2c73fb3", "name": "Legacy-named symbol `inline_rich_response_v1` in app/ai/schemas.py:184", "shortDescription": {"text": "Legacy-named symbol `inline_rich_response_v1` in app/ai/schemas.py:184"}, "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-b3113a45b95039c8", "name": "Commented-code block (5 lines) in app/ai/client_tool_catalog.py:212", "shortDescription": {"text": "Commented-code block (5 lines) in app/ai/client_tool_catalog.py:212"}, "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-506d8cc7e96cdc2b", "name": "Commented-code block (6 lines) in app/ai/tool_execution.py:838", "shortDescription": {"text": "Commented-code block (6 lines) in app/ai/tool_execution.py:838"}, "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-1f23dbc675c997a8", "name": "Legacy-named symbol `inline_rich_response_v1` in app/ai/graph.py:109", "shortDescription": {"text": "Legacy-named symbol `inline_rich_response_v1` in app/ai/graph.py:109"}, "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-9466a07f4e115504", "name": "Commented-code block (6 lines) in app/ai/graph.py:1376", "shortDescription": {"text": "Commented-code block (6 lines) in app/ai/graph.py:1376"}, "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-e50c70ca4ddeea94", "name": "Commented-code block (8 lines) in app/ai/custom_agent_runtime.py:204", "shortDescription": {"text": "Commented-code block (8 lines) in app/ai/custom_agent_runtime.py:204"}, "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-4d914afb049f7e6c", "name": "Commented-code block (9 lines) in app/ai/tool_search_scoring.py:217", "shortDescription": {"text": "Commented-code block (9 lines) in app/ai/tool_search_scoring.py:217"}, "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-122b9196677b02f0", "name": "Stub function `_get_base_system_prompt` (body is just `pass`/`return`) \u2014 app/ai/agents/base_agent.py:1272", "shortDescription": {"text": "Stub function `_get_base_system_prompt` (body is just `pass`/`return`) \u2014 app/ai/agents/base_agent.py:1272"}, "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-e68c3ec9caba98e7", "name": "Legacy-named symbol `model_copy` in app/ai/agents/custom_agent.py:267", "shortDescription": {"text": "Legacy-named symbol `model_copy` in app/ai/agents/custom_agent.py:267"}, "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-9cde767f33d73589", "name": "Commented-code block (6 lines) in app/ai/agents/custom_agent.py:172", "shortDescription": {"text": "Commented-code block (6 lines) in app/ai/agents/custom_agent.py:172"}, "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-4e2477f86ef614c8", "name": "Legacy-named symbol `inline_rich_response_v1` in app/api/messages.py:227", "shortDescription": {"text": "Legacy-named symbol `inline_rich_response_v1` in app/api/messages.py:227"}, "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-2c26bb2e625d5ef9", "name": "Legacy-named symbol `inline_rich_response_v1` in app/api/ai_sdk.py:476", "shortDescription": {"text": "Legacy-named symbol `inline_rich_response_v1` in app/api/ai_sdk.py:476"}, "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-653818ff064f171f", "name": "Legacy-named symbol `is_v1` in app/ui/rich_response.py:53", "shortDescription": {"text": "Legacy-named symbol `is_v1` in app/ui/rich_response.py:53"}, "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-23fd0a7e4dbe00e8", "name": "Stub function `authenticate_user` (body is just `pass`/`return`) \u2014 app/interfaces/auth_service_interface.py:12", "shortDescription": {"text": "Stub function `authenticate_user` (body is just `pass`/`return`) \u2014 app/interfaces/auth_service_interface.py:12"}, "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-6c34676a0a492b17", "name": "Legacy-named symbol `inline_rich_response_v1` in app/interfaces/message_service_interface.py:96", "shortDescription": {"text": "Legacy-named symbol `inline_rich_response_v1` in app/interfaces/message_service_interface.py:96"}, "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-cd835a5648b4f34a", "name": "Legacy-named symbol `model_copy` in app/services/message_service.py:112", "shortDescription": {"text": "Legacy-named symbol `model_copy` in app/services/message_service.py:112"}, "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-5ff12492cdfdd828", "name": "Legacy-named symbol `config_copy` in app/services/mcp_service.py:108", "shortDescription": {"text": "Legacy-named symbol `config_copy` in app/services/mcp_service.py:108"}, "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-1cfde86a6a8f4007", "name": "Commented-code block (7 lines) in app/services/document_processing_service.py:280", "shortDescription": {"text": "Commented-code block (7 lines) in app/services/document_processing_service.py:280"}, "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-5f052c39f6812b8d", "name": "Stub function `close` (body is just `pass`/`return`) \u2014 app/services/client_runtime_store.py:250", "shortDescription": {"text": "Stub function `close` (body is just `pass`/`return`) \u2014 app/services/client_runtime_store.py:250"}, "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-76157d833ddf4031", "name": "Commented-code block (5 lines) in app/services/document_index_service.py:177", "shortDescription": {"text": "Commented-code block (5 lines) in app/services/document_index_service.py:177"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f81671f238a7e1cd", "name": "Legacy-named symbol `model_copy` in app/services/ai_service.py:118", "shortDescription": {"text": "Legacy-named symbol `model_copy` in app/services/ai_service.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-ea2c895620ecc56d", "name": "Commented-code block (5 lines) in app/services/event_streaming/subagents.py:80", "shortDescription": {"text": "Commented-code block (5 lines) in app/services/event_streaming/subagents.py:80"}, "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-b0ea1f399fc9340a", "name": "Legacy-named symbol `inline_rich_response_v1` in app/services/event_streaming/ai_sdk_v6.py:38", "shortDescription": {"text": "Legacy-named symbol `inline_rich_response_v1` in app/services/event_streaming/ai_sdk_v6.py:38"}, "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-da6c4954bebcb20e", "name": "Commented-code block (5 lines) in app/repositories/conversation_memory_summary.py:107", "shortDescription": {"text": "Commented-code block (5 lines) in app/repositories/conversation_memory_summary.py:107"}, "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-e442fb60183790f6", "name": "Legacy-named symbol `model_copy` in app/core/mcp_adapter_utils.py:233", "shortDescription": {"text": "Legacy-named symbol `model_copy` in app/core/mcp_adapter_utils.py:233"}, "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-2ae30d65ac46c1ae", "name": "Legacy-named symbol `_inline_rich_response_v1` in app/core/response_constants.py:384", "shortDescription": {"text": "Legacy-named symbol `_inline_rich_response_v1` in app/core/response_constants.py:384"}, "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-f0ae81d007cd3af6", "name": "Legacy-named symbol `_inline_rich_response_v1` in app/core/rich_placement.py:210", "shortDescription": {"text": "Legacy-named symbol `_inline_rich_response_v1` in app/core/rich_placement.py:210"}, "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-e7b3f0f2c4b50f0c", "name": "Stub function `upgrade` (body is just `pass`/`return`) \u2014 app/alembic/versions/1ce64a959f7d_merge_hitl_with_main.py:18", "shortDescription": {"text": "Stub function `upgrade` (body is just `pass`/`return`) \u2014 app/alembic/versions/1ce64a959f7d_merge_hitl_with_main.py:18"}, "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-c81fb6d003ed2d92", "name": "Stub function `upgrade` (body is just `pass`/`return`) \u2014 app/alembic/versions/be1969e4b7f2_merge_heads.py:18", "shortDescription": {"text": "Stub function `upgrade` (body is just `pass`/`return`) \u2014 app/alembic/versions/be1969e4b7f2_merge_heads.py:18"}, "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-c3ffbbff1d71f22f", "name": "Stub function `upgrade` (body is just `pass`/`return`) \u2014 app/alembic/versions/m4n5o6p7q8r9_merge_allow_custom_model_with", "shortDescription": {"text": "Stub function `upgrade` (body is just `pass`/`return`) \u2014 app/alembic/versions/m4n5o6p7q8r9_merge_allow_custom_model_with_device_branch.py:18"}, "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-41f2bd70df048dae", "name": "Legacy-named symbol `inline_rich_response_v1` in app/schemas/workflow.py:105", "shortDescription": {"text": "Legacy-named symbol `inline_rich_response_v1` in app/schemas/workflow.py:105"}, "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-dafbdb22b57a37d7", "name": "Legacy-named symbol `inline_rich_response_v1` in app/schemas/message.py:53", "shortDescription": {"text": "Legacy-named symbol `inline_rich_response_v1` in app/schemas/message.py:53"}, "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-b334d875f2339fa1", "name": "5 env vars used in code but missing from .env.example", "shortDescription": {"text": "5 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `CHATBOT_API_BASE_URL`, `CHATBOT_WIDGET_WS_BASE_URL`, `CLIENT_ENV_FILE`, `LOCALAPPDATA`, `TAVILY_API_KEY`. 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:\nupload_support.py:upload_documents, upload_support.py:upload_document\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-33a6b62e30ce7ab4", "name": "Near-duplicate function bodies in 6 places", "shortDescription": {"text": "Near-duplicate function bodies in 6 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nclient_backend/api/proxy.py:proxy_custom_agents, client_backend/api/proxy.py:proxy_custom_agents_options, client_backend/api/proxy.py:proxy_custom_agent, client_backend/api/proxy.py:proxy_ai_custom_agents\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-0027e313ade46c8f", "name": "Near-duplicate function bodies in 7 places", "shortDescription": {"text": "Near-duplicate function bodies in 7 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nclient_backend/api/proxy.py:proxy_conversation_custom_agents, client_backend/api/proxy.py:proxy_ai_conversation_custom_agents, client_backend/api/proxy.py:proxy_conversation_task_plans, client_backend/api/proxy.py:proxy_conversation_task_plans_manual\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-be46ea126aa5d8dc", "name": "Near-duplicate function bodies in 3 places", "shortDescription": {"text": "Near-duplicate function bodies in 3 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nclient_backend/services/server_api.py:upload_documents_bytes_with_status, client_backend/services/server_api.py:upload_documents_bytes, client_backend/services/server_api.py:upload_document\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-fd00a6920d32cf4d", "name": "FastAPI POST `refresh` without auth dependency \u2014 client_backend/api/auth.py:188", "shortDescription": {"text": "FastAPI POST `refresh` without auth dependency \u2014 client_backend/api/auth.py:188"}, "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-6796a1c6951b0179", "name": "FastAPI POST `restore_session` without auth dependency \u2014 client_backend/api/auth.py:242", "shortDescription": {"text": "FastAPI POST `restore_session` without auth dependency \u2014 client_backend/api/auth.py:242"}, "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-dba43514781a089f", "name": "FastAPI POST `verify_local_token` without auth dependency \u2014 client_backend/api/auth.py:312", "shortDescription": {"text": "FastAPI POST `verify_local_token` without auth dependency \u2014 client_backend/api/auth.py:312"}, "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-67d73fa1827f1dda", "name": "FastAPI POST `create_feedback` without auth dependency \u2014 app/api/feedback.py:13", "shortDescription": {"text": "FastAPI POST `create_feedback` without auth dependency \u2014 app/api/feedback.py:13"}, "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-04b5d291cde5fce1", "name": "FastAPI PUT `update_feedback` without auth dependency \u2014 app/api/feedback.py:76", "shortDescription": {"text": "FastAPI PUT `update_feedback` without auth dependency \u2014 app/api/feedback.py:76"}, "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-3585ade34e1c8a00", "name": "FastAPI POST `add_server` without auth dependency \u2014 app/api/mcp.py:65", "shortDescription": {"text": "FastAPI POST `add_server` without auth dependency \u2014 app/api/mcp.py:65"}, "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-b1883594dad7cf98", "name": "FastAPI POST `add_server_from_url` without auth dependency \u2014 app/api/mcp.py:78", "shortDescription": {"text": "FastAPI POST `add_server_from_url` without auth dependency \u2014 app/api/mcp.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-86b878967f0e6b77", "name": "FastAPI DELETE `remove_server` without auth dependency \u2014 app/api/mcp.py:91", "shortDescription": {"text": "FastAPI DELETE `remove_server` without auth dependency \u2014 app/api/mcp.py:91"}, "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-17d59473d219d23c", "name": "FastAPI PATCH `toggle_server` without auth dependency \u2014 app/api/mcp.py:103", "shortDescription": {"text": "FastAPI PATCH `toggle_server` without auth dependency \u2014 app/api/mcp.py:103"}, "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-1d5622a1a0318e2c", "name": "FastAPI POST `execute_tool` without auth dependency \u2014 app/api/mcp.py:144", "shortDescription": {"text": "FastAPI POST `execute_tool` without auth dependency \u2014 app/api/mcp.py:144"}, "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-8d68e5df22656af2", "name": "FastAPI POST `refresh_token` without auth dependency \u2014 app/api/auth.py:47", "shortDescription": {"text": "FastAPI POST `refresh_token` without auth dependency \u2014 app/api/auth.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-bbb77005ae0b76b1", "name": "FastAPI POST `generate_conversation_title` without auth dependency \u2014 app/api/conversations.py:32", "shortDescription": {"text": "FastAPI POST `generate_conversation_title` without auth dependency \u2014 app/api/conversations.py:32"}, "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-8087592c65c5e88f", "name": "FastAPI POST `create_conversation` without auth dependency \u2014 app/api/conversations.py:48", "shortDescription": {"text": "FastAPI POST `create_conversation` without auth dependency \u2014 app/api/conversations.py:48"}, "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-3d189cf2511644a4", "name": "FastAPI PATCH `update_conversation` without auth dependency \u2014 app/api/conversations.py:134", "shortDescription": {"text": "FastAPI PATCH `update_conversation` without auth dependency \u2014 app/api/conversations.py:134"}, "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-65ba2831ea9fa295", "name": "FastAPI DELETE `delete_conversation` without auth dependency \u2014 app/api/conversations.py:147", "shortDescription": {"text": "FastAPI DELETE `delete_conversation` without auth dependency \u2014 app/api/conversations.py:147"}, "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-7823c42dc42d956e", "name": "FastAPI POST `create_task_plan` without auth dependency \u2014 app/api/task_plans.py:24", "shortDescription": {"text": "FastAPI POST `create_task_plan` without auth dependency \u2014 app/api/task_plans.py:24"}, "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-f483c839df39b9ed", "name": "FastAPI POST `create_task_plan_manual` without auth dependency \u2014 app/api/task_plans.py:53", "shortDescription": {"text": "FastAPI POST `create_task_plan_manual` without auth dependency \u2014 app/api/task_plans.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-2a6bd8f598987c9b", "name": "FastAPI PATCH `update_task_plan` without auth dependency \u2014 app/api/task_plans.py:128", "shortDescription": {"text": "FastAPI PATCH `update_task_plan` without auth dependency \u2014 app/api/task_plans.py:128"}, "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-28582bc653a2eb27", "name": "FastAPI POST `complete_task_plan` without auth dependency \u2014 app/api/task_plans.py:155", "shortDescription": {"text": "FastAPI POST `complete_task_plan` without auth dependency \u2014 app/api/task_plans.py:155"}, "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-e299dc9e66641ceb", "name": "FastAPI DELETE `delete_task_plan` without auth dependency \u2014 app/api/task_plans.py:174", "shortDescription": {"text": "FastAPI DELETE `delete_task_plan` without auth dependency \u2014 app/api/task_plans.py:174"}, "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-891f0f280fcca59e", "name": "FastAPI POST `create_message` without auth dependency \u2014 app/api/messages.py:109", "shortDescription": {"text": "FastAPI POST `create_message` without auth dependency \u2014 app/api/messages.py:109"}, "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-00f208191f3037d6", "name": "FastAPI POST `create_message_stream` without auth dependency \u2014 app/api/messages.py:142", "shortDescription": {"text": "FastAPI POST `create_message_stream` without auth dependency \u2014 app/api/messages.py:142"}, "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-63f484d1801794d5", "name": "FastAPI POST `stop_message_generation` without auth dependency \u2014 app/api/messages.py:164", "shortDescription": {"text": "FastAPI POST `stop_message_generation` without auth dependency \u2014 app/api/messages.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-12796a6650801e93", "name": "FastAPI POST `resume_interrupt` without auth dependency \u2014 app/api/messages.py:198", "shortDescription": {"text": "FastAPI POST `resume_interrupt` without auth dependency \u2014 app/api/messages.py:198"}, "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-4afa9248c1488d26", "name": "FastAPI POST `create_conversation_ai_sdk` without auth dependency \u2014 app/api/ai_sdk.py:682", "shortDescription": {"text": "FastAPI POST `create_conversation_ai_sdk` without auth dependency \u2014 app/api/ai_sdk.py:682"}, "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-518a2ca3ae660b2b", "name": "FastAPI PATCH `update_conversation_ai_sdk` without auth dependency \u2014 app/api/ai_sdk.py:752", "shortDescription": {"text": "FastAPI PATCH `update_conversation_ai_sdk` without auth dependency \u2014 app/api/ai_sdk.py:752"}, "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-3bcf5c8a32bba12d", "name": "FastAPI DELETE `delete_conversation_ai_sdk` without auth dependency \u2014 app/api/ai_sdk.py:776", "shortDescription": {"text": "FastAPI DELETE `delete_conversation_ai_sdk` without auth dependency \u2014 app/api/ai_sdk.py:776"}, "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-4b1af9ae0f8ba19b", "name": "FastAPI POST `<anonymous>` without auth dependency \u2014 app/api/ai_sdk.py:855", "shortDescription": {"text": "FastAPI POST `<anonymous>` without auth dependency \u2014 app/api/ai_sdk.py:855"}, "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-39ddfc77ee87914e", "name": "FastAPI POST `<anonymous>` without auth dependency \u2014 app/api/ai_sdk.py:874", "shortDescription": {"text": "FastAPI POST `<anonymous>` without auth dependency \u2014 app/api/ai_sdk.py:874"}, "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-0c724d72a9892ce8", "name": "FastAPI POST `<anonymous>` without auth dependency \u2014 app/api/ai_sdk.py:941", "shortDescription": {"text": "FastAPI POST `<anonymous>` without auth dependency \u2014 app/api/ai_sdk.py:941"}, "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-c8c78b0321a26552", "name": "FastAPI POST `create_custom_agent` without auth dependency \u2014 app/api/custom_agents.py:41", "shortDescription": {"text": "FastAPI POST `create_custom_agent` without auth dependency \u2014 app/api/custom_agents.py:41"}, "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-dc67fb4e0027bf56", "name": "FastAPI PATCH `update_custom_agent` without auth dependency \u2014 app/api/custom_agents.py:79", "shortDescription": {"text": "FastAPI PATCH `update_custom_agent` without auth dependency \u2014 app/api/custom_agents.py:79"}, "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-f90afc4a24cadfea", "name": "FastAPI DELETE `delete_custom_agent` without auth dependency \u2014 app/api/custom_agents.py:96", "shortDescription": {"text": "FastAPI DELETE `delete_custom_agent` without auth dependency \u2014 app/api/custom_agents.py:96"}, "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-c98e604e3faac7d7", "name": "FastAPI POST `upload_document` without auth dependency \u2014 app/api/documents.py:261", "shortDescription": {"text": "FastAPI POST `upload_document` without auth dependency \u2014 app/api/documents.py:261"}, "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-69a86b76a4a39fbe", "name": "FastAPI POST `upload_documents` without auth dependency \u2014 app/api/documents.py:318", "shortDescription": {"text": "FastAPI POST `upload_documents` without auth dependency \u2014 app/api/documents.py:318"}, "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-7ac6e9f6677bede9", "name": "FastAPI PUT `update_document` without auth dependency \u2014 app/api/documents.py:448", "shortDescription": {"text": "FastAPI PUT `update_document` without auth dependency \u2014 app/api/documents.py:448"}, "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-837b014be4711942", "name": "FastAPI DELETE `delete_document` without auth dependency \u2014 app/api/documents.py:471", "shortDescription": {"text": "FastAPI DELETE `delete_document` without auth dependency \u2014 app/api/documents.py:471"}, "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-5baa8971ebe192a1", "name": "Unused endpoint: GET /", "shortDescription": {"text": "Unused endpoint: GET /"}, "fullDescription": {"text": "`client_backend/main.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-a12f85b46010cb53", "name": "Unused endpoint: GET /{name}", "shortDescription": {"text": "Unused endpoint: GET /{name}"}, "fullDescription": {"text": "`client_backend/api/skills.py` declares `GET /{name}` 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-90355f98f9f4dbf6", "name": "Unused endpoint: PATCH /{name}/toggle", "shortDescription": {"text": "Unused endpoint: PATCH /{name}/toggle"}, "fullDescription": {"text": "`client_backend/api/skills.py` declares `PATCH /{name}/toggle` 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-d69b208312536d0c", "name": "Unused endpoint: POST /reload", "shortDescription": {"text": "Unused endpoint: POST /reload"}, "fullDescription": {"text": "`client_backend/api/skills.py` declares `POST /reload` 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-634c359ef65e2ade", "name": "Unused endpoint: GET /device", "shortDescription": {"text": "Unused endpoint: GET /device"}, "fullDescription": {"text": "`client_backend/api/health.py` declares `GET /device` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-282c9c5199668445", "name": "Unused endpoint: GET /servers", "shortDescription": {"text": "Unused endpoint: GET /servers"}, "fullDescription": {"text": "`client_backend/api/mcp.py` declares `GET /servers` 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-a78c34be8efc15ad", "name": "Unused endpoint: GET /servers/{server_name}", "shortDescription": {"text": "Unused endpoint: GET /servers/{server_name}"}, "fullDescription": {"text": "`client_backend/api/mcp.py` declares `GET /servers/{server_name}` 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-510c1e485a035f9e", "name": "Unused endpoint: POST /servers", "shortDescription": {"text": "Unused endpoint: POST /servers"}, "fullDescription": {"text": "`client_backend/api/mcp.py` declares `POST /servers` 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-9903625527fdab7f", "name": "Unused endpoint: POST /servers/from-url", "shortDescription": {"text": "Unused endpoint: POST /servers/from-url"}, "fullDescription": {"text": "`client_backend/api/mcp.py` declares `POST /servers/from-url` 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-7e91c6c440220150", "name": "Unused endpoint: DELETE /servers/{server_name}", "shortDescription": {"text": "Unused endpoint: DELETE /servers/{server_name}"}, "fullDescription": {"text": "`client_backend/api/mcp.py` declares `DELETE /servers/{server_name}` 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-b9b7adc65d4b8b35", "name": "Unused endpoint: PATCH /servers/{server_name}/toggle", "shortDescription": {"text": "Unused endpoint: PATCH /servers/{server_name}/toggle"}, "fullDescription": {"text": "`client_backend/api/mcp.py` declares `PATCH /servers/{server_name}/toggle` 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-582b00fca2796501", "name": "Unused endpoint: GET /tools", "shortDescription": {"text": "Unused endpoint: GET /tools"}, "fullDescription": {"text": "`client_backend/api/mcp.py` declares `GET /tools` 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-819d44ca072f5f69", "name": "Unused endpoint: GET /tools/{tool_name}", "shortDescription": {"text": "Unused endpoint: GET /tools/{tool_name}"}, "fullDescription": {"text": "`client_backend/api/mcp.py` declares `GET /tools/{tool_name}` 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-957198cfbf4fb717", "name": "Unused endpoint: POST /tools/{tool_name}/execute", "shortDescription": {"text": "Unused endpoint: POST /tools/{tool_name}/execute"}, "fullDescription": {"text": "`client_backend/api/mcp.py` declares `POST /tools/{tool_name}/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-8d16b1bb2723f51e", "name": "Unused endpoint: POST /signup", "shortDescription": {"text": "Unused endpoint: POST /signup"}, "fullDescription": {"text": "`client_backend/api/auth.py` declares `POST /signup` 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": "`client_backend/api/auth.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-7ce17d6b092a81ca", "name": "Unused endpoint: POST /refresh", "shortDescription": {"text": "Unused endpoint: POST /refresh"}, "fullDescription": {"text": "`client_backend/api/auth.py` declares `POST /refresh` 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": "`client_backend/api/auth.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-947ea837b34b3691", "name": "Unused endpoint: POST /restore", "shortDescription": {"text": "Unused endpoint: POST /restore"}, "fullDescription": {"text": "`client_backend/api/auth.py` declares `POST /restore` 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": "`client_backend/api/auth.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-841e50bf821e4158", "name": "Unused endpoint: GET /users", "shortDescription": {"text": "Unused endpoint: GET /users"}, "fullDescription": {"text": "`client_backend/api/auth.py` declares `GET /users` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a5009a8fe841541d", "name": "Unused endpoint: POST /verify-local-token", "shortDescription": {"text": "Unused endpoint: POST /verify-local-token"}, "fullDescription": {"text": "`client_backend/api/auth.py` declares `POST /verify-local-token` 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-72b507a339d976dc", "name": "Unused endpoint: POST /generate-title", "shortDescription": {"text": "Unused endpoint: POST /generate-title"}, "fullDescription": {"text": "`client_backend/api/conversations.py` declares `POST /generate-title` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7a009b1a56794f45", "name": "Unused endpoint: POST /", "shortDescription": {"text": "Unused endpoint: POST /"}, "fullDescription": {"text": "`client_backend/api/conversations.py` declares `POST /` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-eb4965f4d227f8b3", "name": "Unused endpoint: GET /{conversation_id}", "shortDescription": {"text": "Unused endpoint: GET /{conversation_id}"}, "fullDescription": {"text": "`client_backend/api/conversations.py` declares `GET /{conversation_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-593c6efeb9f4cfb8", "name": "Unused endpoint: GET /{conversation_id}/messages", "shortDescription": {"text": "Unused endpoint: GET /{conversation_id}/messages"}, "fullDescription": {"text": "`client_backend/api/conversations.py` declares `GET /{conversation_id}/messages` 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-8a38f52aeddc3aad", "name": "Unused endpoint: PATCH /{conversation_id}", "shortDescription": {"text": "Unused endpoint: PATCH /{conversation_id}"}, "fullDescription": {"text": "`client_backend/api/conversations.py` declares `PATCH /{conversation_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-ad72d180247f16e2", "name": "Unused endpoint: DELETE /{conversation_id}", "shortDescription": {"text": "Unused endpoint: DELETE /{conversation_id}"}, "fullDescription": {"text": "`client_backend/api/conversations.py` declares `DELETE /{conversation_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-d18411a066b7e2c1", "name": "Unused endpoint: GET /users/{user_id}", "shortDescription": {"text": "Unused endpoint: GET /users/{user_id}"}, "fullDescription": {"text": "`client_backend/api/proxy.py` declares `GET /users/{user_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-d5264a6fe9b2cb8a", "name": "Unused endpoint: ANY /providers", "shortDescription": {"text": "Unused endpoint: ANY /providers"}, "fullDescription": {"text": "`client_backend/api/proxy.py` declares `ANY /providers` 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-03ffcff166a3f657", "name": "Unused endpoint: ANY /providers/{provider_type}", "shortDescription": {"text": "Unused endpoint: ANY /providers/{provider_type}"}, "fullDescription": {"text": "`client_backend/api/proxy.py` declares `ANY /providers/{provider_type}` 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-5dafb6d2316ba59d", "name": "Unused endpoint: POST /providers/{provider_type}/validate", "shortDescription": {"text": "Unused endpoint: POST /providers/{provider_type}/validate"}, "fullDescription": {"text": "`client_backend/api/proxy.py` declares `POST /providers/{provider_type}/validate` 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-5b213f922ec4d7c9", "name": "Unused endpoint: GET /providers/{provider_type}/models", "shortDescription": {"text": "Unused endpoint: GET /providers/{provider_type}/models"}, "fullDescription": {"text": "`client_backend/api/proxy.py` declares `GET /providers/{provider_type}/models` 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-ac5389a8c69cf351", "name": "Unused endpoint: ANY /model-config", "shortDescription": {"text": "Unused endpoint: ANY /model-config"}, "fullDescription": {"text": "`client_backend/api/proxy.py` declares `ANY /model-config` 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-7043f03577b0a2ef", "name": "Unused endpoint: GET /model-config/options", "shortDescription": {"text": "Unused endpoint: GET /model-config/options"}, "fullDescription": {"text": "`client_backend/api/proxy.py` declares `GET /model-config/options` 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-3032a1486fad8724", "name": "Unused endpoint: POST /model-config/reset", "shortDescription": {"text": "Unused endpoint: POST /model-config/reset"}, "fullDescription": {"text": "`client_backend/api/proxy.py` declares `POST /model-config/reset` 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-acb6c9faa77362e4", "name": "Unused endpoint: ANY /custom-agents", "shortDescription": {"text": "Unused endpoint: ANY /custom-agents"}, "fullDescription": {"text": "`client_backend/api/proxy.py` declares `ANY /custom-agents` 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-8ad88af5615e6631", "name": "Unused endpoint: GET /custom-agents/options", "shortDescription": {"text": "Unused endpoint: GET /custom-agents/options"}, "fullDescription": {"text": "`client_backend/api/proxy.py` declares `GET /custom-agents/options` 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-572b4adbfc48007a", "name": "Unused endpoint: ANY /custom-agents/{custom_agent_id}", "shortDescription": {"text": "Unused endpoint: ANY /custom-agents/{custom_agent_id}"}, "fullDescription": {"text": "`client_backend/api/proxy.py` declares `ANY /custom-agents/{custom_agent_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-83bfc0ceb783c89f", "name": "Unused endpoint: ANY /ai/custom-agents", "shortDescription": {"text": "Unused endpoint: ANY /ai/custom-agents"}, "fullDescription": {"text": "`client_backend/api/proxy.py` declares `ANY /ai/custom-agents` 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-7f5fc524d7b2d212", "name": "Unused endpoint: GET /ai/custom-agents/options", "shortDescription": {"text": "Unused endpoint: GET /ai/custom-agents/options"}, "fullDescription": {"text": "`client_backend/api/proxy.py` declares `GET /ai/custom-agents/options` 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-f208086edcb85c9c", "name": "Unused endpoint: ANY /ai/custom-agents/{custom_agent_id}", "shortDescription": {"text": "Unused endpoint: ANY /ai/custom-agents/{custom_agent_id}"}, "fullDescription": {"text": "`client_backend/api/proxy.py` declares `ANY /ai/custom-agents/{custom_agent_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-7cab98cef939ad4e", "name": "Unused endpoint: ANY /conversations/{conversation_id}/custom-agents", "shortDescription": {"text": "Unused endpoint: ANY /conversations/{conversation_id}/custom-agents"}, "fullDescription": {"text": "`client_backend/api/proxy.py` declares `ANY /conversations/{conversation_id}/custom-agents` 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-3bd3de8d8e97738c", "name": "Unused endpoint: ANY /ai/conversations/{conversation_id}/custom-agents", "shortDescription": {"text": "Unused endpoint: ANY /ai/conversations/{conversation_id}/custom-agents"}, "fullDescription": {"text": "`client_backend/api/proxy.py` declares `ANY /ai/conversations/{conversation_id}/custom-agents` 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-4e9d5c9a953cfbd8", "name": "Unused endpoint: ANY /messages/{message_id}/feedbacks", "shortDescription": {"text": "Unused endpoint: ANY /messages/{message_id}/feedbacks"}, "fullDescription": {"text": "`client_backend/api/proxy.py` declares `ANY /messages/{message_id}/feedbacks` 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-3b3ba9c6279395e0", "name": "Unused endpoint: GET /messages/{message_id}/feedbacks/stats", "shortDescription": {"text": "Unused endpoint: GET /messages/{message_id}/feedbacks/stats"}, "fullDescription": {"text": "`client_backend/api/proxy.py` declares `GET /messages/{message_id}/feedbacks/stats` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-49688f5cc77f32f2", "name": "Unused endpoint: GET /messages/{message_id}/feedbacks/user", "shortDescription": {"text": "Unused endpoint: GET /messages/{message_id}/feedbacks/user"}, "fullDescription": {"text": "`client_backend/api/proxy.py` declares `GET /messages/{message_id}/feedbacks/user` 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-1a9672b6004f5646", "name": "Unused endpoint: PUT /messages/{message_id}/feedbacks/{feedback_id}", "shortDescription": {"text": "Unused endpoint: PUT /messages/{message_id}/feedbacks/{feedback_id}"}, "fullDescription": {"text": "`client_backend/api/proxy.py` declares `PUT /messages/{message_id}/feedbacks/{feedback_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-d9d148f09418b0bc", "name": "Unused endpoint: ANY /conversations/{conversation_id}/task-plans", "shortDescription": {"text": "Unused endpoint: ANY /conversations/{conversation_id}/task-plans"}, "fullDescription": {"text": "`client_backend/api/proxy.py` declares `ANY /conversations/{conversation_id}/task-plans` 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-c4459ff7de1ec855", "name": "Unused endpoint: POST /conversations/{conversation_id}/task-plans/manual", "shortDescription": {"text": "Unused endpoint: POST /conversations/{conversation_id}/task-plans/manual"}, "fullDescription": {"text": "`client_backend/api/proxy.py` declares `POST /conversations/{conversation_id}/task-plans/manual` 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/21578"}, "properties": {"repository": "Tox1cCoder/AgenticChatbot", "repoUrl": "https://github.com/Tox1cCoder/AgenticChatbot", "branch": "main"}, "results": [{"ruleId": "scanner-ecc1de0616556217", "level": "note", "message": {"text": "Possibly dead Python function: render_upload_section"}, "properties": {"repobilityId": "6359bb15ef6874d2", "scanner": "scanner-primary", "fingerprint": "ecc1de0616556217", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "upload_support.py:41"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d2b4fa021b846bed", "level": "note", "message": {"text": "Possibly dead Python function: upload_document"}, "properties": {"repobilityId": "6be5222dda0988be", "scanner": "scanner-primary", "fingerprint": "d2b4fa021b846bed", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "upload_support.py:125"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5df6826cd1ca381b", "level": "note", "message": {"text": "Possibly dead Python function: poll_document_status"}, "properties": {"repobilityId": "cef4f04d20900626", "scanner": "scanner-primary", "fingerprint": "5df6826cd1ca381b", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "upload_support.py:153"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6efc260f3f6b35c2", "level": "note", "message": {"text": "Possibly dead Python function: render_document_list"}, "properties": {"repobilityId": "a103514a8edce628", "scanner": "scanner-primary", "fingerprint": "6efc260f3f6b35c2", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "upload_support.py:289"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a5d4a32279bd662d", "level": "note", "message": {"text": "Possibly dead Python function: handle_starttag"}, "properties": {"repobilityId": "3bf216d149959ebf", "scanner": "scanner-primary", "fingerprint": "a5d4a32279bd662d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "demo.py:1821"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-34413453d27bcadb", "level": "note", "message": {"text": "Possibly dead Python function: handle_endtag"}, "properties": {"repobilityId": "7eb6f3decafc1766", "scanner": "scanner-primary", "fingerprint": "34413453d27bcadb", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "demo.py:1873"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-2918028360292866", "level": "note", "message": {"text": "Possibly dead Python function: handle_startendtag"}, "properties": {"repobilityId": "259e69d47dc2412b", "scanner": "scanner-primary", "fingerprint": "2918028360292866", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "demo.py:1882"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d11613e4fe2394c7", "level": "note", "message": {"text": "Possibly dead Python function: handle_data"}, "properties": {"repobilityId": "3a673a278f4fc1e6", "scanner": "scanner-primary", "fingerprint": "d11613e4fe2394c7", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "demo.py:1889"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ed120ed3b7cb3e5d", "level": "note", "message": {"text": "Possibly dead Python function: handle_entityref"}, "properties": {"repobilityId": "7c5ac18a5da0189d", "scanner": "scanner-primary", "fingerprint": "ed120ed3b7cb3e5d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "demo.py:1895"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-dc1caf31c1d716cb", "level": "note", "message": {"text": "Possibly dead Python function: handle_charref"}, "properties": {"repobilityId": "2b5922bb3f88ade8", "scanner": "scanner-primary", "fingerprint": "dc1caf31c1d716cb", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "demo.py:1898"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7de3589c4f5ea2d1", "level": "note", "message": {"text": "Possibly dead Python function: handle_comment"}, "properties": {"repobilityId": "e1881c11b4205f0d", "scanner": "scanner-primary", "fingerprint": "7de3589c4f5ea2d1", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "demo.py:1901"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7a4e7118c1e150d4", "level": "note", "message": {"text": "Possibly dead Python function: replace_display_math"}, "properties": {"repobilityId": "578b0355947c11b4", "scanner": "scanner-primary", "fingerprint": "7a4e7118c1e150d4", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "demo.py:1934"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6292b98c175055ba", "level": "note", "message": {"text": "Possibly dead Python function: replace_inline_math"}, "properties": {"repobilityId": "1c0445468b460451", "scanner": "scanner-primary", "fingerprint": "6292b98c175055ba", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "demo.py:1949"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5288ea92720d5019", "level": "note", "message": {"text": "Possibly dead Python function: sort_key"}, "properties": {"repobilityId": "ac2a4181eae38738", "scanner": "scanner-primary", "fingerprint": "5288ea92720d5019", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "demo.py:8287"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ff7f6ee355ba49a7", "level": "note", "message": {"text": "Possibly dead Python function: reload_skill"}, "properties": {"repobilityId": "e5ea08c2eecd54da", "scanner": "scanner-primary", "fingerprint": "ff7f6ee355ba49a7", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "client_backend/services/local_skills_registry.py:274"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9c769235b3f483fe", "level": "note", "message": {"text": "Possibly dead Python function: bulk_set_enabled"}, "properties": {"repobilityId": "3007694ab0887814", "scanner": "scanner-primary", "fingerprint": "9c769235b3f483fe", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "client_backend/services/local_skills_registry.py:322"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0aca8b20646841cf", "level": "note", "message": {"text": "Possibly dead Python function: search_skills"}, "properties": {"repobilityId": "1d0afb3dc46513c9", "scanner": "scanner-primary", "fingerprint": "0aca8b20646841cf", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "client_backend/services/local_skills_registry.py:356"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9c5736695bdd5b82", "level": "note", "message": {"text": "Possibly dead Python function: list_user_messages"}, "properties": {"repobilityId": "316093b57dd4a66e", "scanner": "scanner-primary", "fingerprint": "9c5736695bdd5b82", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "client_backend/services/server_api.py:457"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-308b99a1802d40f2", "level": "note", "message": {"text": "Possibly dead Python function: stream_message"}, "properties": {"repobilityId": "38c58d9d4108d608", "scanner": "scanner-primary", "fingerprint": "308b99a1802d40f2", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "client_backend/services/server_api.py:466"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a59b824f0ac5edc6", "level": "note", "message": {"text": "Possibly dead Python function: upload_document"}, "properties": {"repobilityId": "6be5222dda0988be", "scanner": "scanner-primary", "fingerprint": "a59b824f0ac5edc6", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "client_backend/services/server_api.py:695"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c4f68bb41b15607d", "level": "note", "message": {"text": "Possibly dead Python function: validate_workspace_path"}, "properties": {"repobilityId": "4729870c90e6f324", "scanner": "scanner-primary", "fingerprint": "c4f68bb41b15607d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "client_backend/core/paths.py:55"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d34abe7dc752cf18", "level": "note", "message": {"text": "Possibly dead Python function: sanitize_filename"}, "properties": {"repobilityId": "4f928615660ca9e6", "scanner": "scanner-primary", "fingerprint": "d34abe7dc752cf18", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "client_backend/core/paths.py:85"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-684fb86870120d13", "level": "note", "message": {"text": "Possibly dead Python function: to_posix_path"}, "properties": {"repobilityId": "131f5c123e137934", "scanner": "scanner-primary", "fingerprint": "684fb86870120d13", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "client_backend/core/paths.py:113"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b30ea053bc985026", "level": "note", "message": {"text": "Possibly dead Python function: make_relative_to_root"}, "properties": {"repobilityId": "c00c573d48b201cd", "scanner": "scanner-primary", "fingerprint": "b30ea053bc985026", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "client_backend/core/paths.py:126"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-71a2a5e3690e5859", "level": "note", "message": {"text": "Possibly dead Python function: redact_path_for_audit"}, "properties": {"repobilityId": "31ef9f1da8a325cb", "scanner": "scanner-primary", "fingerprint": "71a2a5e3690e5859", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "client_backend/core/security.py:307"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-de44f47e69d3b077", "level": "note", "message": {"text": "Possibly dead Python function: redact_env_for_audit"}, "properties": {"repobilityId": "eeea0cad022ce32c", "scanner": "scanner-primary", "fingerprint": "de44f47e69d3b077", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "client_backend/core/security.py:340"}, "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-3d06f0337f783a04", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in demo.py:2074"}, "properties": {"repobilityId": "994fe458c704ce4e", "scanner": "scanner-primary", "fingerprint": "3d06f0337f783a04", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "demo.py"}, "region": {"startLine": 2074}}}]}, {"ruleId": "scanner-ebded200136047b3", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in client_backend/main.py:85"}, "properties": {"repobilityId": "0888e3c8d999735f", "scanner": "scanner-primary", "fingerprint": "ebded200136047b3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "client_backend/main.py"}, "region": {"startLine": 85}}}]}, {"ruleId": "scanner-ca71be0c7eacce11", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in app/main.py:206"}, "properties": {"repobilityId": "6e34239fa74e6e6b", "scanner": "scanner-primary", "fingerprint": "ca71be0c7eacce11", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/main.py"}, "region": {"startLine": 206}}}]}, {"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-fbc0ead47fb226f3", "level": "note", "message": {"text": "Very large file: demo.py (10204 lines)"}, "properties": {"repobilityId": "82b9d5860666cbdf", "scanner": "scanner-primary", "fingerprint": "fbc0ead47fb226f3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-90a810f1c202caee", "level": "note", "message": {"text": "Very large file: tests/test_graph_planning_subagents.py (1903 lines)"}, "properties": {"repobilityId": "b723ac754b985f5c", "scanner": "scanner-primary", "fingerprint": "90a810f1c202caee", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6b6d5e65c4dad886", "level": "note", "message": {"text": "Very large file: app/ai/graph.py (4908 lines)"}, "properties": {"repobilityId": "91cd65ee576e8cee", "scanner": "scanner-primary", "fingerprint": "6b6d5e65c4dad886", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-5492f0f9e3aef29a", "level": "note", "message": {"text": "Very large file: app/ai/agents/base_agent.py (1357 lines)"}, "properties": {"repobilityId": "f391129af911804a", "scanner": "scanner-primary", "fingerprint": "5492f0f9e3aef29a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f77cc2bdd9ad32c5", "level": "note", "message": {"text": "Very large file: app/services/message_service.py (2593 lines)"}, "properties": {"repobilityId": "7c8595b4a4ce8203", "scanner": "scanner-primary", "fingerprint": "f77cc2bdd9ad32c5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a896ac66edffeaf6", "level": "note", "message": {"text": "Very large file: app/services/document_processing_service.py (1649 lines)"}, "properties": {"repobilityId": "f6a8f8efedb37945", "scanner": "scanner-primary", "fingerprint": "a896ac66edffeaf6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-99ab1557271d72be", "level": "note", "message": {"text": "63 TODO/FIXME markers"}, "properties": {"repobilityId": "4b38c118003e07d2", "scanner": "scanner-primary", "fingerprint": "99ab1557271d72be", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["maintenance"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "06332845b847ddb6", "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": "0f14a650b3f38479", "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": "a079296429391ccd", "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": "68d5d9498a87fff3", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "note", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "bfa0160dfdd367df", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "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": "49855c64c4a0a416", "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": "8f132ce6eda3c4b2", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-5a8b928c7bdf22a5", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: app/ai/mcp_config.json"}, "properties": {"repobilityId": "39936008a2d6c0f1", "scanner": "scanner-primary", "fingerprint": "5a8b928c7bdf22a5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "mcp_config"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/ai/mcp_config.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-17aced0672d2e818", "level": "note", "message": {"text": "Legacy-named symbol `cache_cleared_v2` in demo.py:2121"}, "properties": {"repobilityId": "1200a0a5b7b3c68e", "scanner": "scanner-primary", "fingerprint": "17aced0672d2e818", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-96b96c506d930f39", "level": "none", "message": {"text": "Commented-code block (5 lines) in demo.py:995"}, "properties": {"repobilityId": "d0065e6afd3c3353", "scanner": "scanner-primary", "fingerprint": "96b96c506d930f39", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-77d0d68ed5aba73d", "level": "note", "message": {"text": "Legacy-named symbol `model_copy` in client_backend/services/runtime_bridge.py:121"}, "properties": {"repobilityId": "c65adc05474859c1", "scanner": "scanner-primary", "fingerprint": "77d0d68ed5aba73d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-dbb82783020e6378", "level": "note", "message": {"text": "Legacy-named symbol `from_buffer_copy` in client_backend/core/security.py:211"}, "properties": {"repobilityId": "a7548ddb56530c4a", "scanner": "scanner-primary", "fingerprint": "dbb82783020e6378", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-b840c321f24c1017", "level": "none", "message": {"text": "Commented-code block (7 lines) in tests/test_provider_model_context_metadata.py:263"}, "properties": {"repobilityId": "2e10e666702e094a", "scanner": "scanner-primary", "fingerprint": "b840c321f24c1017", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3df278f9074a64ee", "level": "note", "message": {"text": "Legacy-named symbol `inline_rich_response_v1` in tests/test_rich_response_prompt_inventory.py:125"}, "properties": {"repobilityId": "f07308fba6ae18d1", "scanner": "scanner-primary", "fingerprint": "3df278f9074a64ee", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-5226853ecaa97758", "level": "note", "message": {"text": "Legacy-named symbol `inline_rich_response_v1` in tests/test_rich_response_streaming.py:121"}, "properties": {"repobilityId": "7a47d126c9869c2e", "scanner": "scanner-primary", "fingerprint": "5226853ecaa97758", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-dc23b575ac3c726a", "level": "note", "message": {"text": "Legacy-named symbol `model_copy` in tests/test_custom_agent_client_tool_resync.py:95"}, "properties": {"repobilityId": "ff6c16a38d45c936", "scanner": "scanner-primary", "fingerprint": "dc23b575ac3c726a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-c7df803d39cd3eda", "level": "note", "message": {"text": "Legacy-named symbol `_inline_rich_response_v1` in tests/test_article_image_flow.py:41"}, "properties": {"repobilityId": "1a0f923765b0568b", "scanner": "scanner-primary", "fingerprint": "c7df803d39cd3eda", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-f16076a7de1ac908", "level": "note", "message": {"text": "Legacy-named symbol `inline_rich_response_v1` in tests/test_client_invocation_isolation.py:181"}, "properties": {"repobilityId": "e0c532562999b4db", "scanner": "scanner-primary", "fingerprint": "f16076a7de1ac908", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-027ce06d41b15f6e", "level": "note", "message": {"text": "Legacy-named symbol `inline_rich_response_v1` in tests/test_message_history_pipeline.py:320"}, "properties": {"repobilityId": "46dceefbf37a6ed6", "scanner": "scanner-primary", "fingerprint": "027ce06d41b15f6e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-163a9e612b8467a4", "level": "note", "message": {"text": "Legacy-named symbol `_inline_rich_response_v1` in tests/test_rich_placement.py:133"}, "properties": {"repobilityId": "971efd11b712a6ec", "scanner": "scanner-primary", "fingerprint": "163a9e612b8467a4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-dc351f8a039e340b", "level": "note", "message": {"text": "Legacy-named symbol `is_v1` in tests/test_demo_plan_widget.py:533"}, "properties": {"repobilityId": "0da71369f26b173f", "scanner": "scanner-primary", "fingerprint": "dc351f8a039e340b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-4475e8b6eac11bcf", "level": "note", "message": {"text": "Legacy-named symbol `_inline_rich_response_v1` in tests/test_rich_response_metadata.py:60"}, "properties": {"repobilityId": "337d7353763509e9", "scanner": "scanner-primary", "fingerprint": "4475e8b6eac11bcf", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-a4ff75219486d40b", "level": "none", "message": {"text": "Commented-code block (8 lines) in tests/test_history_provider.py:143"}, "properties": {"repobilityId": "426104b414fd6e7c", "scanner": "scanner-primary", "fingerprint": "a4ff75219486d40b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fb6fb236d021a6b7", "level": "note", "message": {"text": "Legacy-named symbol `client__old` in tests/test_multi_sidecar_hardening.py:883"}, "properties": {"repobilityId": "d24e97439c338983", "scanner": "scanner-primary", "fingerprint": "fb6fb236d021a6b7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-59f5d336b12a448c", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/test_rag_agent.py:225"}, "properties": {"repobilityId": "5e6f7eeb661c0366", "scanner": "scanner-primary", "fingerprint": "59f5d336b12a448c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7e2adfb8098a71bd", "level": "note", "message": {"text": "Legacy-named symbol `model_copy` in app/ai/deferred_tool_binding.py:43"}, "properties": {"repobilityId": "a1af211e7b629a00", "scanner": "scanner-primary", "fingerprint": "7e2adfb8098a71bd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-0ba54d60d2c73fb3", "level": "note", "message": {"text": "Legacy-named symbol `inline_rich_response_v1` in app/ai/schemas.py:184"}, "properties": {"repobilityId": "115d4256f23a98b1", "scanner": "scanner-primary", "fingerprint": "0ba54d60d2c73fb3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-b3113a45b95039c8", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/ai/client_tool_catalog.py:212"}, "properties": {"repobilityId": "e539ef7cebd64b44", "scanner": "scanner-primary", "fingerprint": "b3113a45b95039c8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-506d8cc7e96cdc2b", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/ai/tool_execution.py:838"}, "properties": {"repobilityId": "9a105f2cfae0b87d", "scanner": "scanner-primary", "fingerprint": "506d8cc7e96cdc2b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1f23dbc675c997a8", "level": "note", "message": {"text": "Legacy-named symbol `inline_rich_response_v1` in app/ai/graph.py:109"}, "properties": {"repobilityId": "6484c850e8cce5a9", "scanner": "scanner-primary", "fingerprint": "1f23dbc675c997a8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-9466a07f4e115504", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/ai/graph.py:1376"}, "properties": {"repobilityId": "6e867e27e83c0de5", "scanner": "scanner-primary", "fingerprint": "9466a07f4e115504", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e50c70ca4ddeea94", "level": "none", "message": {"text": "Commented-code block (8 lines) in app/ai/custom_agent_runtime.py:204"}, "properties": {"repobilityId": "cc0098cf4dc47d21", "scanner": "scanner-primary", "fingerprint": "e50c70ca4ddeea94", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4d914afb049f7e6c", "level": "none", "message": {"text": "Commented-code block (9 lines) in app/ai/tool_search_scoring.py:217"}, "properties": {"repobilityId": "1312825dff30736a", "scanner": "scanner-primary", "fingerprint": "4d914afb049f7e6c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-122b9196677b02f0", "level": "note", "message": {"text": "Stub function `_get_base_system_prompt` (body is just `pass`/`return`) \u2014 app/ai/agents/base_agent.py:1272"}, "properties": {"repobilityId": "d75607ccdc9b3c40", "scanner": "scanner-primary", "fingerprint": "122b9196677b02f0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "empty-handler", "dead-code"]}}, {"ruleId": "scanner-e68c3ec9caba98e7", "level": "note", "message": {"text": "Legacy-named symbol `model_copy` in app/ai/agents/custom_agent.py:267"}, "properties": {"repobilityId": "e43baec0effe5946", "scanner": "scanner-primary", "fingerprint": "e68c3ec9caba98e7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-9cde767f33d73589", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/ai/agents/custom_agent.py:172"}, "properties": {"repobilityId": "e0ce95e1cafc62bd", "scanner": "scanner-primary", "fingerprint": "9cde767f33d73589", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4e2477f86ef614c8", "level": "note", "message": {"text": "Legacy-named symbol `inline_rich_response_v1` in app/api/messages.py:227"}, "properties": {"repobilityId": "0026de9181deccf4", "scanner": "scanner-primary", "fingerprint": "4e2477f86ef614c8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-2c26bb2e625d5ef9", "level": "note", "message": {"text": "Legacy-named symbol `inline_rich_response_v1` in app/api/ai_sdk.py:476"}, "properties": {"repobilityId": "3a4af992b61d5440", "scanner": "scanner-primary", "fingerprint": "2c26bb2e625d5ef9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-653818ff064f171f", "level": "note", "message": {"text": "Legacy-named symbol `is_v1` in app/ui/rich_response.py:53"}, "properties": {"repobilityId": "800f58a93930aea4", "scanner": "scanner-primary", "fingerprint": "653818ff064f171f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-23fd0a7e4dbe00e8", "level": "note", "message": {"text": "Stub function `authenticate_user` (body is just `pass`/`return`) \u2014 app/interfaces/auth_service_interface.py:12"}, "properties": {"repobilityId": "f5df658f9e032e65", "scanner": "scanner-primary", "fingerprint": "23fd0a7e4dbe00e8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "empty-handler", "dead-code"]}}, {"ruleId": "scanner-6c34676a0a492b17", "level": "note", "message": {"text": "Legacy-named symbol `inline_rich_response_v1` in app/interfaces/message_service_interface.py:96"}, "properties": {"repobilityId": "887eda95f2884dc8", "scanner": "scanner-primary", "fingerprint": "6c34676a0a492b17", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-cd835a5648b4f34a", "level": "note", "message": {"text": "Legacy-named symbol `model_copy` in app/services/message_service.py:112"}, "properties": {"repobilityId": "a0b6872b7fc89177", "scanner": "scanner-primary", "fingerprint": "cd835a5648b4f34a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-5ff12492cdfdd828", "level": "note", "message": {"text": "Legacy-named symbol `config_copy` in app/services/mcp_service.py:108"}, "properties": {"repobilityId": "a622e50c1b54b45b", "scanner": "scanner-primary", "fingerprint": "5ff12492cdfdd828", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-1cfde86a6a8f4007", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/services/document_processing_service.py:280"}, "properties": {"repobilityId": "95ed99dbf181bd87", "scanner": "scanner-primary", "fingerprint": "1cfde86a6a8f4007", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5f052c39f6812b8d", "level": "note", "message": {"text": "Stub function `close` (body is just `pass`/`return`) \u2014 app/services/client_runtime_store.py:250"}, "properties": {"repobilityId": "c1af2f8e5811d439", "scanner": "scanner-primary", "fingerprint": "5f052c39f6812b8d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "empty-handler", "dead-code"]}}, {"ruleId": "scanner-76157d833ddf4031", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/services/document_index_service.py:177"}, "properties": {"repobilityId": "ca97a1fe76b95937", "scanner": "scanner-primary", "fingerprint": "76157d833ddf4031", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f81671f238a7e1cd", "level": "note", "message": {"text": "Legacy-named symbol `model_copy` in app/services/ai_service.py:118"}, "properties": {"repobilityId": "0708f21c1983b965", "scanner": "scanner-primary", "fingerprint": "f81671f238a7e1cd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-ea2c895620ecc56d", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/services/event_streaming/subagents.py:80"}, "properties": {"repobilityId": "34be62a111494432", "scanner": "scanner-primary", "fingerprint": "ea2c895620ecc56d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b0ea1f399fc9340a", "level": "note", "message": {"text": "Legacy-named symbol `inline_rich_response_v1` in app/services/event_streaming/ai_sdk_v6.py:38"}, "properties": {"repobilityId": "1b08f3dde9f380a6", "scanner": "scanner-primary", "fingerprint": "b0ea1f399fc9340a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-da6c4954bebcb20e", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/repositories/conversation_memory_summary.py:107"}, "properties": {"repobilityId": "75c40efdb4056525", "scanner": "scanner-primary", "fingerprint": "da6c4954bebcb20e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e442fb60183790f6", "level": "note", "message": {"text": "Legacy-named symbol `model_copy` in app/core/mcp_adapter_utils.py:233"}, "properties": {"repobilityId": "7209151af924c277", "scanner": "scanner-primary", "fingerprint": "e442fb60183790f6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-2ae30d65ac46c1ae", "level": "note", "message": {"text": "Legacy-named symbol `_inline_rich_response_v1` in app/core/response_constants.py:384"}, "properties": {"repobilityId": "30ab3d0c0cb829b2", "scanner": "scanner-primary", "fingerprint": "2ae30d65ac46c1ae", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-f0ae81d007cd3af6", "level": "note", "message": {"text": "Legacy-named symbol `_inline_rich_response_v1` in app/core/rich_placement.py:210"}, "properties": {"repobilityId": "21952195ed4311d7", "scanner": "scanner-primary", "fingerprint": "f0ae81d007cd3af6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-e7b3f0f2c4b50f0c", "level": "note", "message": {"text": "Stub function `upgrade` (body is just `pass`/`return`) \u2014 app/alembic/versions/1ce64a959f7d_merge_hitl_with_main.py:18"}, "properties": {"repobilityId": "62545e19258689a9", "scanner": "scanner-primary", "fingerprint": "e7b3f0f2c4b50f0c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "empty-handler", "dead-code"]}}, {"ruleId": "scanner-c81fb6d003ed2d92", "level": "note", "message": {"text": "Stub function `upgrade` (body is just `pass`/`return`) \u2014 app/alembic/versions/be1969e4b7f2_merge_heads.py:18"}, "properties": {"repobilityId": "0d970d12542b8e10", "scanner": "scanner-primary", "fingerprint": "c81fb6d003ed2d92", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "empty-handler", "dead-code"]}}, {"ruleId": "scanner-c3ffbbff1d71f22f", "level": "note", "message": {"text": "Stub function `upgrade` (body is just `pass`/`return`) \u2014 app/alembic/versions/m4n5o6p7q8r9_merge_allow_custom_model_with_device_branch.py:18"}, "properties": {"repobilityId": "2aed7fc9311cb0a7", "scanner": "scanner-primary", "fingerprint": "c3ffbbff1d71f22f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "empty-handler", "dead-code"]}}, {"ruleId": "scanner-41f2bd70df048dae", "level": "note", "message": {"text": "Legacy-named symbol `inline_rich_response_v1` in app/schemas/workflow.py:105"}, "properties": {"repobilityId": "bb909f1a33724fb2", "scanner": "scanner-primary", "fingerprint": "41f2bd70df048dae", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-dafbdb22b57a37d7", "level": "note", "message": {"text": "Legacy-named symbol `inline_rich_response_v1` in app/schemas/message.py:53"}, "properties": {"repobilityId": "15f1c27179182ef5", "scanner": "scanner-primary", "fingerprint": "dafbdb22b57a37d7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-b334d875f2339fa1", "level": "note", "message": {"text": "5 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "faa38682016f5d53", "scanner": "scanner-primary", "fingerprint": "b334d875f2339fa1", "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": "ac92fe26fb4df8b9", "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": "f5d9a8182bd76287", "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": "435fe3ebdcfab658", "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": "a97e0cbe7a1b2b80", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-33a6b62e30ce7ab4", "level": "note", "message": {"text": "Near-duplicate function bodies in 6 places"}, "properties": {"repobilityId": "ce5cc64ceb354f35", "scanner": "scanner-primary", "fingerprint": "33a6b62e30ce7ab4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-0027e313ade46c8f", "level": "note", "message": {"text": "Near-duplicate function bodies in 7 places"}, "properties": {"repobilityId": "3e168c4c973bbc87", "scanner": "scanner-primary", "fingerprint": "0027e313ade46c8f", "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": "3aeb167a77997ca9", "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": "743f79db9f2edc38", "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": "faa163961e93268d", "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": "bca42b852d9411c2", "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": "9304fad8c6893d0f", "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": "aa803acd664d180e", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "7445b22c259051e8", "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": "9e607c8dc2efb9ba", "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": "b6a866c1adac8956", "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": "dd466324665eb46d", "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": "c266addbe743644a", "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": "33dca4a678f5ea38", "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": "5e25aff34107246c", "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": "08bf763faca87917", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-fd00a6920d32cf4d", "level": "error", "message": {"text": "FastAPI POST `refresh` without auth dependency \u2014 client_backend/api/auth.py:188"}, "properties": {"repobilityId": "4ec8e3b3aff3b0c5", "scanner": "scanner-primary", "fingerprint": "fd00a6920d32cf4d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "client_backend/api/auth.py"}, "region": {"startLine": 188}}}]}, {"ruleId": "scanner-6796a1c6951b0179", "level": "error", "message": {"text": "FastAPI POST `restore_session` without auth dependency \u2014 client_backend/api/auth.py:242"}, "properties": {"repobilityId": "12b0641d58a26777", "scanner": "scanner-primary", "fingerprint": "6796a1c6951b0179", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "client_backend/api/auth.py"}, "region": {"startLine": 242}}}]}, {"ruleId": "scanner-dba43514781a089f", "level": "error", "message": {"text": "FastAPI POST `verify_local_token` without auth dependency \u2014 client_backend/api/auth.py:312"}, "properties": {"repobilityId": "5e2f1037bde98ee7", "scanner": "scanner-primary", "fingerprint": "dba43514781a089f", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "client_backend/api/auth.py"}, "region": {"startLine": 312}}}]}, {"ruleId": "scanner-67d73fa1827f1dda", "level": "error", "message": {"text": "FastAPI POST `create_feedback` without auth dependency \u2014 app/api/feedback.py:13"}, "properties": {"repobilityId": "73b2168d70626aa5", "scanner": "scanner-primary", "fingerprint": "67d73fa1827f1dda", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/api/feedback.py"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-04b5d291cde5fce1", "level": "error", "message": {"text": "FastAPI PUT `update_feedback` without auth dependency \u2014 app/api/feedback.py:76"}, "properties": {"repobilityId": "fc9a6252ca60d165", "scanner": "scanner-primary", "fingerprint": "04b5d291cde5fce1", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/api/feedback.py"}, "region": {"startLine": 76}}}]}, {"ruleId": "scanner-3585ade34e1c8a00", "level": "error", "message": {"text": "FastAPI POST `add_server` without auth dependency \u2014 app/api/mcp.py:65"}, "properties": {"repobilityId": "724a88b082af0ff9", "scanner": "scanner-primary", "fingerprint": "3585ade34e1c8a00", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/api/mcp.py"}, "region": {"startLine": 65}}}]}, {"ruleId": "scanner-b1883594dad7cf98", "level": "error", "message": {"text": "FastAPI POST `add_server_from_url` without auth dependency \u2014 app/api/mcp.py:78"}, "properties": {"repobilityId": "b476e9c9e53e8551", "scanner": "scanner-primary", "fingerprint": "b1883594dad7cf98", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/api/mcp.py"}, "region": {"startLine": 78}}}]}, {"ruleId": "scanner-86b878967f0e6b77", "level": "error", "message": {"text": "FastAPI DELETE `remove_server` without auth dependency \u2014 app/api/mcp.py:91"}, "properties": {"repobilityId": "a2a9b217111734e1", "scanner": "scanner-primary", "fingerprint": "86b878967f0e6b77", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/api/mcp.py"}, "region": {"startLine": 91}}}]}, {"ruleId": "scanner-17d59473d219d23c", "level": "error", "message": {"text": "FastAPI PATCH `toggle_server` without auth dependency \u2014 app/api/mcp.py:103"}, "properties": {"repobilityId": "7557b52c5f3d2352", "scanner": "scanner-primary", "fingerprint": "17d59473d219d23c", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/api/mcp.py"}, "region": {"startLine": 103}}}]}, {"ruleId": "scanner-1d5622a1a0318e2c", "level": "error", "message": {"text": "FastAPI POST `execute_tool` without auth dependency \u2014 app/api/mcp.py:144"}, "properties": {"repobilityId": "04b8c827721b3e8a", "scanner": "scanner-primary", "fingerprint": "1d5622a1a0318e2c", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/api/mcp.py"}, "region": {"startLine": 144}}}]}, {"ruleId": "scanner-8d68e5df22656af2", "level": "error", "message": {"text": "FastAPI POST `refresh_token` without auth dependency \u2014 app/api/auth.py:47"}, "properties": {"repobilityId": "6a371c3933d2efc2", "scanner": "scanner-primary", "fingerprint": "8d68e5df22656af2", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/api/auth.py"}, "region": {"startLine": 47}}}]}, {"ruleId": "scanner-bbb77005ae0b76b1", "level": "error", "message": {"text": "FastAPI POST `generate_conversation_title` without auth dependency \u2014 app/api/conversations.py:32"}, "properties": {"repobilityId": "8760331460f5faef", "scanner": "scanner-primary", "fingerprint": "bbb77005ae0b76b1", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/api/conversations.py"}, "region": {"startLine": 32}}}]}, {"ruleId": "scanner-8087592c65c5e88f", "level": "error", "message": {"text": "FastAPI POST `create_conversation` without auth dependency \u2014 app/api/conversations.py:48"}, "properties": {"repobilityId": "f02a8cd5d350de94", "scanner": "scanner-primary", "fingerprint": "8087592c65c5e88f", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/api/conversations.py"}, "region": {"startLine": 48}}}]}, {"ruleId": "scanner-3d189cf2511644a4", "level": "error", "message": {"text": "FastAPI PATCH `update_conversation` without auth dependency \u2014 app/api/conversations.py:134"}, "properties": {"repobilityId": "f3da29512d5c7c35", "scanner": "scanner-primary", "fingerprint": "3d189cf2511644a4", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/api/conversations.py"}, "region": {"startLine": 134}}}]}, {"ruleId": "scanner-65ba2831ea9fa295", "level": "error", "message": {"text": "FastAPI DELETE `delete_conversation` without auth dependency \u2014 app/api/conversations.py:147"}, "properties": {"repobilityId": "20d1dec2b00ffcf9", "scanner": "scanner-primary", "fingerprint": "65ba2831ea9fa295", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/api/conversations.py"}, "region": {"startLine": 147}}}]}, {"ruleId": "scanner-7823c42dc42d956e", "level": "error", "message": {"text": "FastAPI POST `create_task_plan` without auth dependency \u2014 app/api/task_plans.py:24"}, "properties": {"repobilityId": "ff8e81e634cfb67a", "scanner": "scanner-primary", "fingerprint": "7823c42dc42d956e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/api/task_plans.py"}, "region": {"startLine": 24}}}]}, {"ruleId": "scanner-f483c839df39b9ed", "level": "error", "message": {"text": "FastAPI POST `create_task_plan_manual` without auth dependency \u2014 app/api/task_plans.py:53"}, "properties": {"repobilityId": "36a5fc4dc5b15177", "scanner": "scanner-primary", "fingerprint": "f483c839df39b9ed", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/api/task_plans.py"}, "region": {"startLine": 53}}}]}, {"ruleId": "scanner-2a6bd8f598987c9b", "level": "error", "message": {"text": "FastAPI PATCH `update_task_plan` without auth dependency \u2014 app/api/task_plans.py:128"}, "properties": {"repobilityId": "46ac6f531931e394", "scanner": "scanner-primary", "fingerprint": "2a6bd8f598987c9b", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/api/task_plans.py"}, "region": {"startLine": 128}}}]}, {"ruleId": "scanner-28582bc653a2eb27", "level": "error", "message": {"text": "FastAPI POST `complete_task_plan` without auth dependency \u2014 app/api/task_plans.py:155"}, "properties": {"repobilityId": "34efee7e68206318", "scanner": "scanner-primary", "fingerprint": "28582bc653a2eb27", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/api/task_plans.py"}, "region": {"startLine": 155}}}]}, {"ruleId": "scanner-e299dc9e66641ceb", "level": "error", "message": {"text": "FastAPI DELETE `delete_task_plan` without auth dependency \u2014 app/api/task_plans.py:174"}, "properties": {"repobilityId": "095b1d92baa4f771", "scanner": "scanner-primary", "fingerprint": "e299dc9e66641ceb", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/api/task_plans.py"}, "region": {"startLine": 174}}}]}, {"ruleId": "scanner-891f0f280fcca59e", "level": "error", "message": {"text": "FastAPI POST `create_message` without auth dependency \u2014 app/api/messages.py:109"}, "properties": {"repobilityId": "9f8cd2e199777bf7", "scanner": "scanner-primary", "fingerprint": "891f0f280fcca59e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/api/messages.py"}, "region": {"startLine": 109}}}]}, {"ruleId": "scanner-00f208191f3037d6", "level": "error", "message": {"text": "FastAPI POST `create_message_stream` without auth dependency \u2014 app/api/messages.py:142"}, "properties": {"repobilityId": "3f6800d35861f6b9", "scanner": "scanner-primary", "fingerprint": "00f208191f3037d6", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/api/messages.py"}, "region": {"startLine": 142}}}]}, {"ruleId": "scanner-63f484d1801794d5", "level": "error", "message": {"text": "FastAPI POST `stop_message_generation` without auth dependency \u2014 app/api/messages.py:164"}, "properties": {"repobilityId": "3adee5b28984068c", "scanner": "scanner-primary", "fingerprint": "63f484d1801794d5", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/api/messages.py"}, "region": {"startLine": 164}}}]}, {"ruleId": "scanner-12796a6650801e93", "level": "error", "message": {"text": "FastAPI POST `resume_interrupt` without auth dependency \u2014 app/api/messages.py:198"}, "properties": {"repobilityId": "4df5829d22b14079", "scanner": "scanner-primary", "fingerprint": "12796a6650801e93", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/api/messages.py"}, "region": {"startLine": 198}}}]}, {"ruleId": "scanner-4afa9248c1488d26", "level": "error", "message": {"text": "FastAPI POST `create_conversation_ai_sdk` without auth dependency \u2014 app/api/ai_sdk.py:682"}, "properties": {"repobilityId": "32239776e9a24a21", "scanner": "scanner-primary", "fingerprint": "4afa9248c1488d26", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/api/ai_sdk.py"}, "region": {"startLine": 682}}}]}, {"ruleId": "scanner-518a2ca3ae660b2b", "level": "error", "message": {"text": "FastAPI PATCH `update_conversation_ai_sdk` without auth dependency \u2014 app/api/ai_sdk.py:752"}, "properties": {"repobilityId": "db6a99e5b154e019", "scanner": "scanner-primary", "fingerprint": "518a2ca3ae660b2b", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/api/ai_sdk.py"}, "region": {"startLine": 752}}}]}, {"ruleId": "scanner-3bcf5c8a32bba12d", "level": "error", "message": {"text": "FastAPI DELETE `delete_conversation_ai_sdk` without auth dependency \u2014 app/api/ai_sdk.py:776"}, "properties": {"repobilityId": "9e207b625ef4cbd8", "scanner": "scanner-primary", "fingerprint": "3bcf5c8a32bba12d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/api/ai_sdk.py"}, "region": {"startLine": 776}}}]}, {"ruleId": "scanner-4b1af9ae0f8ba19b", "level": "error", "message": {"text": "FastAPI POST `<anonymous>` without auth dependency \u2014 app/api/ai_sdk.py:855"}, "properties": {"repobilityId": "66296d577eb3492b", "scanner": "scanner-primary", "fingerprint": "4b1af9ae0f8ba19b", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/api/ai_sdk.py"}, "region": {"startLine": 855}}}]}, {"ruleId": "scanner-39ddfc77ee87914e", "level": "error", "message": {"text": "FastAPI POST `<anonymous>` without auth dependency \u2014 app/api/ai_sdk.py:874"}, "properties": {"repobilityId": "60509f00e2912d11", "scanner": "scanner-primary", "fingerprint": "39ddfc77ee87914e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/api/ai_sdk.py"}, "region": {"startLine": 874}}}]}, {"ruleId": "scanner-0c724d72a9892ce8", "level": "error", "message": {"text": "FastAPI POST `<anonymous>` without auth dependency \u2014 app/api/ai_sdk.py:941"}, "properties": {"repobilityId": "c02867b3f3aeb5e8", "scanner": "scanner-primary", "fingerprint": "0c724d72a9892ce8", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/api/ai_sdk.py"}, "region": {"startLine": 941}}}]}, {"ruleId": "scanner-c8c78b0321a26552", "level": "error", "message": {"text": "FastAPI POST `create_custom_agent` without auth dependency \u2014 app/api/custom_agents.py:41"}, "properties": {"repobilityId": "131693cc425016bb", "scanner": "scanner-primary", "fingerprint": "c8c78b0321a26552", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/api/custom_agents.py"}, "region": {"startLine": 41}}}]}, {"ruleId": "scanner-dc67fb4e0027bf56", "level": "error", "message": {"text": "FastAPI PATCH `update_custom_agent` without auth dependency \u2014 app/api/custom_agents.py:79"}, "properties": {"repobilityId": "fc77bc3aeb3c2802", "scanner": "scanner-primary", "fingerprint": "dc67fb4e0027bf56", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/api/custom_agents.py"}, "region": {"startLine": 79}}}]}, {"ruleId": "scanner-f90afc4a24cadfea", "level": "error", "message": {"text": "FastAPI DELETE `delete_custom_agent` without auth dependency \u2014 app/api/custom_agents.py:96"}, "properties": {"repobilityId": "f3871f7450ee796f", "scanner": "scanner-primary", "fingerprint": "f90afc4a24cadfea", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/api/custom_agents.py"}, "region": {"startLine": 96}}}]}, {"ruleId": "scanner-c98e604e3faac7d7", "level": "error", "message": {"text": "FastAPI POST `upload_document` without auth dependency \u2014 app/api/documents.py:261"}, "properties": {"repobilityId": "f034ba709412493e", "scanner": "scanner-primary", "fingerprint": "c98e604e3faac7d7", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/api/documents.py"}, "region": {"startLine": 261}}}]}, {"ruleId": "scanner-69a86b76a4a39fbe", "level": "error", "message": {"text": "FastAPI POST `upload_documents` without auth dependency \u2014 app/api/documents.py:318"}, "properties": {"repobilityId": "890569f756d89be6", "scanner": "scanner-primary", "fingerprint": "69a86b76a4a39fbe", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/api/documents.py"}, "region": {"startLine": 318}}}]}, {"ruleId": "scanner-7ac6e9f6677bede9", "level": "error", "message": {"text": "FastAPI PUT `update_document` without auth dependency \u2014 app/api/documents.py:448"}, "properties": {"repobilityId": "5d5c58bb7a99a31c", "scanner": "scanner-primary", "fingerprint": "7ac6e9f6677bede9", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/api/documents.py"}, "region": {"startLine": 448}}}]}, {"ruleId": "scanner-837b014be4711942", "level": "error", "message": {"text": "FastAPI DELETE `delete_document` without auth dependency \u2014 app/api/documents.py:471"}, "properties": {"repobilityId": "40f0b2c8f68ae06a", "scanner": "scanner-primary", "fingerprint": "837b014be4711942", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/api/documents.py"}, "region": {"startLine": 471}}}]}, {"ruleId": "scanner-5baa8971ebe192a1", "level": "note", "message": {"text": "Unused endpoint: GET /"}, "properties": {"repobilityId": "bcdda36f2463a358", "scanner": "scanner-primary", "fingerprint": "5baa8971ebe192a1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a12f85b46010cb53", "level": "note", "message": {"text": "Unused endpoint: GET /{name}"}, "properties": {"repobilityId": "72f2854c1b5fda32", "scanner": "scanner-primary", "fingerprint": "a12f85b46010cb53", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-90355f98f9f4dbf6", "level": "note", "message": {"text": "Unused endpoint: PATCH /{name}/toggle"}, "properties": {"repobilityId": "99c24cded4b286db", "scanner": "scanner-primary", "fingerprint": "90355f98f9f4dbf6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d69b208312536d0c", "level": "note", "message": {"text": "Unused endpoint: POST /reload"}, "properties": {"repobilityId": "c7e3b180b978aaf2", "scanner": "scanner-primary", "fingerprint": "d69b208312536d0c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-634c359ef65e2ade", "level": "note", "message": {"text": "Unused endpoint: GET /device"}, "properties": {"repobilityId": "0d6687ccde0177b7", "scanner": "scanner-primary", "fingerprint": "634c359ef65e2ade", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-282c9c5199668445", "level": "note", "message": {"text": "Unused endpoint: GET /servers"}, "properties": {"repobilityId": "ec24b669fc25126d", "scanner": "scanner-primary", "fingerprint": "282c9c5199668445", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a78c34be8efc15ad", "level": "note", "message": {"text": "Unused endpoint: GET /servers/{server_name}"}, "properties": {"repobilityId": "628f9a39a60aedf2", "scanner": "scanner-primary", "fingerprint": "a78c34be8efc15ad", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-510c1e485a035f9e", "level": "note", "message": {"text": "Unused endpoint: POST /servers"}, "properties": {"repobilityId": "60a7c4c2253038b4", "scanner": "scanner-primary", "fingerprint": "510c1e485a035f9e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9903625527fdab7f", "level": "note", "message": {"text": "Unused endpoint: POST /servers/from-url"}, "properties": {"repobilityId": "d24df2a715777553", "scanner": "scanner-primary", "fingerprint": "9903625527fdab7f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7e91c6c440220150", "level": "note", "message": {"text": "Unused endpoint: DELETE /servers/{server_name}"}, "properties": {"repobilityId": "98b05dfa23a19c7a", "scanner": "scanner-primary", "fingerprint": "7e91c6c440220150", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b9b7adc65d4b8b35", "level": "note", "message": {"text": "Unused endpoint: PATCH /servers/{server_name}/toggle"}, "properties": {"repobilityId": "ab59bad2734472d5", "scanner": "scanner-primary", "fingerprint": "b9b7adc65d4b8b35", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-582b00fca2796501", "level": "note", "message": {"text": "Unused endpoint: GET /tools"}, "properties": {"repobilityId": "06b34a34aa7d9b09", "scanner": "scanner-primary", "fingerprint": "582b00fca2796501", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-819d44ca072f5f69", "level": "note", "message": {"text": "Unused endpoint: GET /tools/{tool_name}"}, "properties": {"repobilityId": "f1c302d53ddfaeca", "scanner": "scanner-primary", "fingerprint": "819d44ca072f5f69", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-957198cfbf4fb717", "level": "note", "message": {"text": "Unused endpoint: POST /tools/{tool_name}/execute"}, "properties": {"repobilityId": "21e7dd845283a505", "scanner": "scanner-primary", "fingerprint": "957198cfbf4fb717", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8d16b1bb2723f51e", "level": "note", "message": {"text": "Unused endpoint: POST /signup"}, "properties": {"repobilityId": "64407463d3b2ac57", "scanner": "scanner-primary", "fingerprint": "8d16b1bb2723f51e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-618721b912bad1c2", "level": "note", "message": {"text": "Unused endpoint: POST /login"}, "properties": {"repobilityId": "a9b813ccd873d1e6", "scanner": "scanner-primary", "fingerprint": "618721b912bad1c2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7ce17d6b092a81ca", "level": "note", "message": {"text": "Unused endpoint: POST /refresh"}, "properties": {"repobilityId": "e3792670773f2b67", "scanner": "scanner-primary", "fingerprint": "7ce17d6b092a81ca", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-99fc36db98c134ce", "level": "note", "message": {"text": "Unused endpoint: POST /logout"}, "properties": {"repobilityId": "b6b7f8eba7956b74", "scanner": "scanner-primary", "fingerprint": "99fc36db98c134ce", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-947ea837b34b3691", "level": "note", "message": {"text": "Unused endpoint: POST /restore"}, "properties": {"repobilityId": "8fe2df8e74c7a8a5", "scanner": "scanner-primary", "fingerprint": "947ea837b34b3691", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1daa53f3c56e6b16", "level": "note", "message": {"text": "Unused endpoint: GET /session"}, "properties": {"repobilityId": "ac5ed82e41099ab4", "scanner": "scanner-primary", "fingerprint": "1daa53f3c56e6b16", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-841e50bf821e4158", "level": "note", "message": {"text": "Unused endpoint: GET /users"}, "properties": {"repobilityId": "d1bdfdde9e1555b9", "scanner": "scanner-primary", "fingerprint": "841e50bf821e4158", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a5009a8fe841541d", "level": "note", "message": {"text": "Unused endpoint: POST /verify-local-token"}, "properties": {"repobilityId": "ecfe559f14e0e705", "scanner": "scanner-primary", "fingerprint": "a5009a8fe841541d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-72b507a339d976dc", "level": "note", "message": {"text": "Unused endpoint: POST /generate-title"}, "properties": {"repobilityId": "af54a807f94e1feb", "scanner": "scanner-primary", "fingerprint": "72b507a339d976dc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7a009b1a56794f45", "level": "note", "message": {"text": "Unused endpoint: POST /"}, "properties": {"repobilityId": "09500ed5565c5caf", "scanner": "scanner-primary", "fingerprint": "7a009b1a56794f45", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-eb4965f4d227f8b3", "level": "note", "message": {"text": "Unused endpoint: GET /{conversation_id}"}, "properties": {"repobilityId": "495f856c14512672", "scanner": "scanner-primary", "fingerprint": "eb4965f4d227f8b3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-593c6efeb9f4cfb8", "level": "note", "message": {"text": "Unused endpoint: GET /{conversation_id}/messages"}, "properties": {"repobilityId": "efccb1a4e5cbbfbf", "scanner": "scanner-primary", "fingerprint": "593c6efeb9f4cfb8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8a38f52aeddc3aad", "level": "note", "message": {"text": "Unused endpoint: PATCH /{conversation_id}"}, "properties": {"repobilityId": "732b8870a9199196", "scanner": "scanner-primary", "fingerprint": "8a38f52aeddc3aad", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ad72d180247f16e2", "level": "note", "message": {"text": "Unused endpoint: DELETE /{conversation_id}"}, "properties": {"repobilityId": "a2b120bd384b0c88", "scanner": "scanner-primary", "fingerprint": "ad72d180247f16e2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d18411a066b7e2c1", "level": "note", "message": {"text": "Unused endpoint: GET /users/{user_id}"}, "properties": {"repobilityId": "4332be13a06c8642", "scanner": "scanner-primary", "fingerprint": "d18411a066b7e2c1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d5264a6fe9b2cb8a", "level": "note", "message": {"text": "Unused endpoint: ANY /providers"}, "properties": {"repobilityId": "f248968136376dc1", "scanner": "scanner-primary", "fingerprint": "d5264a6fe9b2cb8a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-03ffcff166a3f657", "level": "note", "message": {"text": "Unused endpoint: ANY /providers/{provider_type}"}, "properties": {"repobilityId": "52b5c8c3a5c401ad", "scanner": "scanner-primary", "fingerprint": "03ffcff166a3f657", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5dafb6d2316ba59d", "level": "note", "message": {"text": "Unused endpoint: POST /providers/{provider_type}/validate"}, "properties": {"repobilityId": "ffba3f4bf771d8da", "scanner": "scanner-primary", "fingerprint": "5dafb6d2316ba59d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5b213f922ec4d7c9", "level": "note", "message": {"text": "Unused endpoint: GET /providers/{provider_type}/models"}, "properties": {"repobilityId": "12b3fbeaff663b8b", "scanner": "scanner-primary", "fingerprint": "5b213f922ec4d7c9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ac5389a8c69cf351", "level": "note", "message": {"text": "Unused endpoint: ANY /model-config"}, "properties": {"repobilityId": "454b10c8edd774f8", "scanner": "scanner-primary", "fingerprint": "ac5389a8c69cf351", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7043f03577b0a2ef", "level": "note", "message": {"text": "Unused endpoint: GET /model-config/options"}, "properties": {"repobilityId": "dca8803e91a54c56", "scanner": "scanner-primary", "fingerprint": "7043f03577b0a2ef", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3032a1486fad8724", "level": "note", "message": {"text": "Unused endpoint: POST /model-config/reset"}, "properties": {"repobilityId": "971baca5b3b0e000", "scanner": "scanner-primary", "fingerprint": "3032a1486fad8724", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-acb6c9faa77362e4", "level": "note", "message": {"text": "Unused endpoint: ANY /custom-agents"}, "properties": {"repobilityId": "436f530295b97196", "scanner": "scanner-primary", "fingerprint": "acb6c9faa77362e4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8ad88af5615e6631", "level": "note", "message": {"text": "Unused endpoint: GET /custom-agents/options"}, "properties": {"repobilityId": "218bb71b4e72c4e0", "scanner": "scanner-primary", "fingerprint": "8ad88af5615e6631", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-572b4adbfc48007a", "level": "note", "message": {"text": "Unused endpoint: ANY /custom-agents/{custom_agent_id}"}, "properties": {"repobilityId": "d7cd44de143d1e3f", "scanner": "scanner-primary", "fingerprint": "572b4adbfc48007a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-83bfc0ceb783c89f", "level": "note", "message": {"text": "Unused endpoint: ANY /ai/custom-agents"}, "properties": {"repobilityId": "5620a0e47fd02b4e", "scanner": "scanner-primary", "fingerprint": "83bfc0ceb783c89f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7f5fc524d7b2d212", "level": "note", "message": {"text": "Unused endpoint: GET /ai/custom-agents/options"}, "properties": {"repobilityId": "1718291cead8be02", "scanner": "scanner-primary", "fingerprint": "7f5fc524d7b2d212", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f208086edcb85c9c", "level": "note", "message": {"text": "Unused endpoint: ANY /ai/custom-agents/{custom_agent_id}"}, "properties": {"repobilityId": "24da1c36ee44ac6f", "scanner": "scanner-primary", "fingerprint": "f208086edcb85c9c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7cab98cef939ad4e", "level": "note", "message": {"text": "Unused endpoint: ANY /conversations/{conversation_id}/custom-agents"}, "properties": {"repobilityId": "c0a2f3b4bc205fdd", "scanner": "scanner-primary", "fingerprint": "7cab98cef939ad4e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3bd3de8d8e97738c", "level": "note", "message": {"text": "Unused endpoint: ANY /ai/conversations/{conversation_id}/custom-agents"}, "properties": {"repobilityId": "3eafe46f66a22f2f", "scanner": "scanner-primary", "fingerprint": "3bd3de8d8e97738c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4e9d5c9a953cfbd8", "level": "note", "message": {"text": "Unused endpoint: ANY /messages/{message_id}/feedbacks"}, "properties": {"repobilityId": "ad07452f214871a0", "scanner": "scanner-primary", "fingerprint": "4e9d5c9a953cfbd8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3b3ba9c6279395e0", "level": "note", "message": {"text": "Unused endpoint: GET /messages/{message_id}/feedbacks/stats"}, "properties": {"repobilityId": "ee4977050db84c6c", "scanner": "scanner-primary", "fingerprint": "3b3ba9c6279395e0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-49688f5cc77f32f2", "level": "note", "message": {"text": "Unused endpoint: GET /messages/{message_id}/feedbacks/user"}, "properties": {"repobilityId": "b5245e8c2b2f7813", "scanner": "scanner-primary", "fingerprint": "49688f5cc77f32f2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1a9672b6004f5646", "level": "note", "message": {"text": "Unused endpoint: PUT /messages/{message_id}/feedbacks/{feedback_id}"}, "properties": {"repobilityId": "40494a011f25914c", "scanner": "scanner-primary", "fingerprint": "1a9672b6004f5646", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d9d148f09418b0bc", "level": "note", "message": {"text": "Unused endpoint: ANY /conversations/{conversation_id}/task-plans"}, "properties": {"repobilityId": "25f088ff3c644142", "scanner": "scanner-primary", "fingerprint": "d9d148f09418b0bc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c4459ff7de1ec855", "level": "note", "message": {"text": "Unused endpoint: POST /conversations/{conversation_id}/task-plans/manual"}, "properties": {"repobilityId": "4d3f8778c9c3730c", "scanner": "scanner-primary", "fingerprint": "c4459ff7de1ec855", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}