{"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-4e6f50f7b5c83aea", "name": "Possibly dead Python function: generate_uuid", "shortDescription": {"text": "Possibly dead Python function: generate_uuid"}, "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-9afde1cae06ebf41", "name": "Possibly dead Python function: save_pipeline_state", "shortDescription": {"text": "Possibly dead Python function: save_pipeline_state"}, "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-7989375fdbcd32b2", "name": "Possibly dead Python function: make_event", "shortDescription": {"text": "Possibly dead Python function: make_event"}, "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-a9e74852c8db0e0b", "name": "Possibly dead Python function: iso_now", "shortDescription": {"text": "Possibly dead Python function: iso_now"}, "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-22b35338797ee4b5", "name": "Possibly dead Python function: format_datetime_iso", "shortDescription": {"text": "Possibly dead Python function: format_datetime_iso"}, "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-b74a758a381d349c", "name": "Possibly dead Python function: extract_tech_terms", "shortDescription": {"text": "Possibly dead Python function: extract_tech_terms"}, "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-23cf70efb44004d5", "name": "Possibly dead Python function: slice_contrast_text", "shortDescription": {"text": "Possibly dead Python function: slice_contrast_text"}, "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-084cdac57e7c94d7", "name": "Possibly dead Python function: generate_combined_independent_claim", "shortDescription": {"text": "Possibly dead Python function: generate_combined_independent_claim"}, "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-ca98c6287a1747ee", "name": "Possibly dead Python function: generate_creativity_strategy", "shortDescription": {"text": "Possibly dead Python function: generate_creativity_strategy"}, "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-00832db37c6d4b07", "name": "Possibly dead Python function: generate_sufficiency_strategy", "shortDescription": {"text": "Possibly dead Python function: generate_sufficiency_strategy"}, "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-b2a1d1a63a918a8f", "name": "Possibly dead Python function: generate_support_clarity_strategy", "shortDescription": {"text": "Possibly dead Python function: generate_support_clarity_strategy"}, "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-a6bf791c4f849647", "name": "Possibly dead Python function: generate_argument_draft", "shortDescription": {"text": "Possibly dead Python function: generate_argument_draft"}, "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-40796d0dda855f79", "name": "Possibly dead Python function: v2_answer", "shortDescription": {"text": "Possibly dead Python function: v2_answer"}, "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-90c7685d2be1f412", "name": "Possibly dead Python function: generate_uuid", "shortDescription": {"text": "Possibly dead Python function: generate_uuid"}, "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-7e4121129d1024f8", "name": "Possibly dead Python function: search_epub_keyword_with_page", "shortDescription": {"text": "Possibly dead Python function: search_epub_keyword_with_page"}, "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-5c7e5175829df7c7", "name": "Possibly dead Python function: extract_tech_terms", "shortDescription": {"text": "Possibly dead Python function: extract_tech_terms"}, "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-53c97f646812c1cc", "name": "Possibly dead Python function: slice_contrast_text", "shortDescription": {"text": "Possibly dead Python function: slice_contrast_text"}, "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-6f16ea2c53d91dcd", "name": "Possibly dead Python function: generate_combined_independent_claim", "shortDescription": {"text": "Possibly dead Python function: generate_combined_independent_claim"}, "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-51a1e11a5cecc232", "name": "Possibly dead Python function: generate_creativity_strategy", "shortDescription": {"text": "Possibly dead Python function: generate_creativity_strategy"}, "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-bb7b663c34cd9d01", "name": "Possibly dead Python function: generate_sufficiency_strategy", "shortDescription": {"text": "Possibly dead Python function: generate_sufficiency_strategy"}, "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-6a743a7a349191e8", "name": "Possibly dead Python function: generate_support_clarity_strategy", "shortDescription": {"text": "Possibly dead Python function: generate_support_clarity_strategy"}, "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-ab0a30ab045cb476", "name": "Icon-only button without accessible name \u2014 qwen-weiwei/frontend/src/views/OaWorkspaceView.vue:56", "shortDescription": {"text": "Icon-only button without accessible name \u2014 qwen-weiwei/frontend/src/views/OaWorkspaceView.vue:56"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e7ba9ef642f445aa", "name": "Icon-only button without accessible name \u2014 weiwei/frontend/src/views/OaWorkspaceView.vue:56", "shortDescription": {"text": "Icon-only button without accessible name \u2014 weiwei/frontend/src/views/OaWorkspaceView.vue:56"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3f39f4813ff794ff", "name": "Privileged port 29 in use", "shortDescription": {"text": "Privileged port 29 in use"}, "fullDescription": {"text": "Port 29 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-827b1e7ac132b863", "name": "Privileged port 84 in use", "shortDescription": {"text": "Privileged port 84 in use"}, "fullDescription": {"text": "Port 84 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3fe86bb73f5ff36b", "name": "Dockerfile runs as root: qwen-weiwei/frontend/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: qwen-weiwei/frontend/Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7e332a039200a532", "name": "Docker base image is tag-pinned but not digest-pinned: node:18-alpine", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: node:18-alpine"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a005959e9a58fb54", "name": "Docker base image is tag-pinned but not digest-pinned: nginx:stable-alpine", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: nginx:stable-alpine"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4a9afb0aeabcac5e", "name": "Dockerfile runs as root: qwen-weiwei/backend/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: qwen-weiwei/backend/Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9658c028a71355cd", "name": "Docker base image is tag-pinned but not digest-pinned: python:3.10-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.10-slim"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5ee7b231067ab816", "name": "Dockerfile runs as root: weiwei/frontend/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: weiwei/frontend/Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2ac98bc0409925ec", "name": "Docker base image is tag-pinned but not digest-pinned: node:18-alpine", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: node:18-alpine"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e91569be09dd6fed", "name": "Docker base image is tag-pinned but not digest-pinned: nginx:stable-alpine", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: nginx:stable-alpine"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-80d9436bd171afe3", "name": "Dockerfile runs as root: weiwei/backend/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: weiwei/backend/Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-708dd7c18e23b4dc", "name": "Docker base image is tag-pinned but not digest-pinned: python:3.10-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.10-slim"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aa5acaa49eb8315b", "name": "Containers defined but no K8s/orchestration manifest found", "shortDescription": {"text": "Containers defined but no K8s/orchestration manifest found"}, "fullDescription": {"text": "Repo has Dockerfiles/compose but no Kubernetes/Nomad manifests. If the target deployment is K8s, the manifests may live in a separate ops repo."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-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-dd7fe392a896a07a", "name": "Possible secret in qwen-weiwei/docker-compose.qwen.yml", "shortDescription": {"text": "Possible secret in qwen-weiwei/docker-compose.qwen.yml"}, "fullDescription": {"text": "Detected pattern matching openai_or_anthropic_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-0f2209ba5bece1c0", "name": "Insecure pattern 'local_storage_auth_token' in qwen-weiwei/frontend/src/stores/appStore.js:105", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in qwen-weiwei/frontend/src/stores/appStore.js:105"}, "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-69a15d8e0dc870ae", "name": "Insecure pattern 'vue_v_html' in qwen-weiwei/frontend/src/views/DisclosureWorkspaceView.vue:220", "shortDescription": {"text": "Insecure pattern 'vue_v_html' in qwen-weiwei/frontend/src/views/DisclosureWorkspaceView.vue:220"}, "fullDescription": {"text": "Found a known-risky pattern (vue_v_html). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7028dab4d121888a", "name": "Insecure pattern 'domparser_html_parse' in qwen-weiwei/frontend/src/views/RAGChatView.vue:499", "shortDescription": {"text": "Insecure pattern 'domparser_html_parse' in qwen-weiwei/frontend/src/views/RAGChatView.vue:499"}, "fullDescription": {"text": "Found a known-risky pattern (domparser_html_parse). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4f44a2a22824769f", "name": "Insecure pattern 'vue_v_html' in qwen-weiwei/frontend/src/views/RAGChatView.vue:679", "shortDescription": {"text": "Insecure pattern 'vue_v_html' in qwen-weiwei/frontend/src/views/RAGChatView.vue:679"}, "fullDescription": {"text": "Found a known-risky pattern (vue_v_html). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b4522e2cc195cb33", "name": "Insecure pattern 'vue_v_html' in qwen-weiwei/frontend/src/views/OaWorkspaceView.vue:424", "shortDescription": {"text": "Insecure pattern 'vue_v_html' in qwen-weiwei/frontend/src/views/OaWorkspaceView.vue:424"}, "fullDescription": {"text": "Found a known-risky pattern (vue_v_html). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3095f0426945fa36", "name": "Possible secret in qwen-weiwei/backend/debug_d1_extraction.py", "shortDescription": {"text": "Possible secret in qwen-weiwei/backend/debug_d1_extraction.py"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-088630478f212f7b", "name": "Possible secret in qwen-weiwei/backend/investigate_parsing_issue.py", "shortDescription": {"text": "Possible secret in qwen-weiwei/backend/investigate_parsing_issue.py"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-16a0f8877fc2e6b6", "name": "Possible secret in qwen-weiwei/backend/gpu_check.py", "shortDescription": {"text": "Possible secret in qwen-weiwei/backend/gpu_check.py"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-079bf7a0f2eed658", "name": "Insecure pattern 'local_storage_auth_token' in weiwei/frontend/src/stores/appStore.js:125", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in weiwei/frontend/src/stores/appStore.js:125"}, "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-84fc19b4837301c3", "name": "Insecure pattern 'vue_v_html' in weiwei/frontend/src/views/DisclosureWorkspaceView.vue:485", "shortDescription": {"text": "Insecure pattern 'vue_v_html' in weiwei/frontend/src/views/DisclosureWorkspaceView.vue:485"}, "fullDescription": {"text": "Found a known-risky pattern (vue_v_html). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e21adf97288fbb20", "name": "Insecure pattern 'domparser_html_parse' in weiwei/frontend/src/views/RAGChatView.vue:502", "shortDescription": {"text": "Insecure pattern 'domparser_html_parse' in weiwei/frontend/src/views/RAGChatView.vue:502"}, "fullDescription": {"text": "Found a known-risky pattern (domparser_html_parse). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-98403160993ae76a", "name": "Insecure pattern 'vue_v_html' in weiwei/frontend/src/views/RAGChatView.vue:682", "shortDescription": {"text": "Insecure pattern 'vue_v_html' in weiwei/frontend/src/views/RAGChatView.vue:682"}, "fullDescription": {"text": "Found a known-risky pattern (vue_v_html). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8562302ea4f201eb", "name": "Possible secret in weiwei/backend/debug_d1_extraction.py", "shortDescription": {"text": "Possible secret in weiwei/backend/debug_d1_extraction.py"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-775503707d04973a", "name": "Possible secret in weiwei/backend/investigate_parsing_issue.py", "shortDescription": {"text": "Possible secret in weiwei/backend/investigate_parsing_issue.py"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-8a8c6deb4aed1c05", "name": "Possible secret in weiwei/backend/gpu_check.py", "shortDescription": {"text": "Possible secret in weiwei/backend/gpu_check.py"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-533a31eb06e862b9", "name": "Insecure pattern 'cors_wildcard' in weiwei/backend/app/main.py:73", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in weiwei/backend/app/main.py:73"}, "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-156f14e5aaa4495a", "name": "Possible secret in weiwei/backend/misc/check_logs.py", "shortDescription": {"text": "Possible secret in weiwei/backend/misc/check_logs.py"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-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-58e92310205d3e11", "name": "Very large file: qwen-weiwei/backend/app/agents/oa_pipeline/block4_documents.py (1960 lines)", "shortDescription": {"text": "Very large file: qwen-weiwei/backend/app/agents/oa_pipeline/block4_documents.py (1960 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-8e4f20e4be889af9", "name": "Very large file: weiwei/backend/app/agents/oa_pipeline/block4_documents.py (2039 lines)", "shortDescription": {"text": "Very large file: weiwei/backend/app/agents/oa_pipeline/block4_documents.py (2039 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "13 test file(s) for 229 source file(s) (ratio 0.06). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 194 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-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-847cb00d57c33ed3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 qwen-weiwei/frontend/src/api/authHeader.js:21", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 qwen-weiwei/frontend/src/api/authHeader.js:21"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-74d0e1c397acf3b8", "name": "Legacy-named symbol `oa_pipeline_v2` in qwen-weiwei/backend/app/api/oa_agent.py:500", "shortDescription": {"text": "Legacy-named symbol `oa_pipeline_v2` in qwen-weiwei/backend/app/api/oa_agent.py:500"}, "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-7b3a2b36051be0a4", "name": "Legacy-named symbol `oa_pipeline_v2` in qwen-weiwei/backend/app/agents/oa_pipeline/__init__.py:12", "shortDescription": {"text": "Legacy-named symbol `oa_pipeline_v2` in qwen-weiwei/backend/app/agents/oa_pipeline/__init__.py:12"}, "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-5f4fafaa495d70d9", "name": "Legacy-named symbol `analyze_v2` in qwen-weiwei/backend/app/agents/oa_pipeline/oa_pipeline_v2.py:4", "shortDescription": {"text": "Legacy-named symbol `analyze_v2` in qwen-weiwei/backend/app/agents/oa_pipeline/oa_pipeline_v2.py:4"}, "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-a0678d685f02f3ea", "name": "Commented-code block (11 lines) in qwen-weiwei/backend/app/core/model_registry.py:42", "shortDescription": {"text": "Commented-code block (11 lines) in qwen-weiwei/backend/app/core/model_registry.py:42"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2da0002f5d9de28d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 weiwei/frontend/src/stores/miningAgent.js:61", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 weiwei/frontend/src/stores/miningAgent.js:61"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-64abd33a56cf1d18", "name": "`fetch()` without try/.catch or AbortSignal \u2014 weiwei/frontend/src/api/authHeader.js:21", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 weiwei/frontend/src/api/authHeader.js:21"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-68b07944efcb0d55", "name": "Legacy-named symbol `oa_pipeline_v2` in weiwei/backend/app/api/oa_agent.py:490", "shortDescription": {"text": "Legacy-named symbol `oa_pipeline_v2` in weiwei/backend/app/api/oa_agent.py:490"}, "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-ee50a20b52124ceb", "name": "Legacy-named symbol `oa_pipeline_v2` in weiwei/backend/app/agents/oa_pipeline/__init__.py:12", "shortDescription": {"text": "Legacy-named symbol `oa_pipeline_v2` in weiwei/backend/app/agents/oa_pipeline/__init__.py:12"}, "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-3193b8456f721b9e", "name": "Legacy-named symbol `analyze_v2` in weiwei/backend/app/agents/oa_pipeline/oa_pipeline_v2.py:4", "shortDescription": {"text": "Legacy-named symbol `analyze_v2` in weiwei/backend/app/agents/oa_pipeline/oa_pipeline_v2.py:4"}, "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-1b94586b4b577ceb", "name": "Commented-code block (11 lines) in weiwei/backend/app/core/model_registry.py:42", "shortDescription": {"text": "Commented-code block (11 lines) in weiwei/backend/app/core/model_registry.py:42"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-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:\nqwen-weiwei/misc/debug_rag.py:test_search, weiwei/misc/debug_rag.py:test_search\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-49c98f7cedd9c977", "name": "Near-duplicate function bodies in 4 places", "shortDescription": {"text": "Near-duplicate function bodies in 4 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nqwen-weiwei/misc/patent_sync.py:log, qwen-weiwei/backend/misc/patent_sync.py:log, weiwei/misc/patent_sync.py:log, weiwei/backend/misc/patent_sync.py:log\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-119d33e741b146e4", "name": "FastAPI POST `create_kb` without auth dependency \u2014 weiwei/backend/app/api/kb.py:60", "shortDescription": {"text": "FastAPI POST `create_kb` without auth dependency \u2014 weiwei/backend/app/api/kb.py:60"}, "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-4840d6616ebbfc7b", "name": "FastAPI DELETE `delete_kb` without auth dependency \u2014 weiwei/backend/app/api/kb.py:72", "shortDescription": {"text": "FastAPI DELETE `delete_kb` without auth dependency \u2014 weiwei/backend/app/api/kb.py:72"}, "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-fa0cea927bfd1f0c", "name": "FastAPI PUT `upsert_skill` without auth dependency \u2014 weiwei/backend/app/api/admin.py:27", "shortDescription": {"text": "FastAPI PUT `upsert_skill` without auth dependency \u2014 weiwei/backend/app/api/admin.py:27"}, "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-553854bac8bef086", "name": "FastAPI POST `reset_skill` without auth dependency \u2014 weiwei/backend/app/api/admin.py:43", "shortDescription": {"text": "FastAPI POST `reset_skill` without auth dependency \u2014 weiwei/backend/app/api/admin.py:43"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-83957765d2e0f221", "name": "FastAPI PUT `upsert_agent` without auth dependency \u2014 weiwei/backend/app/api/admin.py:116", "shortDescription": {"text": "FastAPI PUT `upsert_agent` without auth dependency \u2014 weiwei/backend/app/api/admin.py:116"}, "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-00b7b6132dfaec48", "name": "FastAPI POST `send_message` without auth dependency \u2014 weiwei/backend/app/api/agent.py:70", "shortDescription": {"text": "FastAPI POST `send_message` without auth dependency \u2014 weiwei/backend/app/api/agent.py:70"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-257a7c1b958e2659", "name": "FastAPI POST `ingest_document` without auth dependency \u2014 weiwei/backend/app/api/rag.py:549", "shortDescription": {"text": "FastAPI POST `ingest_document` without auth dependency \u2014 weiwei/backend/app/api/rag.py:549"}, "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-f99fc7f3dbdc905b", "name": "FastAPI POST `rag_search` without auth dependency \u2014 weiwei/backend/app/api/rag.py:595", "shortDescription": {"text": "FastAPI POST `rag_search` without auth dependency \u2014 weiwei/backend/app/api/rag.py:595"}, "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-03de2cbcce6b939b", "name": "FastAPI DELETE `delete_document_endpoint` without auth dependency \u2014 weiwei/backend/app/api/rag.py:906", "shortDescription": {"text": "FastAPI DELETE `delete_document_endpoint` without auth dependency \u2014 weiwei/backend/app/api/rag.py:906"}, "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-cc10c5b971d80f6b", "name": "FastAPI POST `submit_feedback` without auth dependency \u2014 weiwei/backend/app/api/rag.py:956", "shortDescription": {"text": "FastAPI POST `submit_feedback` without auth dependency \u2014 weiwei/backend/app/api/rag.py:956"}, "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-5bc414009937c2d0", "name": "FastAPI DELETE `delete_document` without auth dependency \u2014 weiwei/backend/app/api/documents.py:107", "shortDescription": {"text": "FastAPI DELETE `delete_document` without auth dependency \u2014 weiwei/backend/app/api/documents.py:107"}, "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-fbd2832ee9542cba", "name": "Dangling fetch: POST /api/auth/login (qwen-weiwei/frontend/src/stores/appStore.js:91)", "shortDescription": {"text": "Dangling fetch: POST /api/auth/login (qwen-weiwei/frontend/src/stores/appStore.js:91)"}, "fullDescription": {"text": "`qwen-weiwei/frontend/src/stores/appStore.js:91` calls `POST /api/auth/login` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/login`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-283361621c4824eb", "name": "Dangling fetch: POST /api/auth/change-password (qwen-weiwei/frontend/src/stores/appStore.js:122)", "shortDescription": {"text": "Dangling fetch: POST /api/auth/change-password (qwen-weiwei/frontend/src/stores/appStore.js:122)"}, "fullDescription": {"text": "`qwen-weiwei/frontend/src/stores/appStore.js:122` calls `POST /api/auth/change-password` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/change-password`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-430b131a32c040c0", "name": "Dangling fetch: GET /api/auth/me (weiwei/frontend/src/stores/appStore.js:77)", "shortDescription": {"text": "Dangling fetch: GET /api/auth/me (weiwei/frontend/src/stores/appStore.js:77)"}, "fullDescription": {"text": "`weiwei/frontend/src/stores/appStore.js:77` calls `GET /api/auth/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-802bd9a40a8e0e71", "name": "Dangling fetch: POST /api/auth/login (weiwei/frontend/src/stores/appStore.js:111)", "shortDescription": {"text": "Dangling fetch: POST /api/auth/login (weiwei/frontend/src/stores/appStore.js:111)"}, "fullDescription": {"text": "`weiwei/frontend/src/stores/appStore.js:111` calls `POST /api/auth/login` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/login`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bc40f719109d6a31", "name": "Dangling fetch: POST /api/auth/change-password (weiwei/frontend/src/stores/appStore.js:142)", "shortDescription": {"text": "Dangling fetch: POST /api/auth/change-password (weiwei/frontend/src/stores/appStore.js:142)"}, "fullDescription": {"text": "`weiwei/frontend/src/stores/appStore.js:142` calls `POST /api/auth/change-password` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/change-password`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4756b4c4da7d2088", "name": "Unused endpoint: GET /api/health", "shortDescription": {"text": "Unused endpoint: GET /api/health"}, "fullDescription": {"text": "`qwen-weiwei/backend/app/main.py` declares `GET /api/health` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4a0b96cac1e6c501", "name": "Unused endpoint: POST /pipeline/start_stage1", "shortDescription": {"text": "Unused endpoint: POST /pipeline/start_stage1"}, "fullDescription": {"text": "`qwen-weiwei/backend/app/api/disclosure_pipeline.py` declares `POST /pipeline/start_stage1` 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-3ca257d50b155400", "name": "Unused endpoint: POST /pipeline/start_stage2", "shortDescription": {"text": "Unused endpoint: POST /pipeline/start_stage2"}, "fullDescription": {"text": "`qwen-weiwei/backend/app/api/disclosure_pipeline.py` declares `POST /pipeline/start_stage2` 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-537ecf399d2125dd", "name": "Unused endpoint: POST /pipeline/start_stage3", "shortDescription": {"text": "Unused endpoint: POST /pipeline/start_stage3"}, "fullDescription": {"text": "`qwen-weiwei/backend/app/api/disclosure_pipeline.py` declares `POST /pipeline/start_stage3` 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-b39c70f70ae0cfa8", "name": "Unused endpoint: GET /sessions/{session_id}/matrix", "shortDescription": {"text": "Unused endpoint: GET /sessions/{session_id}/matrix"}, "fullDescription": {"text": "`qwen-weiwei/backend/app/api/disclosure_pipeline.py` declares `GET /sessions/{session_id}/matrix` 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-1cb154b78e52ff81", "name": "Unused endpoint: PATCH /comparisons/{comparison_id}", "shortDescription": {"text": "Unused endpoint: PATCH /comparisons/{comparison_id}"}, "fullDescription": {"text": "`qwen-weiwei/backend/app/api/disclosure_pipeline.py` declares `PATCH /comparisons/{comparison_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-0ff8e0010299cb2f", "name": "Unused endpoint: PUT /sessions/{session_id}/matrix", "shortDescription": {"text": "Unused endpoint: PUT /sessions/{session_id}/matrix"}, "fullDescription": {"text": "`qwen-weiwei/backend/app/api/disclosure_pipeline.py` declares `PUT /sessions/{session_id}/matrix` 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-baf4721bea8f0906", "name": "Unused endpoint: PATCH /sessions/{session_id}/model", "shortDescription": {"text": "Unused endpoint: PATCH /sessions/{session_id}/model"}, "fullDescription": {"text": "`qwen-weiwei/backend/app/api/disclosure_pipeline.py` declares `PATCH /sessions/{session_id}/model` 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-85a7608b63032dd1", "name": "Unused endpoint: GET /sessions/{session_id}/download_report", "shortDescription": {"text": "Unused endpoint: GET /sessions/{session_id}/download_report"}, "fullDescription": {"text": "`qwen-weiwei/backend/app/api/disclosure_pipeline.py` declares `GET /sessions/{session_id}/download_report` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5baa8971ebe192a1", "name": "Unused endpoint: GET /", "shortDescription": {"text": "Unused endpoint: GET /"}, "fullDescription": {"text": "`qwen-weiwei/backend/app/api/rag_sessions.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-7a009b1a56794f45", "name": "Unused endpoint: POST /", "shortDescription": {"text": "Unused endpoint: POST /"}, "fullDescription": {"text": "`qwen-weiwei/backend/app/api/rag_sessions.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-7a9aea5834dd9d3d", "name": "Unused endpoint: GET /{session_id}/messages", "shortDescription": {"text": "Unused endpoint: GET /{session_id}/messages"}, "fullDescription": {"text": "`qwen-weiwei/backend/app/api/rag_sessions.py` declares `GET /{session_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-173ad25a6a1cb443", "name": "Unused endpoint: DELETE /{session_id}", "shortDescription": {"text": "Unused endpoint: DELETE /{session_id}"}, "fullDescription": {"text": "`qwen-weiwei/backend/app/api/rag_sessions.py` declares `DELETE /{session_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-593d9b4072f92e9f", "name": "Unused endpoint: PATCH /{session_id}", "shortDescription": {"text": "Unused endpoint: PATCH /{session_id}"}, "fullDescription": {"text": "`qwen-weiwei/backend/app/api/rag_sessions.py` declares `PATCH /{session_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-618721b912bad1c2", "name": "Unused endpoint: POST /login", "shortDescription": {"text": "Unused endpoint: POST /login"}, "fullDescription": {"text": "`qwen-weiwei/backend/app/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-4fe9bb486644f008", "name": "Unused endpoint: POST /change-password", "shortDescription": {"text": "Unused endpoint: POST /change-password"}, "fullDescription": {"text": "`qwen-weiwei/backend/app/api/auth.py` declares `POST /change-password` 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-fd1dc91abf32142d", "name": "Unused endpoint: GET /me", "shortDescription": {"text": "Unused endpoint: GET /me"}, "fullDescription": {"text": "`qwen-weiwei/backend/app/api/auth.py` declares `GET /me` 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-60f57e4109bc7862", "name": "Unused endpoint: DELETE /{kb_id}", "shortDescription": {"text": "Unused endpoint: DELETE /{kb_id}"}, "fullDescription": {"text": "`qwen-weiwei/backend/app/api/kb.py` declares `DELETE /{kb_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-5c5c6900e4670966", "name": "Unused endpoint: GET /skills", "shortDescription": {"text": "Unused endpoint: GET /skills"}, "fullDescription": {"text": "`qwen-weiwei/backend/app/api/admin.py` declares `GET /skills` 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-ee9062b772582f21", "name": "Unused endpoint: PUT /skills/{name}", "shortDescription": {"text": "Unused endpoint: PUT /skills/{name}"}, "fullDescription": {"text": "`qwen-weiwei/backend/app/api/admin.py` declares `PUT /skills/{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-118b5eca5866b978", "name": "Unused endpoint: POST /skills/{name}/reset", "shortDescription": {"text": "Unused endpoint: POST /skills/{name}/reset"}, "fullDescription": {"text": "`qwen-weiwei/backend/app/api/admin.py` declares `POST /skills/{name}/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-3140e61d7cac5091", "name": "Unused endpoint: GET /agents", "shortDescription": {"text": "Unused endpoint: GET /agents"}, "fullDescription": {"text": "`qwen-weiwei/backend/app/api/admin.py` declares `GET /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-90fabf3759d68967", "name": "Unused endpoint: GET /agents/{name}", "shortDescription": {"text": "Unused endpoint: GET /agents/{name}"}, "fullDescription": {"text": "`qwen-weiwei/backend/app/api/admin.py` declares `GET /agents/{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-4c256aca878ecf09", "name": "Unused endpoint: PUT /agents/{name}", "shortDescription": {"text": "Unused endpoint: PUT /agents/{name}"}, "fullDescription": {"text": "`qwen-weiwei/backend/app/api/admin.py` declares `PUT /agents/{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-0701b80fc94a86ca", "name": "Unused endpoint: GET /{session_id}/documents", "shortDescription": {"text": "Unused endpoint: GET /{session_id}/documents"}, "fullDescription": {"text": "`qwen-weiwei/backend/app/api/oa_sessions.py` declares `GET /{session_id}/documents` 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-646905f54906a60a", "name": "Unused endpoint: PATCH /{user_id}", "shortDescription": {"text": "Unused endpoint: PATCH /{user_id}"}, "fullDescription": {"text": "`qwen-weiwei/backend/app/api/users.py` declares `PATCH /{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-55c93ee7e031a509", "name": "Unused endpoint: DELETE /{user_id}", "shortDescription": {"text": "Unused endpoint: DELETE /{user_id}"}, "fullDescription": {"text": "`qwen-weiwei/backend/app/api/users.py` declares `DELETE /{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-2ab9bf5db6820af4", "name": "Unused endpoint: GET /models", "shortDescription": {"text": "Unused endpoint: GET /models"}, "fullDescription": {"text": "`qwen-weiwei/backend/app/api/models.py` declares `GET /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-b899602ae1750689", "name": "Unused endpoint: POST /analyze_v2", "shortDescription": {"text": "Unused endpoint: POST /analyze_v2"}, "fullDescription": {"text": "`qwen-weiwei/backend/app/api/oa_agent.py` declares `POST /analyze_v2` 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-04cb5daba74fa9a9", "name": "Unused endpoint: POST /analyze_v2/stream", "shortDescription": {"text": "Unused endpoint: POST /analyze_v2/stream"}, "fullDescription": {"text": "`qwen-weiwei/backend/app/api/oa_agent.py` declares `POST /analyze_v2/stream` 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-74fb0c42126b742b", "name": "Unused endpoint: GET /download/{doc_type}/{session_id}", "shortDescription": {"text": "Unused endpoint: GET /download/{doc_type}/{session_id}"}, "fullDescription": {"text": "`qwen-weiwei/backend/app/api/oa_agent.py` declares `GET /download/{doc_type}/{session_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-92efb2dc9205e7a4", "name": "Unused endpoint: POST /sessions", "shortDescription": {"text": "Unused endpoint: POST /sessions"}, "fullDescription": {"text": "`qwen-weiwei/backend/app/api/agent.py` declares `POST /sessions` 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-b15d518d538de57d", "name": "Unused endpoint: GET /sessions", "shortDescription": {"text": "Unused endpoint: GET /sessions"}, "fullDescription": {"text": "`qwen-weiwei/backend/app/api/agent.py` declares `GET /sessions` 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-615890562ffa2154", "name": "Unused endpoint: POST /sessions/{session_id}/message", "shortDescription": {"text": "Unused endpoint: POST /sessions/{session_id}/message"}, "fullDescription": {"text": "`qwen-weiwei/backend/app/api/agent.py` declares `POST /sessions/{session_id}/message` 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-cff8da5fbc19c76d", "name": "Unused endpoint: POST /chat", "shortDescription": {"text": "Unused endpoint: POST /chat"}, "fullDescription": {"text": "`qwen-weiwei/backend/app/api/rag.py` declares `POST /chat` 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-6dff1badc14e884f", "name": "Unused endpoint: POST /ingest/{task_id}", "shortDescription": {"text": "Unused endpoint: POST /ingest/{task_id}"}, "fullDescription": {"text": "`qwen-weiwei/backend/app/api/rag.py` declares `POST /ingest/{task_id}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-17a164638609b114", "name": "Unused endpoint: POST /search", "shortDescription": {"text": "Unused endpoint: POST /search"}, "fullDescription": {"text": "`qwen-weiwei/backend/app/api/rag.py` declares `POST /search` 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-56cfdb85004a48e9", "name": "Unused endpoint: GET /patents/{document_id}/images", "shortDescription": {"text": "Unused endpoint: GET /patents/{document_id}/images"}, "fullDescription": {"text": "`qwen-weiwei/backend/app/api/rag.py` declares `GET /patents/{document_id}/images` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a7effef5e94db46b", "name": "Unused endpoint: GET /patents/{document_id}/images/{filename:path}", "shortDescription": {"text": "Unused endpoint: GET /patents/{document_id}/images/{filename:path}"}, "fullDescription": {"text": "`qwen-weiwei/backend/app/api/rag.py` declares `GET /patents/{document_id}/images/{filename:path}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-166080b0dcf695cc", "name": "Unused endpoint: GET /images/{document_id}/{filename:path}", "shortDescription": {"text": "Unused endpoint: GET /images/{document_id}/{filename:path}"}, "fullDescription": {"text": "`qwen-weiwei/backend/app/api/rag.py` declares `GET /images/{document_id}/{filename:path}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ffc9ad08ed6cdd74", "name": "Unused endpoint: GET /documents", "shortDescription": {"text": "Unused endpoint: GET /documents"}, "fullDescription": {"text": "`qwen-weiwei/backend/app/api/rag.py` declares `GET /documents` 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-cb893b221c03719a", "name": "Unused endpoint: GET /documents/{document_id}/info", "shortDescription": {"text": "Unused endpoint: GET /documents/{document_id}/info"}, "fullDescription": {"text": "`qwen-weiwei/backend/app/api/rag.py` declares `GET /documents/{document_id}/info` 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-6fb2dafafa851151", "name": "Unused endpoint: GET /documents/{document_id}/chunks", "shortDescription": {"text": "Unused endpoint: GET /documents/{document_id}/chunks"}, "fullDescription": {"text": "`qwen-weiwei/backend/app/api/rag.py` declares `GET /documents/{document_id}/chunks` 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-1ad71e63f8916e8c", "name": "Unused endpoint: DELETE /documents/{document_id}", "shortDescription": {"text": "Unused endpoint: DELETE /documents/{document_id}"}, "fullDescription": {"text": "`qwen-weiwei/backend/app/api/rag.py` declares `DELETE /documents/{document_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-8f95d7ec49f00406", "name": "Unused endpoint: POST /feedback", "shortDescription": {"text": "Unused endpoint: POST /feedback"}, "fullDescription": {"text": "`qwen-weiwei/backend/app/api/rag.py` declares `POST /feedback` 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-5766b6a628042997", "name": "Unused endpoint: GET /feedback", "shortDescription": {"text": "Unused endpoint: GET /feedback"}, "fullDescription": {"text": "`qwen-weiwei/backend/app/api/rag.py` declares `GET /feedback` 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-8d22204953b8b32e", "name": "Unused endpoint: GET /files/preview/{document_id}", "shortDescription": {"text": "Unused endpoint: GET /files/preview/{document_id}"}, "fullDescription": {"text": "`qwen-weiwei/backend/app/api/rag.py` declares `GET /files/preview/{document_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-6236b283b79811b8", "name": "Unused endpoint: POST /upload", "shortDescription": {"text": "Unused endpoint: POST /upload"}, "fullDescription": {"text": "`qwen-weiwei/backend/app/api/documents.py` declares `POST /upload` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a9ada54c6099bd33", "name": "Unused endpoint: GET /{document_id}", "shortDescription": {"text": "Unused endpoint: GET /{document_id}"}, "fullDescription": {"text": "`qwen-weiwei/backend/app/api/documents.py` declares `GET /{document_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-b2d9ebcfd4b9e397", "name": "Unused endpoint: DELETE /{document_id}", "shortDescription": {"text": "Unused endpoint: DELETE /{document_id}"}, "fullDescription": {"text": "`qwen-weiwei/backend/app/api/documents.py` declares `DELETE /{document_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}}]}}, "automationDetails": {"id": "repobility/23743"}, "properties": {"repository": "zylon131/weiwei", "repoUrl": "https://github.com/zylon131/weiwei", "branch": "main"}, "results": [{"ruleId": "scanner-4e6f50f7b5c83aea", "level": "note", "message": {"text": "Possibly dead Python function: generate_uuid"}, "properties": {"repobilityId": "1eeb91251a023ff2", "scanner": "scanner-primary", "fingerprint": "4e6f50f7b5c83aea", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "qwen-weiwei/backend/app/models/schema.py:7"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9afde1cae06ebf41", "level": "note", "message": {"text": "Possibly dead Python function: save_pipeline_state"}, "properties": {"repobilityId": "10cac34470d0e150", "scanner": "scanner-primary", "fingerprint": "9afde1cae06ebf41", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "qwen-weiwei/backend/app/utils/pipeline_helpers.py:10"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7989375fdbcd32b2", "level": "note", "message": {"text": "Possibly dead Python function: make_event"}, "properties": {"repobilityId": "4d7f9f575e767ac9", "scanner": "scanner-primary", "fingerprint": "7989375fdbcd32b2", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "qwen-weiwei/backend/app/utils/pipeline_helpers.py:50"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a9e74852c8db0e0b", "level": "note", "message": {"text": "Possibly dead Python function: iso_now"}, "properties": {"repobilityId": "1e1a07be2ffd5880", "scanner": "scanner-primary", "fingerprint": "a9e74852c8db0e0b", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "qwen-weiwei/backend/app/utils/pipeline_helpers.py:63"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-22b35338797ee4b5", "level": "note", "message": {"text": "Possibly dead Python function: format_datetime_iso"}, "properties": {"repobilityId": "1216ea5c3c35e26d", "scanner": "scanner-primary", "fingerprint": "22b35338797ee4b5", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "qwen-weiwei/backend/app/utils/pipeline_helpers.py:68"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b74a758a381d349c", "level": "note", "message": {"text": "Possibly dead Python function: extract_tech_terms"}, "properties": {"repobilityId": "3e3167a02c4ec8cb", "scanner": "scanner-primary", "fingerprint": "b74a758a381d349c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "qwen-weiwei/backend/app/agents/disclosure_pipeline/slicing.py:20"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-23cf70efb44004d5", "level": "note", "message": {"text": "Possibly dead Python function: slice_contrast_text"}, "properties": {"repobilityId": "14f6028990290f7d", "scanner": "scanner-primary", "fingerprint": "23cf70efb44004d5", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "qwen-weiwei/backend/app/agents/disclosure_pipeline/slicing.py:43"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-084cdac57e7c94d7", "level": "note", "message": {"text": "Possibly dead Python function: generate_combined_independent_claim"}, "properties": {"repobilityId": "f34f16e9783db4fe", "scanner": "scanner-primary", "fingerprint": "084cdac57e7c94d7", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "qwen-weiwei/backend/app/agents/oa_pipeline/module3_strategy.py:218"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ca98c6287a1747ee", "level": "note", "message": {"text": "Possibly dead Python function: generate_creativity_strategy"}, "properties": {"repobilityId": "c5ce919b4a820364", "scanner": "scanner-primary", "fingerprint": "ca98c6287a1747ee", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "qwen-weiwei/backend/app/agents/oa_pipeline/module3_strategy.py:395"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-00832db37c6d4b07", "level": "note", "message": {"text": "Possibly dead Python function: generate_sufficiency_strategy"}, "properties": {"repobilityId": "0a75fc3adbf0c6b2", "scanner": "scanner-primary", "fingerprint": "00832db37c6d4b07", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "qwen-weiwei/backend/app/agents/oa_pipeline/module3_strategy.py:462"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b2a1d1a63a918a8f", "level": "note", "message": {"text": "Possibly dead Python function: generate_support_clarity_strategy"}, "properties": {"repobilityId": "bc90a7b04fa74440", "scanner": "scanner-primary", "fingerprint": "b2a1d1a63a918a8f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "qwen-weiwei/backend/app/agents/oa_pipeline/module3_strategy.py:500"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a6bf791c4f849647", "level": "note", "message": {"text": "Possibly dead Python function: generate_argument_draft"}, "properties": {"repobilityId": "678f769b2f26f420", "scanner": "scanner-primary", "fingerprint": "a6bf791c4f849647", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "qwen-weiwei/backend/app/agents/oa_pipeline/block3_5_draft.py:406"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-40796d0dda855f79", "level": "note", "message": {"text": "Possibly dead Python function: v2_answer"}, "properties": {"repobilityId": "b668da55bf889411", "scanner": "scanner-primary", "fingerprint": "40796d0dda855f79", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "qwen-weiwei/backend/app/agents/oa_pipeline/sse_events.py:394"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-90c7685d2be1f412", "level": "note", "message": {"text": "Possibly dead Python function: generate_uuid"}, "properties": {"repobilityId": "1eeb91251a023ff2", "scanner": "scanner-primary", "fingerprint": "90c7685d2be1f412", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "weiwei/backend/app/models/schema.py:7"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7e4121129d1024f8", "level": "note", "message": {"text": "Possibly dead Python function: search_epub_keyword_with_page"}, "properties": {"repobilityId": "58d8aa8887c48d48", "scanner": "scanner-primary", "fingerprint": "7e4121129d1024f8", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "weiwei/backend/app/utils/cnipa/cnipa_epub_crawler.py:180"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5c7e5175829df7c7", "level": "note", "message": {"text": "Possibly dead Python function: extract_tech_terms"}, "properties": {"repobilityId": "3e3167a02c4ec8cb", "scanner": "scanner-primary", "fingerprint": "5c7e5175829df7c7", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "weiwei/backend/app/agents/disclosure_pipeline/slicing.py:16"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-53c97f646812c1cc", "level": "note", "message": {"text": "Possibly dead Python function: slice_contrast_text"}, "properties": {"repobilityId": "14f6028990290f7d", "scanner": "scanner-primary", "fingerprint": "53c97f646812c1cc", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "weiwei/backend/app/agents/disclosure_pipeline/slicing.py:39"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6f16ea2c53d91dcd", "level": "note", "message": {"text": "Possibly dead Python function: generate_combined_independent_claim"}, "properties": {"repobilityId": "f34f16e9783db4fe", "scanner": "scanner-primary", "fingerprint": "6f16ea2c53d91dcd", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "weiwei/backend/app/agents/oa_pipeline/module3_strategy.py:218"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-51a1e11a5cecc232", "level": "note", "message": {"text": "Possibly dead Python function: generate_creativity_strategy"}, "properties": {"repobilityId": "c5ce919b4a820364", "scanner": "scanner-primary", "fingerprint": "51a1e11a5cecc232", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "weiwei/backend/app/agents/oa_pipeline/module3_strategy.py:395"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-bb7b663c34cd9d01", "level": "note", "message": {"text": "Possibly dead Python function: generate_sufficiency_strategy"}, "properties": {"repobilityId": "0a75fc3adbf0c6b2", "scanner": "scanner-primary", "fingerprint": "bb7b663c34cd9d01", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "weiwei/backend/app/agents/oa_pipeline/module3_strategy.py:452"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6a743a7a349191e8", "level": "note", "message": {"text": "Possibly dead Python function: generate_support_clarity_strategy"}, "properties": {"repobilityId": "bc90a7b04fa74440", "scanner": "scanner-primary", "fingerprint": "6a743a7a349191e8", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "weiwei/backend/app/agents/oa_pipeline/module3_strategy.py:481"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ab0a30ab045cb476", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 qwen-weiwei/frontend/src/views/OaWorkspaceView.vue:56"}, "properties": {"repobilityId": "ebf1f44281c5c131", "scanner": "scanner-primary", "fingerprint": "ab0a30ab045cb476", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-e7ba9ef642f445aa", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 weiwei/frontend/src/views/OaWorkspaceView.vue:56"}, "properties": {"repobilityId": "39f2ca7acd89d8ba", "scanner": "scanner-primary", "fingerprint": "e7ba9ef642f445aa", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-3f39f4813ff794ff", "level": "warning", "message": {"text": "Privileged port 29 in use"}, "properties": {"repobilityId": "f09242400239b5a3", "scanner": "scanner-primary", "fingerprint": "3f39f4813ff794ff", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "qwen-weiwei/docker-compose.qwen.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-827b1e7ac132b863", "level": "warning", "message": {"text": "Privileged port 84 in use"}, "properties": {"repobilityId": "8a5356b5b09466d2", "scanner": "scanner-primary", "fingerprint": "827b1e7ac132b863", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "qwen-weiwei/docker-compose.qwen.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3fe86bb73f5ff36b", "level": "warning", "message": {"text": "Dockerfile runs as root: qwen-weiwei/frontend/Dockerfile"}, "properties": {"repobilityId": "00b00d68d807fa2b", "scanner": "scanner-primary", "fingerprint": "3fe86bb73f5ff36b", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-7e332a039200a532", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:18-alpine"}, "properties": {"repobilityId": "0a5f5be16f3ad426", "scanner": "scanner-primary", "fingerprint": "7e332a039200a532", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "qwen-weiwei/frontend/Dockerfile"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-a005959e9a58fb54", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: nginx:stable-alpine"}, "properties": {"repobilityId": "033da11f525fdec1", "scanner": "scanner-primary", "fingerprint": "a005959e9a58fb54", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "qwen-weiwei/frontend/Dockerfile"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-4a9afb0aeabcac5e", "level": "warning", "message": {"text": "Dockerfile runs as root: qwen-weiwei/backend/Dockerfile"}, "properties": {"repobilityId": "df456274340b3a06", "scanner": "scanner-primary", "fingerprint": "4a9afb0aeabcac5e", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-9658c028a71355cd", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.10-slim"}, "properties": {"repobilityId": "1cd3af09b645084f", "scanner": "scanner-primary", "fingerprint": "9658c028a71355cd", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "qwen-weiwei/backend/Dockerfile"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5ee7b231067ab816", "level": "warning", "message": {"text": "Dockerfile runs as root: weiwei/frontend/Dockerfile"}, "properties": {"repobilityId": "f1a8255ab2b864b2", "scanner": "scanner-primary", "fingerprint": "5ee7b231067ab816", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-2ac98bc0409925ec", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:18-alpine"}, "properties": {"repobilityId": "24d32098e12b18dc", "scanner": "scanner-primary", "fingerprint": "2ac98bc0409925ec", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "weiwei/frontend/Dockerfile"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-e91569be09dd6fed", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: nginx:stable-alpine"}, "properties": {"repobilityId": "3965dd1a05c38b21", "scanner": "scanner-primary", "fingerprint": "e91569be09dd6fed", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "weiwei/frontend/Dockerfile"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-80d9436bd171afe3", "level": "warning", "message": {"text": "Dockerfile runs as root: weiwei/backend/Dockerfile"}, "properties": {"repobilityId": "6f37bd3f6054f89c", "scanner": "scanner-primary", "fingerprint": "80d9436bd171afe3", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-708dd7c18e23b4dc", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.10-slim"}, "properties": {"repobilityId": "0c783c9c55a90404", "scanner": "scanner-primary", "fingerprint": "708dd7c18e23b4dc", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "weiwei/backend/Dockerfile"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-aa5acaa49eb8315b", "level": "note", "message": {"text": "Containers defined but no K8s/orchestration manifest found"}, "properties": {"repobilityId": "b230ea9b68736081", "scanner": "scanner-primary", "fingerprint": "aa5acaa49eb8315b", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["coverage", "deployment"]}}, {"ruleId": "scanner-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-dd7fe392a896a07a", "level": "error", "message": {"text": "Possible secret in qwen-weiwei/docker-compose.qwen.yml"}, "properties": {"repobilityId": "6f0e4463138e8cdd", "scanner": "scanner-primary", "fingerprint": "dd7fe392a896a07a", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "qwen-weiwei/docker-compose.qwen.yml"}, "region": {"startLine": 50}}}]}, {"ruleId": "scanner-dd7fe392a896a07a", "level": "error", "message": {"text": "Possible secret in qwen-weiwei/docker-compose.qwen.yml"}, "properties": {"repobilityId": "6f0e4463138e8cdd", "scanner": "scanner-primary", "fingerprint": "dd7fe392a896a07a", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "qwen-weiwei/docker-compose.qwen.yml"}, "region": {"startLine": 87}}}]}, {"ruleId": "scanner-0f2209ba5bece1c0", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in qwen-weiwei/frontend/src/stores/appStore.js:105"}, "properties": {"repobilityId": "228fd5874aa54396", "scanner": "scanner-primary", "fingerprint": "0f2209ba5bece1c0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "qwen-weiwei/frontend/src/stores/appStore.js"}, "region": {"startLine": 105}}}]}, {"ruleId": "scanner-69a15d8e0dc870ae", "level": "warning", "message": {"text": "Insecure pattern 'vue_v_html' in qwen-weiwei/frontend/src/views/DisclosureWorkspaceView.vue:220"}, "properties": {"repobilityId": "b2a7b39970cb1f81", "scanner": "scanner-primary", "fingerprint": "69a15d8e0dc870ae", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "vue_v_html"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "qwen-weiwei/frontend/src/views/DisclosureWorkspaceView.vue"}, "region": {"startLine": 220}}}]}, {"ruleId": "scanner-7028dab4d121888a", "level": "warning", "message": {"text": "Insecure pattern 'domparser_html_parse' in qwen-weiwei/frontend/src/views/RAGChatView.vue:499"}, "properties": {"repobilityId": "2909e848f326aaa0", "scanner": "scanner-primary", "fingerprint": "7028dab4d121888a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "domparser_html_parse"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "qwen-weiwei/frontend/src/views/RAGChatView.vue"}, "region": {"startLine": 499}}}]}, {"ruleId": "scanner-4f44a2a22824769f", "level": "warning", "message": {"text": "Insecure pattern 'vue_v_html' in qwen-weiwei/frontend/src/views/RAGChatView.vue:679"}, "properties": {"repobilityId": "7ea1431b5022500a", "scanner": "scanner-primary", "fingerprint": "4f44a2a22824769f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "vue_v_html"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "qwen-weiwei/frontend/src/views/RAGChatView.vue"}, "region": {"startLine": 679}}}]}, {"ruleId": "scanner-b4522e2cc195cb33", "level": "warning", "message": {"text": "Insecure pattern 'vue_v_html' in qwen-weiwei/frontend/src/views/OaWorkspaceView.vue:424"}, "properties": {"repobilityId": "abc4b0482c1aaf0d", "scanner": "scanner-primary", "fingerprint": "b4522e2cc195cb33", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "vue_v_html"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "qwen-weiwei/frontend/src/views/OaWorkspaceView.vue"}, "region": {"startLine": 424}}}]}, {"ruleId": "scanner-3095f0426945fa36", "level": "error", "message": {"text": "Possible secret in qwen-weiwei/backend/debug_d1_extraction.py"}, "properties": {"repobilityId": "c152af0f0c9e157f", "scanner": "scanner-primary", "fingerprint": "3095f0426945fa36", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "qwen-weiwei/backend/debug_d1_extraction.py"}, "region": {"startLine": 6}}}]}, {"ruleId": "scanner-088630478f212f7b", "level": "error", "message": {"text": "Possible secret in qwen-weiwei/backend/investigate_parsing_issue.py"}, "properties": {"repobilityId": "577451e2ed958b38", "scanner": "scanner-primary", "fingerprint": "088630478f212f7b", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "qwen-weiwei/backend/investigate_parsing_issue.py"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-16a0f8877fc2e6b6", "level": "error", "message": {"text": "Possible secret in qwen-weiwei/backend/gpu_check.py"}, "properties": {"repobilityId": "3faac7efa42afdc7", "scanner": "scanner-primary", "fingerprint": "16a0f8877fc2e6b6", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "qwen-weiwei/backend/gpu_check.py"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-079bf7a0f2eed658", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in weiwei/frontend/src/stores/appStore.js:125"}, "properties": {"repobilityId": "cecb56b1bbdc68e6", "scanner": "scanner-primary", "fingerprint": "079bf7a0f2eed658", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "weiwei/frontend/src/stores/appStore.js"}, "region": {"startLine": 125}}}]}, {"ruleId": "scanner-84fc19b4837301c3", "level": "warning", "message": {"text": "Insecure pattern 'vue_v_html' in weiwei/frontend/src/views/DisclosureWorkspaceView.vue:485"}, "properties": {"repobilityId": "1e82370f37d2b832", "scanner": "scanner-primary", "fingerprint": "84fc19b4837301c3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "vue_v_html"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "weiwei/frontend/src/views/DisclosureWorkspaceView.vue"}, "region": {"startLine": 485}}}]}, {"ruleId": "scanner-e21adf97288fbb20", "level": "warning", "message": {"text": "Insecure pattern 'domparser_html_parse' in weiwei/frontend/src/views/RAGChatView.vue:502"}, "properties": {"repobilityId": "b481adde144d853b", "scanner": "scanner-primary", "fingerprint": "e21adf97288fbb20", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "domparser_html_parse"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "weiwei/frontend/src/views/RAGChatView.vue"}, "region": {"startLine": 502}}}]}, {"ruleId": "scanner-98403160993ae76a", "level": "warning", "message": {"text": "Insecure pattern 'vue_v_html' in weiwei/frontend/src/views/RAGChatView.vue:682"}, "properties": {"repobilityId": "d1ff50be01af9718", "scanner": "scanner-primary", "fingerprint": "98403160993ae76a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "vue_v_html"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "weiwei/frontend/src/views/RAGChatView.vue"}, "region": {"startLine": 682}}}]}, {"ruleId": "scanner-8562302ea4f201eb", "level": "error", "message": {"text": "Possible secret in weiwei/backend/debug_d1_extraction.py"}, "properties": {"repobilityId": "4e7ee78f8c8ff867", "scanner": "scanner-primary", "fingerprint": "8562302ea4f201eb", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "weiwei/backend/debug_d1_extraction.py"}, "region": {"startLine": 6}}}]}, {"ruleId": "scanner-775503707d04973a", "level": "error", "message": {"text": "Possible secret in weiwei/backend/investigate_parsing_issue.py"}, "properties": {"repobilityId": "5d356e9a8fb4c39c", "scanner": "scanner-primary", "fingerprint": "775503707d04973a", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "weiwei/backend/investigate_parsing_issue.py"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-8a8c6deb4aed1c05", "level": "error", "message": {"text": "Possible secret in weiwei/backend/gpu_check.py"}, "properties": {"repobilityId": "545f88c392bc5687", "scanner": "scanner-primary", "fingerprint": "8a8c6deb4aed1c05", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "weiwei/backend/gpu_check.py"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-533a31eb06e862b9", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in weiwei/backend/app/main.py:73"}, "properties": {"repobilityId": "0f53e16fe652cd48", "scanner": "scanner-primary", "fingerprint": "533a31eb06e862b9", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "weiwei/backend/app/main.py"}, "region": {"startLine": 73}}}]}, {"ruleId": "scanner-156f14e5aaa4495a", "level": "error", "message": {"text": "Possible secret in weiwei/backend/misc/check_logs.py"}, "properties": {"repobilityId": "b31fa2e9f60952b9", "scanner": "scanner-primary", "fingerprint": "156f14e5aaa4495a", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "weiwei/backend/misc/check_logs.py"}, "region": {"startLine": 7}}}]}, {"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-58e92310205d3e11", "level": "note", "message": {"text": "Very large file: qwen-weiwei/backend/app/agents/oa_pipeline/block4_documents.py (1960 lines)"}, "properties": {"repobilityId": "eb2be2f37ec2d28d", "scanner": "scanner-primary", "fingerprint": "58e92310205d3e11", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-8e4f20e4be889af9", "level": "note", "message": {"text": "Very large file: weiwei/backend/app/agents/oa_pipeline/block4_documents.py (2039 lines)"}, "properties": {"repobilityId": "944064a0d91fe049", "scanner": "scanner-primary", "fingerprint": "8e4f20e4be889af9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6893a6c8b0861585", "level": "warning", "message": {"text": "Very low test-to-source ratio"}, "properties": {"repobilityId": "54a7de3f06314bf0", "scanner": "scanner-primary", "fingerprint": "6893a6c8b0861585", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "coverage"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "207492dfaee73fb2", "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": "d42733227d5f4f7a", "scanner": "scanner-primary", "fingerprint": "3ab5d313dda8e5f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["debug", "cleanup", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "note", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "8760e3e863f82866", "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": "4274113ae304721e", "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": "15115b1ba53d32c9", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-847cb00d57c33ed3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 qwen-weiwei/frontend/src/api/authHeader.js:21"}, "properties": {"repobilityId": "4b606ed350edf97f", "scanner": "scanner-primary", "fingerprint": "847cb00d57c33ed3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-74d0e1c397acf3b8", "level": "note", "message": {"text": "Legacy-named symbol `oa_pipeline_v2` in qwen-weiwei/backend/app/api/oa_agent.py:500"}, "properties": {"repobilityId": "1c04fb7b8bfd70ed", "scanner": "scanner-primary", "fingerprint": "74d0e1c397acf3b8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-7b3a2b36051be0a4", "level": "note", "message": {"text": "Legacy-named symbol `oa_pipeline_v2` in qwen-weiwei/backend/app/agents/oa_pipeline/__init__.py:12"}, "properties": {"repobilityId": "4cb9eed837977b97", "scanner": "scanner-primary", "fingerprint": "7b3a2b36051be0a4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-5f4fafaa495d70d9", "level": "note", "message": {"text": "Legacy-named symbol `analyze_v2` in qwen-weiwei/backend/app/agents/oa_pipeline/oa_pipeline_v2.py:4"}, "properties": {"repobilityId": "0e2a943a6e16f0f8", "scanner": "scanner-primary", "fingerprint": "5f4fafaa495d70d9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-a0678d685f02f3ea", "level": "none", "message": {"text": "Commented-code block (11 lines) in qwen-weiwei/backend/app/core/model_registry.py:42"}, "properties": {"repobilityId": "71ebc75108a35247", "scanner": "scanner-primary", "fingerprint": "a0678d685f02f3ea", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2da0002f5d9de28d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 weiwei/frontend/src/stores/miningAgent.js:61"}, "properties": {"repobilityId": "f37216e790438679", "scanner": "scanner-primary", "fingerprint": "2da0002f5d9de28d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-64abd33a56cf1d18", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 weiwei/frontend/src/api/authHeader.js:21"}, "properties": {"repobilityId": "5096395739decd4e", "scanner": "scanner-primary", "fingerprint": "64abd33a56cf1d18", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-68b07944efcb0d55", "level": "note", "message": {"text": "Legacy-named symbol `oa_pipeline_v2` in weiwei/backend/app/api/oa_agent.py:490"}, "properties": {"repobilityId": "51d43d3201704a16", "scanner": "scanner-primary", "fingerprint": "68b07944efcb0d55", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-ee50a20b52124ceb", "level": "note", "message": {"text": "Legacy-named symbol `oa_pipeline_v2` in weiwei/backend/app/agents/oa_pipeline/__init__.py:12"}, "properties": {"repobilityId": "1041ffcf666b8bb1", "scanner": "scanner-primary", "fingerprint": "ee50a20b52124ceb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-3193b8456f721b9e", "level": "note", "message": {"text": "Legacy-named symbol `analyze_v2` in weiwei/backend/app/agents/oa_pipeline/oa_pipeline_v2.py:4"}, "properties": {"repobilityId": "1aeed2f062526ed5", "scanner": "scanner-primary", "fingerprint": "3193b8456f721b9e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-1b94586b4b577ceb", "level": "none", "message": {"text": "Commented-code block (11 lines) in weiwei/backend/app/core/model_registry.py:42"}, "properties": {"repobilityId": "641cb4eff1c28ceb", "scanner": "scanner-primary", "fingerprint": "1b94586b4b577ceb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "5b0515663407311a", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-49c98f7cedd9c977", "level": "note", "message": {"text": "Near-duplicate function bodies in 4 places"}, "properties": {"repobilityId": "b7e3e2888de928f0", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-49c98f7cedd9c977", "level": "note", "message": {"text": "Near-duplicate function bodies in 4 places"}, "properties": {"repobilityId": "343173e1faced0a1", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-49c98f7cedd9c977", "level": "note", "message": {"text": "Near-duplicate function bodies in 4 places"}, "properties": {"repobilityId": "e59532913e120741", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-49c98f7cedd9c977", "level": "note", "message": {"text": "Near-duplicate function bodies in 4 places"}, "properties": {"repobilityId": "07e34bf61c667b4b", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-49c98f7cedd9c977", "level": "note", "message": {"text": "Near-duplicate function bodies in 4 places"}, "properties": {"repobilityId": "6efd9734b92fe8b2", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-49c98f7cedd9c977", "level": "note", "message": {"text": "Near-duplicate function bodies in 4 places"}, "properties": {"repobilityId": "c1d6e31c526174f5", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-49c98f7cedd9c977", "level": "note", "message": {"text": "Near-duplicate function bodies in 4 places"}, "properties": {"repobilityId": "2aa34f209c46f767", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-49c98f7cedd9c977", "level": "note", "message": {"text": "Near-duplicate function bodies in 4 places"}, "properties": {"repobilityId": "d686999ea02032fd", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-49c98f7cedd9c977", "level": "note", "message": {"text": "Near-duplicate function bodies in 4 places"}, "properties": {"repobilityId": "295f5234007d6ac6", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "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": "31ae19a7c3fdba49", "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": "c8f93ddbe97fbc57", "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": "73aa413afe9bcb7b", "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": "c6d723f01f2ffdb4", "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": "b619c4e6c49a9da6", "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": "ef6ec5b9e89dd6eb", "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": "f86c48b0f363fcc9", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-49c98f7cedd9c977", "level": "note", "message": {"text": "Near-duplicate function bodies in 4 places"}, "properties": {"repobilityId": "9f64b7727d6d4565", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-49c98f7cedd9c977", "level": "note", "message": {"text": "Near-duplicate function bodies in 4 places"}, "properties": {"repobilityId": "34ef79c3b209a07a", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-49c98f7cedd9c977", "level": "note", "message": {"text": "Near-duplicate function bodies in 4 places"}, "properties": {"repobilityId": "4a6ed6ef19f647f3", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-119d33e741b146e4", "level": "error", "message": {"text": "FastAPI POST `create_kb` without auth dependency \u2014 weiwei/backend/app/api/kb.py:60"}, "properties": {"repobilityId": "4f02136f44848f38", "scanner": "scanner-primary", "fingerprint": "119d33e741b146e4", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "weiwei/backend/app/api/kb.py"}, "region": {"startLine": 60}}}]}, {"ruleId": "scanner-4840d6616ebbfc7b", "level": "error", "message": {"text": "FastAPI DELETE `delete_kb` without auth dependency \u2014 weiwei/backend/app/api/kb.py:72"}, "properties": {"repobilityId": "68593ffea0ee7399", "scanner": "scanner-primary", "fingerprint": "4840d6616ebbfc7b", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "weiwei/backend/app/api/kb.py"}, "region": {"startLine": 72}}}]}, {"ruleId": "scanner-fa0cea927bfd1f0c", "level": "error", "message": {"text": "FastAPI PUT `upsert_skill` without auth dependency \u2014 weiwei/backend/app/api/admin.py:27"}, "properties": {"repobilityId": "62959bc07d9f04b7", "scanner": "scanner-primary", "fingerprint": "fa0cea927bfd1f0c", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "weiwei/backend/app/api/admin.py"}, "region": {"startLine": 27}}}]}, {"ruleId": "scanner-553854bac8bef086", "level": "error", "message": {"text": "FastAPI POST `reset_skill` without auth dependency \u2014 weiwei/backend/app/api/admin.py:43"}, "properties": {"repobilityId": "5d439c3c8c363ecf", "scanner": "scanner-primary", "fingerprint": "553854bac8bef086", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "weiwei/backend/app/api/admin.py"}, "region": {"startLine": 43}}}]}, {"ruleId": "scanner-83957765d2e0f221", "level": "error", "message": {"text": "FastAPI PUT `upsert_agent` without auth dependency \u2014 weiwei/backend/app/api/admin.py:116"}, "properties": {"repobilityId": "7eade6bd46684de0", "scanner": "scanner-primary", "fingerprint": "83957765d2e0f221", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "weiwei/backend/app/api/admin.py"}, "region": {"startLine": 116}}}]}, {"ruleId": "scanner-00b7b6132dfaec48", "level": "error", "message": {"text": "FastAPI POST `send_message` without auth dependency \u2014 weiwei/backend/app/api/agent.py:70"}, "properties": {"repobilityId": "97362186f8d61398", "scanner": "scanner-primary", "fingerprint": "00b7b6132dfaec48", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "weiwei/backend/app/api/agent.py"}, "region": {"startLine": 70}}}]}, {"ruleId": "scanner-257a7c1b958e2659", "level": "error", "message": {"text": "FastAPI POST `ingest_document` without auth dependency \u2014 weiwei/backend/app/api/rag.py:549"}, "properties": {"repobilityId": "bf4224469903f99c", "scanner": "scanner-primary", "fingerprint": "257a7c1b958e2659", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "weiwei/backend/app/api/rag.py"}, "region": {"startLine": 549}}}]}, {"ruleId": "scanner-f99fc7f3dbdc905b", "level": "error", "message": {"text": "FastAPI POST `rag_search` without auth dependency \u2014 weiwei/backend/app/api/rag.py:595"}, "properties": {"repobilityId": "7e2609bdc480a007", "scanner": "scanner-primary", "fingerprint": "f99fc7f3dbdc905b", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "weiwei/backend/app/api/rag.py"}, "region": {"startLine": 595}}}]}, {"ruleId": "scanner-03de2cbcce6b939b", "level": "error", "message": {"text": "FastAPI DELETE `delete_document_endpoint` without auth dependency \u2014 weiwei/backend/app/api/rag.py:906"}, "properties": {"repobilityId": "3f7ef472021b4cc0", "scanner": "scanner-primary", "fingerprint": "03de2cbcce6b939b", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "weiwei/backend/app/api/rag.py"}, "region": {"startLine": 906}}}]}, {"ruleId": "scanner-cc10c5b971d80f6b", "level": "error", "message": {"text": "FastAPI POST `submit_feedback` without auth dependency \u2014 weiwei/backend/app/api/rag.py:956"}, "properties": {"repobilityId": "11e028da239c5563", "scanner": "scanner-primary", "fingerprint": "cc10c5b971d80f6b", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "weiwei/backend/app/api/rag.py"}, "region": {"startLine": 956}}}]}, {"ruleId": "scanner-5bc414009937c2d0", "level": "error", "message": {"text": "FastAPI DELETE `delete_document` without auth dependency \u2014 weiwei/backend/app/api/documents.py:107"}, "properties": {"repobilityId": "7772a670cb4694fb", "scanner": "scanner-primary", "fingerprint": "5bc414009937c2d0", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "weiwei/backend/app/api/documents.py"}, "region": {"startLine": 107}}}]}, {"ruleId": "scanner-fbd2832ee9542cba", "level": "error", "message": {"text": "Dangling fetch: POST /api/auth/login (qwen-weiwei/frontend/src/stores/appStore.js:91)"}, "properties": {"repobilityId": "b21d99c2e6878fb4", "scanner": "scanner-primary", "fingerprint": "fbd2832ee9542cba", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-283361621c4824eb", "level": "error", "message": {"text": "Dangling fetch: POST /api/auth/change-password (qwen-weiwei/frontend/src/stores/appStore.js:122)"}, "properties": {"repobilityId": "17deba712f9715a4", "scanner": "scanner-primary", "fingerprint": "283361621c4824eb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-430b131a32c040c0", "level": "error", "message": {"text": "Dangling fetch: GET /api/auth/me (weiwei/frontend/src/stores/appStore.js:77)"}, "properties": {"repobilityId": "5125f6067857bde9", "scanner": "scanner-primary", "fingerprint": "430b131a32c040c0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-802bd9a40a8e0e71", "level": "error", "message": {"text": "Dangling fetch: POST /api/auth/login (weiwei/frontend/src/stores/appStore.js:111)"}, "properties": {"repobilityId": "51db52cd2eab8dc1", "scanner": "scanner-primary", "fingerprint": "802bd9a40a8e0e71", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bc40f719109d6a31", "level": "error", "message": {"text": "Dangling fetch: POST /api/auth/change-password (weiwei/frontend/src/stores/appStore.js:142)"}, "properties": {"repobilityId": "2df7ab9c5b856637", "scanner": "scanner-primary", "fingerprint": "bc40f719109d6a31", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4756b4c4da7d2088", "level": "note", "message": {"text": "Unused endpoint: GET /api/health"}, "properties": {"repobilityId": "987f0cb0c5b3dab7", "scanner": "scanner-primary", "fingerprint": "4756b4c4da7d2088", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4a0b96cac1e6c501", "level": "note", "message": {"text": "Unused endpoint: POST /pipeline/start_stage1"}, "properties": {"repobilityId": "21acc3c53379f8b9", "scanner": "scanner-primary", "fingerprint": "4a0b96cac1e6c501", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3ca257d50b155400", "level": "note", "message": {"text": "Unused endpoint: POST /pipeline/start_stage2"}, "properties": {"repobilityId": "d978f0b5f5821937", "scanner": "scanner-primary", "fingerprint": "3ca257d50b155400", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-537ecf399d2125dd", "level": "note", "message": {"text": "Unused endpoint: POST /pipeline/start_stage3"}, "properties": {"repobilityId": "2eceab56aca9a467", "scanner": "scanner-primary", "fingerprint": "537ecf399d2125dd", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b39c70f70ae0cfa8", "level": "note", "message": {"text": "Unused endpoint: GET /sessions/{session_id}/matrix"}, "properties": {"repobilityId": "c219624fec5704e3", "scanner": "scanner-primary", "fingerprint": "b39c70f70ae0cfa8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1cb154b78e52ff81", "level": "note", "message": {"text": "Unused endpoint: PATCH /comparisons/{comparison_id}"}, "properties": {"repobilityId": "8a73847228a5f0a3", "scanner": "scanner-primary", "fingerprint": "1cb154b78e52ff81", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0ff8e0010299cb2f", "level": "note", "message": {"text": "Unused endpoint: PUT /sessions/{session_id}/matrix"}, "properties": {"repobilityId": "62feacab1b83e661", "scanner": "scanner-primary", "fingerprint": "0ff8e0010299cb2f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-baf4721bea8f0906", "level": "note", "message": {"text": "Unused endpoint: PATCH /sessions/{session_id}/model"}, "properties": {"repobilityId": "11da636721c39f9b", "scanner": "scanner-primary", "fingerprint": "baf4721bea8f0906", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-85a7608b63032dd1", "level": "note", "message": {"text": "Unused endpoint: GET /sessions/{session_id}/download_report"}, "properties": {"repobilityId": "557547d8758b2d4b", "scanner": "scanner-primary", "fingerprint": "85a7608b63032dd1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5baa8971ebe192a1", "level": "note", "message": {"text": "Unused endpoint: GET /"}, "properties": {"repobilityId": "5e13b7a2d487fa00", "scanner": "scanner-primary", "fingerprint": "5baa8971ebe192a1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7a009b1a56794f45", "level": "note", "message": {"text": "Unused endpoint: POST /"}, "properties": {"repobilityId": "083a5625f0ef1cf0", "scanner": "scanner-primary", "fingerprint": "7a009b1a56794f45", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7a9aea5834dd9d3d", "level": "note", "message": {"text": "Unused endpoint: GET /{session_id}/messages"}, "properties": {"repobilityId": "60f15dc616ae6fe9", "scanner": "scanner-primary", "fingerprint": "7a9aea5834dd9d3d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-173ad25a6a1cb443", "level": "note", "message": {"text": "Unused endpoint: DELETE /{session_id}"}, "properties": {"repobilityId": "e41f493ba55852cd", "scanner": "scanner-primary", "fingerprint": "173ad25a6a1cb443", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-593d9b4072f92e9f", "level": "note", "message": {"text": "Unused endpoint: PATCH /{session_id}"}, "properties": {"repobilityId": "58b7aabf3f8a2825", "scanner": "scanner-primary", "fingerprint": "593d9b4072f92e9f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-618721b912bad1c2", "level": "note", "message": {"text": "Unused endpoint: POST /login"}, "properties": {"repobilityId": "24ee69f171c55be8", "scanner": "scanner-primary", "fingerprint": "618721b912bad1c2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4fe9bb486644f008", "level": "note", "message": {"text": "Unused endpoint: POST /change-password"}, "properties": {"repobilityId": "49d0d12d7b9a2745", "scanner": "scanner-primary", "fingerprint": "4fe9bb486644f008", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fd1dc91abf32142d", "level": "note", "message": {"text": "Unused endpoint: GET /me"}, "properties": {"repobilityId": "59d37c5476ccffb4", "scanner": "scanner-primary", "fingerprint": "fd1dc91abf32142d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-60f57e4109bc7862", "level": "note", "message": {"text": "Unused endpoint: DELETE /{kb_id}"}, "properties": {"repobilityId": "d868c49049bbe995", "scanner": "scanner-primary", "fingerprint": "60f57e4109bc7862", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5c5c6900e4670966", "level": "note", "message": {"text": "Unused endpoint: GET /skills"}, "properties": {"repobilityId": "c5d21783fc866b35", "scanner": "scanner-primary", "fingerprint": "5c5c6900e4670966", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ee9062b772582f21", "level": "note", "message": {"text": "Unused endpoint: PUT /skills/{name}"}, "properties": {"repobilityId": "e5ef2d550ecb98c7", "scanner": "scanner-primary", "fingerprint": "ee9062b772582f21", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-118b5eca5866b978", "level": "note", "message": {"text": "Unused endpoint: POST /skills/{name}/reset"}, "properties": {"repobilityId": "0233dc6ed81ed00b", "scanner": "scanner-primary", "fingerprint": "118b5eca5866b978", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3140e61d7cac5091", "level": "note", "message": {"text": "Unused endpoint: GET /agents"}, "properties": {"repobilityId": "41fcceb5874e053d", "scanner": "scanner-primary", "fingerprint": "3140e61d7cac5091", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-90fabf3759d68967", "level": "note", "message": {"text": "Unused endpoint: GET /agents/{name}"}, "properties": {"repobilityId": "39660c821480e3cb", "scanner": "scanner-primary", "fingerprint": "90fabf3759d68967", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4c256aca878ecf09", "level": "note", "message": {"text": "Unused endpoint: PUT /agents/{name}"}, "properties": {"repobilityId": "1bc979113434a3f8", "scanner": "scanner-primary", "fingerprint": "4c256aca878ecf09", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0701b80fc94a86ca", "level": "note", "message": {"text": "Unused endpoint: GET /{session_id}/documents"}, "properties": {"repobilityId": "0bab1f9665787538", "scanner": "scanner-primary", "fingerprint": "0701b80fc94a86ca", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-646905f54906a60a", "level": "note", "message": {"text": "Unused endpoint: PATCH /{user_id}"}, "properties": {"repobilityId": "f1d3457e84926a26", "scanner": "scanner-primary", "fingerprint": "646905f54906a60a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-55c93ee7e031a509", "level": "note", "message": {"text": "Unused endpoint: DELETE /{user_id}"}, "properties": {"repobilityId": "6e235020060a5e66", "scanner": "scanner-primary", "fingerprint": "55c93ee7e031a509", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2ab9bf5db6820af4", "level": "note", "message": {"text": "Unused endpoint: GET /models"}, "properties": {"repobilityId": "105a5a9ce36e7210", "scanner": "scanner-primary", "fingerprint": "2ab9bf5db6820af4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b899602ae1750689", "level": "note", "message": {"text": "Unused endpoint: POST /analyze_v2"}, "properties": {"repobilityId": "fe83a53ef8360550", "scanner": "scanner-primary", "fingerprint": "b899602ae1750689", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-04cb5daba74fa9a9", "level": "note", "message": {"text": "Unused endpoint: POST /analyze_v2/stream"}, "properties": {"repobilityId": "dbec6e0195da6133", "scanner": "scanner-primary", "fingerprint": "04cb5daba74fa9a9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-74fb0c42126b742b", "level": "note", "message": {"text": "Unused endpoint: GET /download/{doc_type}/{session_id}"}, "properties": {"repobilityId": "6b361a6a40b4a1a1", "scanner": "scanner-primary", "fingerprint": "74fb0c42126b742b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-92efb2dc9205e7a4", "level": "note", "message": {"text": "Unused endpoint: POST /sessions"}, "properties": {"repobilityId": "4eaba9175e59e63a", "scanner": "scanner-primary", "fingerprint": "92efb2dc9205e7a4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b15d518d538de57d", "level": "note", "message": {"text": "Unused endpoint: GET /sessions"}, "properties": {"repobilityId": "3c791f68270e5a3d", "scanner": "scanner-primary", "fingerprint": "b15d518d538de57d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-615890562ffa2154", "level": "note", "message": {"text": "Unused endpoint: POST /sessions/{session_id}/message"}, "properties": {"repobilityId": "946439d4e1e77d81", "scanner": "scanner-primary", "fingerprint": "615890562ffa2154", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cff8da5fbc19c76d", "level": "note", "message": {"text": "Unused endpoint: POST /chat"}, "properties": {"repobilityId": "e035e8a627c39ab3", "scanner": "scanner-primary", "fingerprint": "cff8da5fbc19c76d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6dff1badc14e884f", "level": "note", "message": {"text": "Unused endpoint: POST /ingest/{task_id}"}, "properties": {"repobilityId": "1907631771de781f", "scanner": "scanner-primary", "fingerprint": "6dff1badc14e884f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-17a164638609b114", "level": "note", "message": {"text": "Unused endpoint: POST /search"}, "properties": {"repobilityId": "43bde692b35bc324", "scanner": "scanner-primary", "fingerprint": "17a164638609b114", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-56cfdb85004a48e9", "level": "note", "message": {"text": "Unused endpoint: GET /patents/{document_id}/images"}, "properties": {"repobilityId": "cb7b717370899793", "scanner": "scanner-primary", "fingerprint": "56cfdb85004a48e9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a7effef5e94db46b", "level": "note", "message": {"text": "Unused endpoint: GET /patents/{document_id}/images/{filename:path}"}, "properties": {"repobilityId": "c7cec64f7fa65de5", "scanner": "scanner-primary", "fingerprint": "a7effef5e94db46b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-166080b0dcf695cc", "level": "note", "message": {"text": "Unused endpoint: GET /images/{document_id}/{filename:path}"}, "properties": {"repobilityId": "29f3879b53c460e7", "scanner": "scanner-primary", "fingerprint": "166080b0dcf695cc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ffc9ad08ed6cdd74", "level": "note", "message": {"text": "Unused endpoint: GET /documents"}, "properties": {"repobilityId": "86dc534eb4950cb6", "scanner": "scanner-primary", "fingerprint": "ffc9ad08ed6cdd74", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cb893b221c03719a", "level": "note", "message": {"text": "Unused endpoint: GET /documents/{document_id}/info"}, "properties": {"repobilityId": "07c15c42f98ea177", "scanner": "scanner-primary", "fingerprint": "cb893b221c03719a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6fb2dafafa851151", "level": "note", "message": {"text": "Unused endpoint: GET /documents/{document_id}/chunks"}, "properties": {"repobilityId": "04e5d23a90137a35", "scanner": "scanner-primary", "fingerprint": "6fb2dafafa851151", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1ad71e63f8916e8c", "level": "note", "message": {"text": "Unused endpoint: DELETE /documents/{document_id}"}, "properties": {"repobilityId": "eda7993c2d01be34", "scanner": "scanner-primary", "fingerprint": "1ad71e63f8916e8c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8f95d7ec49f00406", "level": "note", "message": {"text": "Unused endpoint: POST /feedback"}, "properties": {"repobilityId": "5ffdb6b4ac131981", "scanner": "scanner-primary", "fingerprint": "8f95d7ec49f00406", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5766b6a628042997", "level": "note", "message": {"text": "Unused endpoint: GET /feedback"}, "properties": {"repobilityId": "3599b1e823ccb388", "scanner": "scanner-primary", "fingerprint": "5766b6a628042997", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8d22204953b8b32e", "level": "note", "message": {"text": "Unused endpoint: GET /files/preview/{document_id}"}, "properties": {"repobilityId": "f1fbd4ea05bc515d", "scanner": "scanner-primary", "fingerprint": "8d22204953b8b32e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6236b283b79811b8", "level": "note", "message": {"text": "Unused endpoint: POST /upload"}, "properties": {"repobilityId": "bb12d1ddb06832b1", "scanner": "scanner-primary", "fingerprint": "6236b283b79811b8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a9ada54c6099bd33", "level": "note", "message": {"text": "Unused endpoint: GET /{document_id}"}, "properties": {"repobilityId": "5dffabf769f78c09", "scanner": "scanner-primary", "fingerprint": "a9ada54c6099bd33", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b2d9ebcfd4b9e397", "level": "note", "message": {"text": "Unused endpoint: DELETE /{document_id}"}, "properties": {"repobilityId": "72dc761d4f3fdaac", "scanner": "scanner-primary", "fingerprint": "b2d9ebcfd4b9e397", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}