{"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-5448ba33139c8925", "name": "Possibly dead Python function: read_secret_no_echo", "shortDescription": {"text": "Possibly dead Python function: read_secret_no_echo"}, "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-f5f2ca9d89c42436", "name": "Possibly dead Python function: apply_confirmation_answers_to_args", "shortDescription": {"text": "Possibly dead Python function: apply_confirmation_answers_to_args"}, "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-21f9f98a5060630e", "name": "Possibly dead Python function: detect_docker_missing_secrets", "shortDescription": {"text": "Possibly dead Python function: detect_docker_missing_secrets"}, "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-b697dbcc6f25a8cd", "name": "Possibly dead Python function: llm_concurrency_from_config", "shortDescription": {"text": "Possibly dead Python function: llm_concurrency_from_config"}, "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-30efff9eaa5d561f", "name": "Possibly dead Python function: pool_count", "shortDescription": {"text": "Possibly dead Python function: pool_count"}, "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-cfb4ec6de7518a44", "name": "Possibly dead Python function: score_candidates_async", "shortDescription": {"text": "Possibly dead Python function: score_candidates_async"}, "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-0d9ed70d75be5d34", "name": "Possibly dead Python function: generate_personal_topic", "shortDescription": {"text": "Possibly dead Python function: generate_personal_topic"}, "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-591ad19ba5258cb3", "name": "Possibly dead Python function: clear_cookie", "shortDescription": {"text": "Possibly dead Python function: clear_cookie"}, "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-8824a938e3150fb6", "name": "Possibly dead Python function: auth_guard", "shortDescription": {"text": "Possibly dead Python function: auth_guard"}, "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-27c76f1620de8c10", "name": "Possibly dead Python function: register_skill", "shortDescription": {"text": "Possibly dead Python function: register_skill"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-179345d94d326c24", "name": "Possibly dead Python function: run_discovery_cycle", "shortDescription": {"text": "Possibly dead Python function: run_discovery_cycle"}, "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-761852c2b37696f3", "name": "Possibly dead Python function: describe_all", "shortDescription": {"text": "Possibly dead Python function: describe_all"}, "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-3dca96a991337047", "name": "Possibly dead Python function: yt_bootstrap_item_key", "shortDescription": {"text": "Possibly dead Python function: yt_bootstrap_item_key"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-59078a28c73414b0", "name": "Possibly dead Python function: load_record", "shortDescription": {"text": "Possibly dead Python function: load_record"}, "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-fed9d0176863c249", "name": "Possibly dead Python function: clear_cookie", "shortDescription": {"text": "Possibly dead Python function: clear_cookie"}, "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-445190355341eaa9", "name": "Possibly dead Python function: kick_douyin_task_dispatcher", "shortDescription": {"text": "Possibly dead Python function: kick_douyin_task_dispatcher"}, "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-b6003491d7da818a", "name": "Possibly dead Python function: xhs_bootstrap_note_key", "shortDescription": {"text": "Possibly dead Python function: xhs_bootstrap_note_key"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0585954eeda7223f", "name": "Stray `console.log` in TS/JS \u2014 extension/src/content/bilibili.ts:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 extension/src/content/bilibili.ts:15"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8d5dfc711308d36c", "name": "Stray `console.log` in TS/JS \u2014 extension/src/content/xiaohongshu.ts:224", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 extension/src/content/xiaohongshu.ts:224"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ce1b85b6eaada2e3", "name": "Stray `console.log` in TS/JS \u2014 extension/src/content/x.ts:93", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 extension/src/content/x.ts:93"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0f3164773d65fe6b", "name": "Stray `console.log` in TS/JS \u2014 extension/src/background/service-worker.ts:629", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 extension/src/background/service-worker.ts:629"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0d721b5dac5b777e", "name": "Stray `console.log` in TS/JS \u2014 extension/src/background/cookie-sync.ts:229", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 extension/src/background/cookie-sync.ts:229"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ebb13b2e6367063a", "name": "Icon-only button without accessible name \u2014 src/openbiliclaw/web/js/views/profile.js:584", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/openbiliclaw/web/js/views/profile.js:584"}, "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-67f8b25c19c83ca0", "name": "Icon-only button without accessible name \u2014 src/openbiliclaw/web/desktop/assets/js/app.js:2250", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/openbiliclaw/web/desktop/assets/js/app.js:2250"}, "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-d63da3583b14afc0", "name": "Dockerfile runs as root: Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: 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-e066691601852931", "name": "Docker base image is tag-pinned but not digest-pinned: python:3.11-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.11-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-e0d18d012da82f36", "name": "Insecure pattern 'subprocess_shell_true' in scripts/agent_bootstrap.py:1202", "shortDescription": {"text": "Insecure pattern 'subprocess_shell_true' in scripts/agent_bootstrap.py:1202"}, "fullDescription": {"text": "Found a known-risky pattern (subprocess_shell_true). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f1c2b047aed125b4", "name": "Insecure pattern 'node_child_process' in extension/scripts/package-firefox.mjs:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in extension/scripts/package-firefox.mjs:1"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c90a5a511a4b8fa1", "name": "Insecure pattern 'node_child_process' in extension/scripts/package.mjs:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in extension/scripts/package.mjs:1"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-fef1d76dce801e2c", "name": "Insecure pattern 'direct_innerhtml_assignment' in extension/popup/popup.js:2111", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in extension/popup/popup.js:2111"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ddd6bdab33e17af3", "name": "Insecure pattern 'subprocess_shell_true' in src/openbiliclaw/cli.py:1367", "shortDescription": {"text": "Insecure pattern 'subprocess_shell_true' in src/openbiliclaw/cli.py:1367"}, "fullDescription": {"text": "Found a known-risky pattern (subprocess_shell_true). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5f59c1f5d2c3d318", "name": "Insecure pattern 'cors_wildcard' in src/openbiliclaw/api/auth.py:367", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in src/openbiliclaw/api/auth.py:367"}, "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-14daa1e199c26ce7", "name": "Insecure pattern 'cors_wildcard' in src/openbiliclaw/api/app.py:608", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in src/openbiliclaw/api/app.py:608"}, "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-69751bfc1ed8007e", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/openbiliclaw/web/js/app.js:22", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/openbiliclaw/web/js/app.js:22"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e15e6b76eba16536", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/openbiliclaw/web/js/views/saved.js:41", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/openbiliclaw/web/js/views/saved.js:41"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-120d8b75120eed46", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/openbiliclaw/web/js/views/recommend.js:120", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/openbiliclaw/web/js/views/recommend.js:120"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4d37a960b93a3484", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/openbiliclaw/web/js/views/login.js:12", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/openbiliclaw/web/js/views/login.js:12"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2940600258842a0a", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/openbiliclaw/web/js/views/chat.js:99", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/openbiliclaw/web/js/views/chat.js:99"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-01b67b904688e86c", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/openbiliclaw/web/js/views/profile.js:104", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/openbiliclaw/web/js/views/profile.js:104"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e1ab2f199fe2292c", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/openbiliclaw/web/desktop/assets/js/app.js:490", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/openbiliclaw/web/desktop/assets/js/app.js:490"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e034a18ba57ae833", "name": "Insecure pattern 'direct_outerhtml_assignment' in src/openbiliclaw/web/desktop/assets/js/app.js:2546", "shortDescription": {"text": "Insecure pattern 'direct_outerhtml_assignment' in src/openbiliclaw/web/desktop/assets/js/app.js:2546"}, "fullDescription": {"text": "Found a known-risky pattern (direct_outerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f6f5b121f55a680b", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/openbiliclaw/web/setup/index.html:270", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/openbiliclaw/web/setup/index.html:270"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-728fd43e7ecd8a2d", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v6 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1c090c7bfc3f2fc8", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v6 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-168d90d0da1bc76c", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d76eaf0bd66712c9", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v6 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b95d7b10e8652696", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-27924aa79fa4a517", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v6 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8355bdc1ce844cbb", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v6 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3b3f97b695be8d0d", "name": "Very large file: tests/test_api_xhs_ingest.py (1354 lines)", "shortDescription": {"text": "Very large file: tests/test_api_xhs_ingest.py (1354 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-f1ce9a36ae8ede78", "name": "Very large file: tests/test_storage.py (3031 lines)", "shortDescription": {"text": "Very large file: tests/test_storage.py (3031 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-238c5af14e7334b9", "name": "Very large file: tests/test_recommendation_engine.py (2787 lines)", "shortDescription": {"text": "Very large file: tests/test_recommendation_engine.py (2787 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-ad81ca22902dd86c", "name": "Very large file: tests/test_pipeline_advanced.py (3052 lines)", "shortDescription": {"text": "Very large file: tests/test_pipeline_advanced.py (3052 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-a403b9c067a5d0ee", "name": "Very large file: tests/test_api_app.py (8143 lines)", "shortDescription": {"text": "Very large file: tests/test_api_app.py (8143 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-c96174ec60d2b5f2", "name": "Very large file: tests/test_config.py (1966 lines)", "shortDescription": {"text": "Very large file: tests/test_config.py (1966 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-dccd15593ad5e02c", "name": "Very large file: tests/test_speculator.py (1445 lines)", "shortDescription": {"text": "Very large file: tests/test_speculator.py (1445 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-5ecc353191aa0db4", "name": "Very large file: tests/test_cli.py (5701 lines)", "shortDescription": {"text": "Very large file: tests/test_cli.py (5701 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-404e03173a3c2a6d", "name": "Very large file: tests/test_refresh_runtime.py (3433 lines)", "shortDescription": {"text": "Very large file: tests/test_refresh_runtime.py (3433 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-0774a7157053ad8b", "name": "Very large file: tests/test_discovery_engine.py (2190 lines)", "shortDescription": {"text": "Very large file: tests/test_discovery_engine.py (2190 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-fe47ce4235b5fd91", "name": "Very large file: tests/test_llm_registry.py (1518 lines)", "shortDescription": {"text": "Very large file: tests/test_llm_registry.py (1518 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-0dce53b68c65bc81", "name": "Very large file: scripts/agent_bootstrap.py (3279 lines)", "shortDescription": {"text": "Very large file: scripts/agent_bootstrap.py (3279 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-21b497b082502cae", "name": "Very large file: extension/popup/popup.js (6764 lines)", "shortDescription": {"text": "Very large file: extension/popup/popup.js (6764 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-2a60ab756346c6ad", "name": "Very large file: extension/src/content/douyin.ts (1508 lines)", "shortDescription": {"text": "Very large file: extension/src/content/douyin.ts (1508 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-313d50924cc7c24f", "name": "Very large file: src/openbiliclaw/config.py (1970 lines)", "shortDescription": {"text": "Very large file: src/openbiliclaw/config.py (1970 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-27a4efafda9c964c", "name": "Very large file: src/openbiliclaw/cli.py (7099 lines)", "shortDescription": {"text": "Very large file: src/openbiliclaw/cli.py (7099 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-0a4ce19a356ab597", "name": "Very large file: src/openbiliclaw/recommendation/engine.py (2607 lines)", "shortDescription": {"text": "Very large file: src/openbiliclaw/recommendation/engine.py (2607 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-b67beeb919883af2", "name": "Very large file: src/openbiliclaw/api/app.py (7731 lines)", "shortDescription": {"text": "Very large file: src/openbiliclaw/api/app.py (7731 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-1695546a386a3441", "name": "Very large file: src/openbiliclaw/api/runtime_context.py (1216 lines)", "shortDescription": {"text": "Very large file: src/openbiliclaw/api/runtime_context.py (1216 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-aaeb538c04c34c3d", "name": "Very large file: src/openbiliclaw/soul/engine.py (1537 lines)", "shortDescription": {"text": "Very large file: src/openbiliclaw/soul/engine.py (1537 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-61666e8d93f64d5e", "name": "Very large file: src/openbiliclaw/soul/speculator.py (1843 lines)", "shortDescription": {"text": "Very large file: src/openbiliclaw/soul/speculator.py (1843 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-42dec2b716248fd3", "name": "Very large file: src/openbiliclaw/web/js/views/recommend.js (1402 lines)", "shortDescription": {"text": "Very large file: src/openbiliclaw/web/js/views/recommend.js (1402 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-b34bf9c10d5abe99", "name": "Very large file: src/openbiliclaw/web/desktop/assets/js/app.js (4549 lines)", "shortDescription": {"text": "Very large file: src/openbiliclaw/web/desktop/assets/js/app.js (4549 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-770adc45a9bedee0", "name": "Very large file: src/openbiliclaw/runtime/refresh.py (2595 lines)", "shortDescription": {"text": "Very large file: src/openbiliclaw/runtime/refresh.py (2595 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-624fcdd26e1b9b60", "name": "Very large file: src/openbiliclaw/discovery/engine.py (2514 lines)", "shortDescription": {"text": "Very large file: src/openbiliclaw/discovery/engine.py (2514 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-5488dbc823e9be9c", "name": "Very large file: src/openbiliclaw/storage/database.py (5531 lines)", "shortDescription": {"text": "Very large file: src/openbiliclaw/storage/database.py (5531 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-f94ae1a70f028e35", "name": "Very large file: src/openbiliclaw/llm/prompts.py (2181 lines)", "shortDescription": {"text": "Very large file: src/openbiliclaw/llm/prompts.py (2181 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 326 console/debugger/print-style debug statements in non-test source. This is a common fast-generation residue before production cleanup."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-72b2a6250083a784", "name": "Placeholder or mock-heavy implementation detected", "shortDescription": {"text": "Placeholder or mock-heavy implementation detected"}, "fullDescription": {"text": "Found 78 placeholder/mock markers across 22 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4a51a6513cf7a0d0", "name": "Agent instruction contains unpinned remote install: skills/browse/SKILL.md", "shortDescription": {"text": "Agent instruction contains unpinned remote install: skills/browse/SKILL.md"}, "fullDescription": {"text": "Remote install commands in agent instructions are a supply-chain risk, especially when an agent can execute shell commands."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e725d2ab884fbd49", "name": "Multiple root agent instruction files without precedence", "shortDescription": {"text": "Multiple root agent instruction files without precedence"}, "fullDescription": {"text": "The repo has multiple top-level AI-coder instruction files. Without precedence rules, different agents may follow different policies."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ff4f62f06ce51225", "name": "Legacy-named symbol `test_get_pool_candidates_skips_rows_without_precomputed_copy` in tests/test_storage.py:1586", "shortDescription": {"text": "Legacy-named symbol `test_get_pool_candidates_skips_rows_without_precomputed_copy` in tests/test_storage.py:1586"}, "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-c27db689703dbdff", "name": "Commented-code block (5 lines) in tests/test_storage.py:502", "shortDescription": {"text": "Commented-code block (5 lines) in tests/test_storage.py:502"}, "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-882ff658d8e24bce", "name": "Legacy-named symbol `test_reshuffle_recommendations_hides_missing_precomputed_copy` in tests/test_recommendation_engine.", "shortDescription": {"text": "Legacy-named symbol `test_reshuffle_recommendations_hides_missing_precomputed_copy` in tests/test_recommendation_engine.py:1070"}, "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-c21ff602e43cd695", "name": "Commented-code block (5 lines) in tests/test_llm_prompts.py:457", "shortDescription": {"text": "Commented-code block (5 lines) in tests/test_llm_prompts.py:457"}, "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-6097dac594465c79", "name": "Legacy-named symbol `test_referenced_needed_cover_kept_even_when_old` in tests/test_image_cache.py:150", "shortDescription": {"text": "Legacy-named symbol `test_referenced_needed_cover_kept_even_when_old` in tests/test_image_cache.py:150"}, "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-514396565168c1e1", "name": "Legacy-named symbol `test_apply_overrides_empty_is_pure_copy` in tests/test_overrides.py:83", "shortDescription": {"text": "Legacy-named symbol `test_apply_overrides_empty_is_pure_copy` in tests/test_overrides.py:83"}, "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-a7395b64fc2b4df1", "name": "Legacy-named symbol `precompute_pool_copy` in tests/test_api_app.py:288", "shortDescription": {"text": "Legacy-named symbol `precompute_pool_copy` in tests/test_api_app.py:288"}, "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-1fa64a2849664179", "name": "Legacy-named symbol `test_twitter_engagement_scoring_v1` in tests/test_event_satisfaction.py:155", "shortDescription": {"text": "Legacy-named symbol `test_twitter_engagement_scoring_v1` in tests/test_event_satisfaction.py:155"}, "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-524d4956acf628bb", "name": "Commented-code block (5 lines) in tests/test_x_client.py:44", "shortDescription": {"text": "Commented-code block (5 lines) in tests/test_x_client.py:44"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3dad49b2d9b00769", "name": "Legacy-named symbol `acct_old` in tests/test_codex_auth.py:104", "shortDescription": {"text": "Legacy-named symbol `acct_old` in tests/test_codex_auth.py:104"}, "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-b3ac4eba2bf1a1ed", "name": "Legacy-named symbol `BV_legacy` in tests/test_franchise_key_e2e.py:74", "shortDescription": {"text": "Legacy-named symbol `BV_legacy` in tests/test_franchise_key_e2e.py:74"}, "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-cf1d5975683617b3", "name": "Legacy-named symbol `exec_old` in tests/test_discovery_keywords.py:243", "shortDescription": {"text": "Legacy-named symbol `exec_old` in tests/test_discovery_keywords.py:243"}, "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-e9ef4f581f3c2ed8", "name": "Commented-code block (5 lines) in tests/test_api_auth.py:674", "shortDescription": {"text": "Commented-code block (5 lines) in tests/test_api_auth.py:674"}, "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-4fa778e80aeb0fc4", "name": "Legacy-named symbol `_maybe_create_runtime_database_backup` in tests/test_cli.py:527", "shortDescription": {"text": "Legacy-named symbol `_maybe_create_runtime_database_backup` in tests/test_cli.py:527"}, "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-24dbe7f24a790ac0", "name": "Commented-code block (9 lines) in tests/test_cli.py:2482", "shortDescription": {"text": "Commented-code block (9 lines) in tests/test_cli.py:2482"}, "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-bb1f85dbe5fc1179", "name": "Commented-code block (5 lines) in tests/test_e2e_multi_source_diversity.py:435", "shortDescription": {"text": "Commented-code block (5 lines) in tests/test_e2e_multi_source_diversity.py:435"}, "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-34db756e97f304a2", "name": "Commented-code block (6 lines) in tests/test_trending_strategy.py:290", "shortDescription": {"text": "Commented-code block (6 lines) in tests/test_trending_strategy.py:290"}, "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-d66b4c88568d1949", "name": "Legacy-named symbol `test_migrate_noop_when_nothing_legacy` in tests/test_packaging_entry.py:253", "shortDescription": {"text": "Legacy-named symbol `test_migrate_noop_when_nothing_legacy` in tests/test_packaging_entry.py:253"}, "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-586542bbd6fd89c3", "name": "Legacy-named symbol `test_keeps_yielded_word_even_when_old` in tests/test_keyword_yield.py:118", "shortDescription": {"text": "Legacy-named symbol `test_keeps_yielded_word_even_when_old` in tests/test_keyword_yield.py:118"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9e384ae0b7678f93", "name": "Legacy-named symbol `precompute_pool_copy` in tests/test_refresh_runtime.py:420", "shortDescription": {"text": "Legacy-named symbol `precompute_pool_copy` in tests/test_refresh_runtime.py:420"}, "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-91c6a6393263a1bb", "name": "Commented-code block (5 lines) in tests/test_refresh_runtime.py:1217", "shortDescription": {"text": "Commented-code block (5 lines) in tests/test_refresh_runtime.py:1217"}, "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-81470746f8a1a4c6", "name": "Commented-code block (6 lines) in tests/test_llm_usage.py:332", "shortDescription": {"text": "Commented-code block (6 lines) in tests/test_llm_usage.py:332"}, "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-59eb9ac8e65cf67e", "name": "Legacy-named symbol `test_database_get_delight_candidate_requires_ready_copy` in tests/test_delight_scorer.py:300", "shortDescription": {"text": "Legacy-named symbol `test_database_get_delight_candidate_requires_ready_copy` in tests/test_delight_scorer.py:300"}, "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-f925ca46edf599d4", "name": "Commented-code block (6 lines) in scripts/agent_bootstrap.py:103", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/agent_bootstrap.py:103"}, "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-64aae796d65e7982", "name": "Network/subprocess call without timeout or try/except \u2014 scripts/agent_bootstrap.py:1229", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/agent_bootstrap.py:1229"}, "fullDescription": {"text": "`subprocess.Popen(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9406a01d4bca9a9e", "name": "Commented-code block (5 lines) in extension/tests/xhs-task-executor.test.ts:876", "shortDescription": {"text": "Commented-code block (5 lines) in extension/tests/xhs-task-executor.test.ts:876"}, "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-3ba520a653c9b31a", "name": "Commented-code block (5 lines) in extension/tests/runtime-refresh-coalescing.test.ts:46", "shortDescription": {"text": "Commented-code block (5 lines) in extension/tests/runtime-refresh-coalescing.test.ts:46"}, "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-6af83fac1456de8b", "name": "Commented-code block (5 lines) in extension/tests/popup-embedding-banner.test.ts:92", "shortDescription": {"text": "Commented-code block (5 lines) in extension/tests/popup-embedding-banner.test.ts:92"}, "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-20d6ac72b8ee2ee7", "name": "Commented-code block (5 lines) in extension/tests/popup-saved-sync.test.ts:162", "shortDescription": {"text": "Commented-code block (5 lines) in extension/tests/popup-saved-sync.test.ts:162"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1e4f509c1ddd4658", "name": "Commented-code block (5 lines) in extension/tests/popup-layout.test.ts:205", "shortDescription": {"text": "Commented-code block (5 lines) in extension/tests/popup-layout.test.ts:205"}, "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-332d7d4c84e857d0", "name": "Commented-code block (5 lines) in extension/scripts/package-firefox.mjs:48", "shortDescription": {"text": "Commented-code block (5 lines) in extension/scripts/package-firefox.mjs:48"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-80d310f8bfac4ca2", "name": "Commented-code block (5 lines) in extension/popup/popup-helpers.js:740", "shortDescription": {"text": "Commented-code block (5 lines) in extension/popup/popup-helpers.js:740"}, "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-9872c75e2b5cbae6", "name": "Commented-code block (5 lines) in extension/popup/popup-init-control.js:30", "shortDescription": {"text": "Commented-code block (5 lines) in extension/popup/popup-init-control.js:30"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6022626cf4ca6734", "name": "Commented-code block (6 lines) in extension/popup/popup.js:138", "shortDescription": {"text": "Commented-code block (6 lines) in extension/popup/popup.js:138"}, "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-100f97a07d58b5c1", "name": "Commented-code block (10 lines) in extension/src/content/xiaohongshu.ts:38", "shortDescription": {"text": "Commented-code block (10 lines) in extension/src/content/xiaohongshu.ts:38"}, "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-86684717dce1daa2", "name": "Commented-code block (6 lines) in extension/src/content/douyin.ts:70", "shortDescription": {"text": "Commented-code block (6 lines) in extension/src/content/douyin.ts:70"}, "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-e7ecd320c398b949", "name": "`fetch()` without try/.catch or AbortSignal \u2014 extension/src/content/douyin.ts:987", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 extension/src/content/douyin.ts:987"}, "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-769b967d3ba727ef", "name": "Commented-code block (5 lines) in extension/src/content/kernel.ts:37", "shortDescription": {"text": "Commented-code block (5 lines) in extension/src/content/kernel.ts:37"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-86303539d2e52cf9", "name": "Commented-code block (8 lines) in extension/src/content/xhs/bootstrap.ts:947", "shortDescription": {"text": "Commented-code block (8 lines) in extension/src/content/xhs/bootstrap.ts:947"}, "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-2ab52f44c1cf082d", "name": "Commented-code block (9 lines) in extension/src/background/dy-task-dispatcher.ts:79", "shortDescription": {"text": "Commented-code block (9 lines) in extension/src/background/dy-task-dispatcher.ts:79"}, "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-15748b214f1ec4e9", "name": "Commented-code block (5 lines) in extension/src/background/service-worker.ts:70", "shortDescription": {"text": "Commented-code block (5 lines) in extension/src/background/service-worker.ts:70"}, "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-2d2705e0596d89e2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 extension/src/background/service-worker.ts:97", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 extension/src/background/service-worker.ts:97"}, "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-1ff4a3efc383a10a", "name": "Commented-code block (7 lines) in extension/src/background/xhs-task-dispatcher.ts:19", "shortDescription": {"text": "Commented-code block (7 lines) in extension/src/background/xhs-task-dispatcher.ts:19"}, "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-1e44b33769804ca5", "name": "Commented-code block (7 lines) in extension/src/main/dy-fetch-tap.ts:526", "shortDescription": {"text": "Commented-code block (7 lines) in extension/src/main/dy-fetch-tap.ts:526"}, "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-83f9531d1534555e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 extension/src/main/dy-fetch-tap.ts:528", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 extension/src/main/dy-fetch-tap.ts:528"}, "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-afc6c70ffe657eff", "name": "Commented-code block (6 lines) in packaging/build.py:451", "shortDescription": {"text": "Commented-code block (6 lines) in packaging/build.py:451"}, "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-d1168694a9808339", "name": "Network/subprocess call without timeout or try/except \u2014 packaging/build.py:341", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 packaging/build.py:341"}, "fullDescription": {"text": "`subprocess.run(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5c2a17e00284f91f", "name": "Commented-code block (9 lines) in packaging/entry.py:482", "shortDescription": {"text": "Commented-code block (9 lines) in packaging/entry.py:482"}, "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-a2cb597d2935ab5e", "name": "Network/subprocess call without timeout or try/except \u2014 packaging/entry.py:452", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 packaging/entry.py:452"}, "fullDescription": {"text": "`subprocess.Popen(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cffba7973b3d6e4a", "name": "Commented-code block (8 lines) in src/openbiliclaw/config.py:115", "shortDescription": {"text": "Commented-code block (8 lines) in src/openbiliclaw/config.py:115"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-84df34f456ea72c2", "name": "Legacy-named symbol `_maybe_create_runtime_database_backup` in src/openbiliclaw/cli.py:726", "shortDescription": {"text": "Legacy-named symbol `_maybe_create_runtime_database_backup` in src/openbiliclaw/cli.py:726"}, "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-e96775bdcba2f4e1", "name": "Commented-code block (6 lines) in src/openbiliclaw/cli.py:149", "shortDescription": {"text": "Commented-code block (6 lines) in src/openbiliclaw/cli.py:149"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-547f3de2ae570634", "name": "Network/subprocess call without timeout or try/except \u2014 src/openbiliclaw/cli.py:1343", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 src/openbiliclaw/cli.py:1343"}, "fullDescription": {"text": "`subprocess.run(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-90cf355f1d52e7c7", "name": "Blocking `urllib.request.urlopen(...)` inside `async def _acknowledge_delight` \u2014 src/openbiliclaw/integrations/openclaw/", "shortDescription": {"text": "Blocking `urllib.request.urlopen(...)` inside `async def _acknowledge_delight` \u2014 src/openbiliclaw/integrations/openclaw/cli.py:232"}, "fullDescription": {"text": "Sync I/O inside an async function blocks the event loop. While `urllib.request.urlopen(...)` is running, *all* other coroutines on this loop are paused \u2014 silent throughput collapse under concurrency. Use the async equivalent (`httpx.AsyncClient`, `asyncio.sleep`, `aiofiles`) or wrap with `await asyncio.to_thread(...)`."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "high", "confidence": 1.0}}, {"id": "scanner-513a0319c47e4d22", "name": "Commented-code block (7 lines) in src/openbiliclaw/recommendation/delight.py:83", "shortDescription": {"text": "Commented-code block (7 lines) in src/openbiliclaw/recommendation/delight.py:83"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-35da609f5a866e95", "name": "Commented-code block (6 lines) in src/openbiliclaw/recommendation/curator.py:57", "shortDescription": {"text": "Commented-code block (6 lines) in src/openbiliclaw/recommendation/curator.py:57"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a81b292376b67fe6", "name": "Legacy-named symbol `precompute_pool_copy` in src/openbiliclaw/recommendation/engine.py:199", "shortDescription": {"text": "Legacy-named symbol `precompute_pool_copy` in src/openbiliclaw/recommendation/engine.py:199"}, "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-1f35abb0a12f1d60", "name": "Commented-code block (6 lines) in src/openbiliclaw/recommendation/engine.py:191", "shortDescription": {"text": "Commented-code block (6 lines) in src/openbiliclaw/recommendation/engine.py:191"}, "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-01f1a46d84230d2e", "name": "Commented-code block (8 lines) in src/openbiliclaw/bilibili/api.py:462", "shortDescription": {"text": "Commented-code block (8 lines) in src/openbiliclaw/bilibili/api.py:462"}, "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-67e3630043474daa", "name": "Commented-code block (6 lines) in src/openbiliclaw/api/auth.py:40", "shortDescription": {"text": "Commented-code block (6 lines) in src/openbiliclaw/api/auth.py:40"}, "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-da007cdd4cf2b81f", "name": "Commented-code block (11 lines) in src/openbiliclaw/api/app.py:141", "shortDescription": {"text": "Commented-code block (11 lines) in src/openbiliclaw/api/app.py:141"}, "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-ff1443f4b28f6223", "name": "Legacy-named symbol `precompute_pool_copy` in src/openbiliclaw/api/runtime_context.py:918", "shortDescription": {"text": "Legacy-named symbol `precompute_pool_copy` in src/openbiliclaw/api/runtime_context.py:918"}, "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-a13c9b1973008a26", "name": "Commented-code block (6 lines) in src/openbiliclaw/api/runtime_context.py:256", "shortDescription": {"text": "Commented-code block (6 lines) in src/openbiliclaw/api/runtime_context.py:256"}, "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-551ae4969d5fecad", "name": "Commented-code block (5 lines) in src/openbiliclaw/sources/browser.py:26", "shortDescription": {"text": "Commented-code block (5 lines) in src/openbiliclaw/sources/browser.py:26"}, "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-ad1a43c74b9d5479", "name": "Commented-code block (6 lines) in src/openbiliclaw/soul/cognition_cycle.py:63", "shortDescription": {"text": "Commented-code block (6 lines) in src/openbiliclaw/soul/cognition_cycle.py:63"}, "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-540cde40a0eb5db1", "name": "Commented-code block (7 lines) in src/openbiliclaw/soul/consolidator.py:55", "shortDescription": {"text": "Commented-code block (7 lines) in src/openbiliclaw/soul/consolidator.py:55"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e2a6a4cbf0249176", "name": "Legacy-named symbol `from_legacy` in src/openbiliclaw/soul/profile_builder.py:130", "shortDescription": {"text": "Legacy-named symbol `from_legacy` in src/openbiliclaw/soul/profile_builder.py:130"}, "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-260d4c6f1ec040a3", "name": "Commented-code block (8 lines) in src/openbiliclaw/soul/profile_builder.py:278", "shortDescription": {"text": "Commented-code block (8 lines) in src/openbiliclaw/soul/profile_builder.py:278"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0fce8af70ac50521", "name": "Legacy-named symbol `from_legacy` in src/openbiliclaw/soul/engine.py:301", "shortDescription": {"text": "Legacy-named symbol `from_legacy` in src/openbiliclaw/soul/engine.py:301"}, "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-17cefd6b789a3bbb", "name": "Commented-code block (7 lines) in src/openbiliclaw/soul/engine.py:135", "shortDescription": {"text": "Commented-code block (7 lines) in src/openbiliclaw/soul/engine.py:135"}, "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-b7439a1ca2a57d88", "name": "Legacy-named symbol `from_legacy` in src/openbiliclaw/soul/profile.py:632", "shortDescription": {"text": "Legacy-named symbol `from_legacy` in src/openbiliclaw/soul/profile.py:632"}, "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-c905419283a93057", "name": "Commented-code block (10 lines) in src/openbiliclaw/soul/pipeline.py:690", "shortDescription": {"text": "Commented-code block (10 lines) in src/openbiliclaw/soul/pipeline.py:690"}, "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-2af2d8e7bcd1e315", "name": "Commented-code block (7 lines) in src/openbiliclaw/soul/speculator.py:285", "shortDescription": {"text": "Commented-code block (7 lines) in src/openbiliclaw/soul/speculator.py:285"}, "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-41465e95d388a608", "name": "Commented-code block (6 lines) in src/openbiliclaw/soul/preference_analyzer.py:24", "shortDescription": {"text": "Commented-code block (6 lines) in src/openbiliclaw/soul/preference_analyzer.py:24"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9c335b0691abfd75", "name": "Commented-code block (6 lines) in src/openbiliclaw/web/js/app.js:223", "shortDescription": {"text": "Commented-code block (6 lines) in src/openbiliclaw/web/js/app.js:223"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-279808340f4a80b4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/openbiliclaw/web/js/views/saved.js:30", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/openbiliclaw/web/js/views/saved.js:30"}, "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-b7c6bc2deb472edd", "name": "Commented-code block (5 lines) in src/openbiliclaw/web/js/views/profile.js:497", "shortDescription": {"text": "Commented-code block (5 lines) in src/openbiliclaw/web/js/views/profile.js:497"}, "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-7ebd4d1410702130", "name": "Commented-code block (5 lines) in src/openbiliclaw/web/desktop/assets/js/app.js:1362", "shortDescription": {"text": "Commented-code block (5 lines) in src/openbiliclaw/web/desktop/assets/js/app.js:1362"}, "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-371787e8459c9cb1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/openbiliclaw/web/desktop/assets/js/app.js:1376", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/openbiliclaw/web/desktop/assets/js/app.js:1376"}, "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-407e7fd99ae40454", "name": "Legacy-named symbol `norm_old` in src/openbiliclaw/eval/optimizer.py:576", "shortDescription": {"text": "Legacy-named symbol `norm_old` in src/openbiliclaw/eval/optimizer.py:576"}, "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-3cc2765f941cbef7", "name": "Commented-code block (5 lines) in src/openbiliclaw/memory/manager.py:146", "shortDescription": {"text": "Commented-code block (5 lines) in src/openbiliclaw/memory/manager.py:146"}, "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-2f6ee7aeaf5f6fdb", "name": "Commented-code block (6 lines) in src/openbiliclaw/runtime/init_prereqs.py:20", "shortDescription": {"text": "Commented-code block (6 lines) in src/openbiliclaw/runtime/init_prereqs.py:20"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-efdf4e0db20e2a66", "name": "Legacy-named symbol `precompute_pool_copy` in src/openbiliclaw/runtime/refresh.py:239", "shortDescription": {"text": "Legacy-named symbol `precompute_pool_copy` in src/openbiliclaw/runtime/refresh.py:239"}, "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-a71593cc23515463", "name": "Commented-code block (14 lines) in src/openbiliclaw/runtime/refresh.py:288", "shortDescription": {"text": "Commented-code block (14 lines) in src/openbiliclaw/runtime/refresh.py:288"}, "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-ed839a44b02bd59e", "name": "Commented-code block (5 lines) in src/openbiliclaw/runtime/x_producer.py:84", "shortDescription": {"text": "Commented-code block (5 lines) in src/openbiliclaw/runtime/x_producer.py:84"}, "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-b03598632dca833b", "name": "Commented-code block (7 lines) in src/openbiliclaw/runtime/xhs_producer.py:47", "shortDescription": {"text": "Commented-code block (7 lines) in src/openbiliclaw/runtime/xhs_producer.py:47"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-036b1f072b129686", "name": "Commented-code block (5 lines) in src/openbiliclaw/runtime/image_cache.py:243", "shortDescription": {"text": "Commented-code block (5 lines) in src/openbiliclaw/runtime/image_cache.py:243"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-41f5d56cfca32564", "name": "Commented-code block (5 lines) in src/openbiliclaw/runtime/keyword_planner.py:77", "shortDescription": {"text": "Commented-code block (5 lines) in src/openbiliclaw/runtime/keyword_planner.py:77"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d5c62a2e41ff61a3", "name": "Commented-code block (7 lines) in src/openbiliclaw/runtime/updater.py:276", "shortDescription": {"text": "Commented-code block (7 lines) in src/openbiliclaw/runtime/updater.py:276"}, "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-ff483419571b2160", "name": "Commented-code block (7 lines) in src/openbiliclaw/runtime/account_sync.py:114", "shortDescription": {"text": "Commented-code block (7 lines) in src/openbiliclaw/runtime/account_sync.py:114"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b682464d98da8ab1", "name": "Commented-code block (5 lines) in src/openbiliclaw/runtime/ollama_supervisor.py:119", "shortDescription": {"text": "Commented-code block (5 lines) in src/openbiliclaw/runtime/ollama_supervisor.py:119"}, "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-6274527bdb218fab", "name": "Legacy-named symbol `precompute_pool_copy` in src/openbiliclaw/runtime/task_registry.py:115", "shortDescription": {"text": "Legacy-named symbol `precompute_pool_copy` in src/openbiliclaw/runtime/task_registry.py:115"}, "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-374c6cce48af58f4", "name": "Commented-code block (5 lines) in src/openbiliclaw/runtime/youtube_producer.py:56", "shortDescription": {"text": "Commented-code block (5 lines) in src/openbiliclaw/runtime/youtube_producer.py:56"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-33238b5ceec0d3b3", "name": "Commented-code block (5 lines) in src/openbiliclaw/runtime/douyin_producer.py:94", "shortDescription": {"text": "Commented-code block (5 lines) in src/openbiliclaw/runtime/douyin_producer.py:94"}, "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-119f7c2eef682205", "name": "Commented-code block (7 lines) in src/openbiliclaw/youtube/takeout.py:251", "shortDescription": {"text": "Commented-code block (7 lines) in src/openbiliclaw/youtube/takeout.py:251"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-264d737abc2b1846", "name": "Commented-code block (11 lines) in src/openbiliclaw/discovery/engine.py:53", "shortDescription": {"text": "Commented-code block (11 lines) in src/openbiliclaw/discovery/engine.py:53"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-07c244769f067b97", "name": "Commented-code block (7 lines) in src/openbiliclaw/discovery/strategies/_utils.py:289", "shortDescription": {"text": "Commented-code block (7 lines) in src/openbiliclaw/discovery/strategies/_utils.py:289"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-85f74e0981a3ec88", "name": "Commented-code block (11 lines) in src/openbiliclaw/discovery/strategies/explore.py:65", "shortDescription": {"text": "Commented-code block (11 lines) in src/openbiliclaw/discovery/strategies/explore.py:65"}, "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-140e151e8ffebe07", "name": "Commented-code block (7 lines) in src/openbiliclaw/discovery/strategies/related_chain.py:54", "shortDescription": {"text": "Commented-code block (7 lines) in src/openbiliclaw/discovery/strategies/related_chain.py:54"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b3904d41b98b8a1c", "name": "Legacy-named symbol `db_backup` in src/openbiliclaw/storage/maintenance.py:31", "shortDescription": {"text": "Legacy-named symbol `db_backup` in src/openbiliclaw/storage/maintenance.py:31"}, "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-21d38e0191117e5d", "name": "Legacy-named symbol `get_pool_candidates_needing_copy` in src/openbiliclaw/storage/database.py:3187", "shortDescription": {"text": "Legacy-named symbol `get_pool_candidates_needing_copy` in src/openbiliclaw/storage/database.py:3187"}, "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-2d4ca83844e9fecb", "name": "Commented-code block (12 lines) in src/openbiliclaw/storage/database.py:24", "shortDescription": {"text": "Commented-code block (12 lines) in src/openbiliclaw/storage/database.py:24"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f043a649b5f65974", "name": "Commented-code block (6 lines) in src/openbiliclaw/llm/prompts.py:979", "shortDescription": {"text": "Commented-code block (6 lines) in src/openbiliclaw/llm/prompts.py:979"}, "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-899ca913973a0cfb", "name": "Commented-code block (5 lines) in src/openbiliclaw/llm/registry.py:97", "shortDescription": {"text": "Commented-code block (5 lines) in src/openbiliclaw/llm/registry.py:97"}, "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-3ace267820f9fde3", "name": "Commented-code block (5 lines) in src/openbiliclaw/llm/usage_recorder.py:36", "shortDescription": {"text": "Commented-code block (5 lines) in src/openbiliclaw/llm/usage_recorder.py:36"}, "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-6a5982d991e2fe04", "name": "Commented-code block (7 lines) in src/openbiliclaw/llm/ollama_provider.py:27", "shortDescription": {"text": "Commented-code block (7 lines) in src/openbiliclaw/llm/ollama_provider.py:27"}, "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-727dbfaadab0764e", "name": "Legacy-named symbol `embedding_cache_legacy` in src/openbiliclaw/llm/embedding.py:101", "shortDescription": {"text": "Legacy-named symbol `embedding_cache_legacy` in src/openbiliclaw/llm/embedding.py:101"}, "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-b16a864b6cd3051f", "name": "Commented-code block (10 lines) in src/openbiliclaw/llm/embedding.py:196", "shortDescription": {"text": "Commented-code block (10 lines) in src/openbiliclaw/llm/embedding.py:196"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8b1f8aa5d5760c0a", "name": "Commented-code block (8 lines) in src/openbiliclaw/llm/openai_provider.py:164", "shortDescription": {"text": "Commented-code block (8 lines) in src/openbiliclaw/llm/openai_provider.py:164"}, "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-70d4ce8a67f726b6", "name": "Commented-code block (7 lines) in src/openbiliclaw/llm/base.py:66", "shortDescription": {"text": "Commented-code block (7 lines) in src/openbiliclaw/llm/base.py:66"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-aa7b911e14b89115", "name": "Commented-code block (8 lines) in src/openbiliclaw/llm/openrouter_provider.py:11", "shortDescription": {"text": "Commented-code block (8 lines) in src/openbiliclaw/llm/openrouter_provider.py:11"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-679612ad0db0e226", "name": "Network/subprocess call without timeout or try/except \u2014 src/openbiliclaw/llm/codex_auth.py:205", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 src/openbiliclaw/llm/codex_auth.py:205"}, "fullDescription": {"text": "`subprocess.run(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-98f96ee05abc60bc", "name": "Commented-code block (11 lines) in src/openbiliclaw/llm/claude_provider.py:65", "shortDescription": {"text": "Commented-code block (11 lines) in src/openbiliclaw/llm/claude_provider.py:65"}, "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-1673bc698a1fb9e8", "name": "Commented-code block (9 lines) in src/openbiliclaw/llm/service.py:222", "shortDescription": {"text": "Commented-code block (9 lines) in src/openbiliclaw/llm/service.py:222"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-be46ea126aa5d8dc", "name": "Near-duplicate function bodies in 3 places", "shortDescription": {"text": "Near-duplicate function bodies in 3 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nscripts/run_update_auto_optimize.py:main, scripts/run_speculation_auto_optimize.py:main, scripts/run_auto_optimize.py:main\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2c04133e54348533", "name": "Near-duplicate function bodies in 2 places", "shortDescription": {"text": "Near-duplicate function bodies in 2 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nscripts/agent_bootstrap.py:collect_human_llm_config, scripts/agent_bootstrap.py:collect_human_install_wizard\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:\nsrc/openbiliclaw/integrations/openclaw/skill.py:action, src/openbiliclaw/integrations/openclaw/skill.py:action, src/openbiliclaw/integrations/openclaw/skill.py:action, src/openbiliclaw/integrations/openclaw/skill.py:action\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6297377883dd7783", "name": "Near-duplicate function bodies in 13 places", "shortDescription": {"text": "Near-duplicate function bodies in 13 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nsrc/openbiliclaw/recommendation/engine.py:complete_structured_task, src/openbiliclaw/soul/insight_analyzer.py:complete_structured_task, src/openbiliclaw/soul/consolidator.py:complete_structured_task, src/openbiliclaw/soul/profile_builder.py:complete_structured_task\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-02525d39071dd2c7", "name": "Near-duplicate function bodies in 5 places", "shortDescription": {"text": "Near-duplicate function bodies in 5 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nsrc/openbiliclaw/sources/twitter_adapter.py:fetch, src/openbiliclaw/sources/protocol.py:fetch, src/openbiliclaw/sources/bilibili_adapter.py:fetch, src/openbiliclaw/sources/xiaohongshu_adapter.py:fetch\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-55ace8a4c62b315c", "name": "FastAPI POST `auth_login` without auth dependency \u2014 src/openbiliclaw/api/auth.py:423", "shortDescription": {"text": "FastAPI POST `auth_login` without auth dependency \u2014 src/openbiliclaw/api/auth.py:423"}, "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-98628ec4d91de73b", "name": "FastAPI POST `auth_logout` without auth dependency \u2014 src/openbiliclaw/api/auth.py:469", "shortDescription": {"text": "FastAPI POST `auth_logout` without auth dependency \u2014 src/openbiliclaw/api/auth.py:469"}, "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-691783bce40b9cdc", "name": "Dangling fetch: GET https://api.github.com/repos/${STAR_REPO_SLUG} (extension/popup/popup.js:2052)", "shortDescription": {"text": "Dangling fetch: GET https://api.github.com/repos/${STAR_REPO_SLUG} (extension/popup/popup.js:2052)"}, "fullDescription": {"text": "`extension/popup/popup.js:2052` calls `GET https://api.github.com/repos/${STAR_REPO_SLUG}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.github.com/repos/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-636f403f4837737d", "name": "Dangling fetch: GET https://api.github.com/repos/${STAR_REPO_SLUG} (src/openbiliclaw/web/desktop/assets/js/app.js:297)", "shortDescription": {"text": "Dangling fetch: GET https://api.github.com/repos/${STAR_REPO_SLUG} (src/openbiliclaw/web/desktop/assets/js/app.js:297)"}, "fullDescription": {"text": "`src/openbiliclaw/web/desktop/assets/js/app.js:297` calls `GET https://api.github.com/repos/${STAR_REPO_SLUG}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.github.com/repos/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4033f1f6b79f3ca3", "name": "Dangling fetch: GET https://www.douyin.com/aweme/v2/web/module/feed/ (extension/tests/dy-fetch-tap.test.ts:325)", "shortDescription": {"text": "Dangling fetch: GET https://www.douyin.com/aweme/v2/web/module/feed/ (extension/tests/dy-fetch-tap.test.ts:325)"}, "fullDescription": {"text": "`extension/tests/dy-fetch-tap.test.ts:325` calls `GET https://www.douyin.com/aweme/v2/web/module/feed/` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/www.douyin.com/aweme/v2/web/module/feed`\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-f4d72b120b8fea64", "name": "Dangling fetch: GET https://www.douyin.com/aweme/v1/web/hot/search/list/ (extension/tests/dy-fetch-tap.test.ts:326)", "shortDescription": {"text": "Dangling fetch: GET https://www.douyin.com/aweme/v1/web/hot/search/list/ (extension/tests/dy-fetch-tap.test.ts:326)"}, "fullDescription": {"text": "`extension/tests/dy-fetch-tap.test.ts:326` calls `GET https://www.douyin.com/aweme/v1/web/hot/search/list/` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/www.douyin.com/aweme/v1/web/hot/search/list`\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-562322a28c342d7f", "name": "Unused endpoint: GET /api/auth/status", "shortDescription": {"text": "Unused endpoint: GET /api/auth/status"}, "fullDescription": {"text": "`src/openbiliclaw/api/auth.py` declares `GET /api/auth/status` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fd55aa0818a7c897", "name": "Unused endpoint: POST /api/auth/login", "shortDescription": {"text": "Unused endpoint: POST /api/auth/login"}, "fullDescription": {"text": "`src/openbiliclaw/api/auth.py` declares `POST /api/auth/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-d5a39262ac205120", "name": "Unused endpoint: POST /api/auth/logout", "shortDescription": {"text": "Unused endpoint: POST /api/auth/logout"}, "fullDescription": {"text": "`src/openbiliclaw/api/auth.py` declares `POST /api/auth/logout` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d192fec1d2796642", "name": "Unused endpoint: POST /api/auth/admin", "shortDescription": {"text": "Unused endpoint: POST /api/auth/admin"}, "fullDescription": {"text": "`src/openbiliclaw/api/app.py` declares `POST /api/auth/admin` 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-3c93b82c283e36ca", "name": "Unused endpoint: GET /api/ping", "shortDescription": {"text": "Unused endpoint: GET /api/ping"}, "fullDescription": {"text": "`src/openbiliclaw/api/app.py` declares `GET /api/ping` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4756b4c4da7d2088", "name": "Unused endpoint: GET /api/health", "shortDescription": {"text": "Unused endpoint: GET /api/health"}, "fullDescription": {"text": "`src/openbiliclaw/api/app.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-0f2574792ebc37cf", "name": "Unused endpoint: GET /api/init-status", "shortDescription": {"text": "Unused endpoint: GET /api/init-status"}, "fullDescription": {"text": "`src/openbiliclaw/api/app.py` declares `GET /api/init-status` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ef060c5aa8efa5ac", "name": "Unused endpoint: POST /api/init", "shortDescription": {"text": "Unused endpoint: POST /api/init"}, "fullDescription": {"text": "`src/openbiliclaw/api/app.py` declares `POST /api/init` 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-83e37414c93d9313", "name": "Unused endpoint: POST /api/init/cancel", "shortDescription": {"text": "Unused endpoint: POST /api/init/cancel"}, "fullDescription": {"text": "`src/openbiliclaw/api/app.py` declares `POST /api/init/cancel` 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-7f16ff40bbd2f2f4", "name": "Unused endpoint: GET /api/image-proxy", "shortDescription": {"text": "Unused endpoint: GET /api/image-proxy"}, "fullDescription": {"text": "`src/openbiliclaw/api/app.py` declares `GET /api/image-proxy` 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-ee97cc15fd3a0ff1", "name": "Unused endpoint: POST /api/bilibili/cookie", "shortDescription": {"text": "Unused endpoint: POST /api/bilibili/cookie"}, "fullDescription": {"text": "`src/openbiliclaw/api/app.py` declares `POST /api/bilibili/cookie` 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-e314a6467a65f2c5", "name": "Unused endpoint: POST /api/sources/dy/cookie", "shortDescription": {"text": "Unused endpoint: POST /api/sources/dy/cookie"}, "fullDescription": {"text": "`src/openbiliclaw/api/app.py` declares `POST /api/sources/dy/cookie` 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-4641f8f45d922e48", "name": "Unused endpoint: POST /api/sources/x/cookie", "shortDescription": {"text": "Unused endpoint: POST /api/sources/x/cookie"}, "fullDescription": {"text": "`src/openbiliclaw/api/app.py` declares `POST /api/sources/x/cookie` 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-12cac75940bf5873", "name": "Unused endpoint: POST /api/init-completed", "shortDescription": {"text": "Unused endpoint: POST /api/init-completed"}, "fullDescription": {"text": "`src/openbiliclaw/api/app.py` declares `POST /api/init-completed` 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-fb326fe65616b88e", "name": "Unused endpoint: GET /api/profile-summary", "shortDescription": {"text": "Unused endpoint: GET /api/profile-summary"}, "fullDescription": {"text": "`src/openbiliclaw/api/app.py` declares `GET /api/profile-summary` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6fa1d95cfae44fc5", "name": "Unused endpoint: GET /api/profile/edit-state", "shortDescription": {"text": "Unused endpoint: GET /api/profile/edit-state"}, "fullDescription": {"text": "`src/openbiliclaw/api/app.py` declares `GET /api/profile/edit-state` 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-640cfd8b550d7749", "name": "Unused endpoint: POST /api/profile/edit", "shortDescription": {"text": "Unused endpoint: POST /api/profile/edit"}, "fullDescription": {"text": "`src/openbiliclaw/api/app.py` declares `POST /api/profile/edit` 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-beaed16e6be24185", "name": "Unused endpoint: POST /api/events", "shortDescription": {"text": "Unused endpoint: POST /api/events"}, "fullDescription": {"text": "`src/openbiliclaw/api/app.py` declares `POST /api/events` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4c214cd557df70e8", "name": "Unused endpoint: GET /api/recommendations", "shortDescription": {"text": "Unused endpoint: GET /api/recommendations"}, "fullDescription": {"text": "`src/openbiliclaw/api/app.py` declares `GET /api/recommendations` 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-9b29abd0901aa185", "name": "Unused endpoint: POST /api/watch-later", "shortDescription": {"text": "Unused endpoint: POST /api/watch-later"}, "fullDescription": {"text": "`src/openbiliclaw/api/app.py` declares `POST /api/watch-later` 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-0c51999709c52180", "name": "Unused endpoint: DELETE /api/watch-later/{bvid}", "shortDescription": {"text": "Unused endpoint: DELETE /api/watch-later/{bvid}"}, "fullDescription": {"text": "`src/openbiliclaw/api/app.py` declares `DELETE /api/watch-later/{bvid}` 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-7f1cd2d2299f03f0", "name": "Unused endpoint: GET /api/watch-later/{bvid}", "shortDescription": {"text": "Unused endpoint: GET /api/watch-later/{bvid}"}, "fullDescription": {"text": "`src/openbiliclaw/api/app.py` declares `GET /api/watch-later/{bvid}` 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-03d746d6e164a69f", "name": "Unused endpoint: GET /api/watch-later", "shortDescription": {"text": "Unused endpoint: GET /api/watch-later"}, "fullDescription": {"text": "`src/openbiliclaw/api/app.py` declares `GET /api/watch-later` 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-a4a7bb77498ade94", "name": "Unused endpoint: POST /api/favorites", "shortDescription": {"text": "Unused endpoint: POST /api/favorites"}, "fullDescription": {"text": "`src/openbiliclaw/api/app.py` declares `POST /api/favorites` 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-d39662842e794999", "name": "Unused endpoint: DELETE /api/favorites/{bvid}", "shortDescription": {"text": "Unused endpoint: DELETE /api/favorites/{bvid}"}, "fullDescription": {"text": "`src/openbiliclaw/api/app.py` declares `DELETE /api/favorites/{bvid}` 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-444014115c680899", "name": "Unused endpoint: GET /api/favorites/{bvid}", "shortDescription": {"text": "Unused endpoint: GET /api/favorites/{bvid}"}, "fullDescription": {"text": "`src/openbiliclaw/api/app.py` declares `GET /api/favorites/{bvid}` 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-1587d758201bdc52", "name": "Unused endpoint: GET /api/favorites", "shortDescription": {"text": "Unused endpoint: GET /api/favorites"}, "fullDescription": {"text": "`src/openbiliclaw/api/app.py` declares `GET /api/favorites` 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-f023148e065ac870", "name": "Unused endpoint: GET /api/activity-feed", "shortDescription": {"text": "Unused endpoint: GET /api/activity-feed"}, "fullDescription": {"text": "`src/openbiliclaw/api/app.py` declares `GET /api/activity-feed` 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-e51eb3cbec60367c", "name": "Unused endpoint: POST /api/recommendations/reshuffle", "shortDescription": {"text": "Unused endpoint: POST /api/recommendations/reshuffle"}, "fullDescription": {"text": "`src/openbiliclaw/api/app.py` declares `POST /api/recommendations/reshuffle` 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-e017d3f249c2a8c9", "name": "Unused endpoint: POST /api/recommendations/append", "shortDescription": {"text": "Unused endpoint: POST /api/recommendations/append"}, "fullDescription": {"text": "`src/openbiliclaw/api/app.py` declares `POST /api/recommendations/append` 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-c4e35e1c1ed96f9e", "name": "Unused endpoint: POST /api/recommendations/refresh", "shortDescription": {"text": "Unused endpoint: POST /api/recommendations/refresh"}, "fullDescription": {"text": "`src/openbiliclaw/api/app.py` declares `POST /api/recommendations/refresh` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c1d7841f7e09c970", "name": "Unused endpoint: GET /api/runtime-status", "shortDescription": {"text": "Unused endpoint: GET /api/runtime-status"}, "fullDescription": {"text": "`src/openbiliclaw/api/app.py` declares `GET /api/runtime-status` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8315f1ad19bd9dab", "name": "Unused endpoint: GET /api/update-status", "shortDescription": {"text": "Unused endpoint: GET /api/update-status"}, "fullDescription": {"text": "`src/openbiliclaw/api/app.py` declares `GET /api/update-status` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8699ca43ff9b8e3b", "name": "Unused endpoint: POST /api/update/check", "shortDescription": {"text": "Unused endpoint: POST /api/update/check"}, "fullDescription": {"text": "`src/openbiliclaw/api/app.py` declares `POST /api/update/check` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7951ec91410b5deb", "name": "Unused endpoint: POST /api/update/apply", "shortDescription": {"text": "Unused endpoint: POST /api/update/apply"}, "fullDescription": {"text": "`src/openbiliclaw/api/app.py` declares `POST /api/update/apply` 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-34a20a79838683cf", "name": "Unused endpoint: GET /api/notifications/pending", "shortDescription": {"text": "Unused endpoint: GET /api/notifications/pending"}, "fullDescription": {"text": "`src/openbiliclaw/api/app.py` declares `GET /api/notifications/pending` 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-e8390056fef1d0ca", "name": "Unused endpoint: GET /api/cognition-updates/pending", "shortDescription": {"text": "Unused endpoint: GET /api/cognition-updates/pending"}, "fullDescription": {"text": "`src/openbiliclaw/api/app.py` declares `GET /api/cognition-updates/pending` 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-2a228566b96003a6", "name": "Unused endpoint: POST /api/cognition-updates/seen", "shortDescription": {"text": "Unused endpoint: POST /api/cognition-updates/seen"}, "fullDescription": {"text": "`src/openbiliclaw/api/app.py` declares `POST /api/cognition-updates/seen` 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-1ccb0ce9a9747829", "name": "Unused endpoint: POST /api/delight/trigger", "shortDescription": {"text": "Unused endpoint: POST /api/delight/trigger"}, "fullDescription": {"text": "`src/openbiliclaw/api/app.py` declares `POST /api/delight/trigger` 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-6488fa187c81c835", "name": "Unused endpoint: GET /api/delight/pending", "shortDescription": {"text": "Unused endpoint: GET /api/delight/pending"}, "fullDescription": {"text": "`src/openbiliclaw/api/app.py` declares `GET /api/delight/pending` 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-bd4659fdcf782d47", "name": "Unused endpoint: GET /api/delight/pending-batch", "shortDescription": {"text": "Unused endpoint: GET /api/delight/pending-batch"}, "fullDescription": {"text": "`src/openbiliclaw/api/app.py` declares `GET /api/delight/pending-batch` 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-0545d1962619ebc8", "name": "Unused endpoint: POST /api/delight/sent", "shortDescription": {"text": "Unused endpoint: POST /api/delight/sent"}, "fullDescription": {"text": "`src/openbiliclaw/api/app.py` declares `POST /api/delight/sent` 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-5266c89ba6058f49", "name": "Unused endpoint: POST /api/delight/respond", "shortDescription": {"text": "Unused endpoint: POST /api/delight/respond"}, "fullDescription": {"text": "`src/openbiliclaw/api/app.py` declares `POST /api/delight/respond` 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-ab1b17c834fdd3f2", "name": "Unused endpoint: POST /api/notifications/sent", "shortDescription": {"text": "Unused endpoint: POST /api/notifications/sent"}, "fullDescription": {"text": "`src/openbiliclaw/api/app.py` declares `POST /api/notifications/sent` 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-9d2517f9eafc5297", "name": "Unused endpoint: POST /api/chat", "shortDescription": {"text": "Unused endpoint: POST /api/chat"}, "fullDescription": {"text": "`src/openbiliclaw/api/app.py` declares `POST /api/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-4059871d152f5d80", "name": "Unused endpoint: POST /api/chat/turns", "shortDescription": {"text": "Unused endpoint: POST /api/chat/turns"}, "fullDescription": {"text": "`src/openbiliclaw/api/app.py` declares `POST /api/chat/turns` 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-a832758a82282716", "name": "Unused endpoint: GET /api/chat/turns", "shortDescription": {"text": "Unused endpoint: GET /api/chat/turns"}, "fullDescription": {"text": "`src/openbiliclaw/api/app.py` declares `GET /api/chat/turns` 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-0899aa20262cf6fa", "name": "Unused endpoint: GET /api/chat/turns/{turn_id}", "shortDescription": {"text": "Unused endpoint: GET /api/chat/turns/{turn_id}"}, "fullDescription": {"text": "`src/openbiliclaw/api/app.py` declares `GET /api/chat/turns/{turn_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-d0b42802dddf37d1", "name": "Unused endpoint: POST /api/interest-probes/trigger", "shortDescription": {"text": "Unused endpoint: POST /api/interest-probes/trigger"}, "fullDescription": {"text": "`src/openbiliclaw/api/app.py` declares `POST /api/interest-probes/trigger` 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-9d97525254c5a686", "name": "Unused endpoint: GET /api/interest-probes/pending", "shortDescription": {"text": "Unused endpoint: GET /api/interest-probes/pending"}, "fullDescription": {"text": "`src/openbiliclaw/api/app.py` declares `GET /api/interest-probes/pending` 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/22705"}, "properties": {"repository": "whiteguo233/OpenBiliClaw", "repoUrl": "https://github.com/whiteguo233/OpenBiliClaw", "branch": "main"}, "results": [{"ruleId": "scanner-5448ba33139c8925", "level": "note", "message": {"text": "Possibly dead Python function: read_secret_no_echo"}, "properties": {"repobilityId": "6bf4dad4272ab215", "scanner": "scanner-primary", "fingerprint": "5448ba33139c8925", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/agent_bootstrap.py:375"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f5f2ca9d89c42436", "level": "note", "message": {"text": "Possibly dead Python function: apply_confirmation_answers_to_args"}, "properties": {"repobilityId": "c8b180fd886eda16", "scanner": "scanner-primary", "fingerprint": "f5f2ca9d89c42436", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/agent_bootstrap.py:751"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-21f9f98a5060630e", "level": "note", "message": {"text": "Possibly dead Python function: detect_docker_missing_secrets"}, "properties": {"repobilityId": "690d3b10ecb0057b", "scanner": "scanner-primary", "fingerprint": "21f9f98a5060630e", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/agent_bootstrap.py:2711"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b697dbcc6f25a8cd", "level": "note", "message": {"text": "Possibly dead Python function: llm_concurrency_from_config"}, "properties": {"repobilityId": "91a609de719e2232", "scanner": "scanner-primary", "fingerprint": "b697dbcc6f25a8cd", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/openbiliclaw/config.py:1196"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-30efff9eaa5d561f", "level": "note", "message": {"text": "Possibly dead Python function: pool_count"}, "properties": {"repobilityId": "96899f982162cc68", "scanner": "scanner-primary", "fingerprint": "30efff9eaa5d561f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/openbiliclaw/recommendation/curator.py:282"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-cfb4ec6de7518a44", "level": "note", "message": {"text": "Possibly dead Python function: score_candidates_async"}, "properties": {"repobilityId": "90959aab36c04cb0", "scanner": "scanner-primary", "fingerprint": "cfb4ec6de7518a44", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/openbiliclaw/recommendation/curator.py:405"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0d9ed70d75be5d34", "level": "note", "message": {"text": "Possibly dead Python function: generate_personal_topic"}, "properties": {"repobilityId": "d519d0eb4e859e87", "scanner": "scanner-primary", "fingerprint": "0d9ed70d75be5d34", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/openbiliclaw/recommendation/engine.py:1559"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-591ad19ba5258cb3", "level": "note", "message": {"text": "Possibly dead Python function: clear_cookie"}, "properties": {"repobilityId": "5c1099b85b816f25", "scanner": "scanner-primary", "fingerprint": "591ad19ba5258cb3", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/openbiliclaw/bilibili/auth.py:155"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8824a938e3150fb6", "level": "note", "message": {"text": "Possibly dead Python function: auth_guard"}, "properties": {"repobilityId": "1f05620150f4af40", "scanner": "scanner-primary", "fingerprint": "8824a938e3150fb6", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/openbiliclaw/api/auth.py:306"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-27c76f1620de8c10", "level": "note", "message": {"text": "Possibly dead Python function: register_skill"}, "properties": {"repobilityId": "0a1fa58ed28f9ba6", "scanner": "scanner-primary", "fingerprint": "27c76f1620de8c10", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/openbiliclaw/agent/orchestrator.py:57"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-179345d94d326c24", "level": "note", "message": {"text": "Possibly dead Python function: run_discovery_cycle"}, "properties": {"repobilityId": "20b9a46837cc404f", "scanner": "scanner-primary", "fingerprint": "179345d94d326c24", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/openbiliclaw/agent/orchestrator.py:77"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-761852c2b37696f3", "level": "note", "message": {"text": "Possibly dead Python function: describe_all"}, "properties": {"repobilityId": "463f8c412f439395", "scanner": "scanner-primary", "fingerprint": "761852c2b37696f3", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/openbiliclaw/agent/skill.py:96"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3dca96a991337047", "level": "note", "message": {"text": "Possibly dead Python function: yt_bootstrap_item_key"}, "properties": {"repobilityId": "0407d97d855177d4", "scanner": "scanner-primary", "fingerprint": "3dca96a991337047", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/openbiliclaw/sources/yt_tasks.py:112"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-59078a28c73414b0", "level": "note", "message": {"text": "Possibly dead Python function: load_record"}, "properties": {"repobilityId": "117cca439ecf3e08", "scanner": "scanner-primary", "fingerprint": "59078a28c73414b0", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/openbiliclaw/sources/douyin_auth.py:55"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-fed9d0176863c249", "level": "note", "message": {"text": "Possibly dead Python function: clear_cookie"}, "properties": {"repobilityId": "5c1099b85b816f25", "scanner": "scanner-primary", "fingerprint": "fed9d0176863c249", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/openbiliclaw/sources/douyin_auth.py:70"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-445190355341eaa9", "level": "note", "message": {"text": "Possibly dead Python function: kick_douyin_task_dispatcher"}, "properties": {"repobilityId": "86fcc769ea166583", "scanner": "scanner-primary", "fingerprint": "445190355341eaa9", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/openbiliclaw/sources/douyin_plugin_search.py:323"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b6003491d7da818a", "level": "note", "message": {"text": "Possibly dead Python function: xhs_bootstrap_note_key"}, "properties": {"repobilityId": "4bc87b751ff0f85a", "scanner": "scanner-primary", "fingerprint": "b6003491d7da818a", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/openbiliclaw/sources/xhs_tasks.py:55"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0585954eeda7223f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 extension/src/content/bilibili.ts:15"}, "properties": {"repobilityId": "23d224983fa1f863", "scanner": "scanner-primary", "fingerprint": "0585954eeda7223f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8d5dfc711308d36c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 extension/src/content/xiaohongshu.ts:224"}, "properties": {"repobilityId": "bed7a7b7e2128fb2", "scanner": "scanner-primary", "fingerprint": "8d5dfc711308d36c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ce1b85b6eaada2e3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 extension/src/content/x.ts:93"}, "properties": {"repobilityId": "5538843f01de4c25", "scanner": "scanner-primary", "fingerprint": "ce1b85b6eaada2e3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0f3164773d65fe6b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 extension/src/background/service-worker.ts:629"}, "properties": {"repobilityId": "055614d59daf3de8", "scanner": "scanner-primary", "fingerprint": "0f3164773d65fe6b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0d721b5dac5b777e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 extension/src/background/cookie-sync.ts:229"}, "properties": {"repobilityId": "5a2cb0f9f2c2fe39", "scanner": "scanner-primary", "fingerprint": "0d721b5dac5b777e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ebb13b2e6367063a", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/openbiliclaw/web/js/views/profile.js:584"}, "properties": {"repobilityId": "cfa4cae98f99a280", "scanner": "scanner-primary", "fingerprint": "ebb13b2e6367063a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-67f8b25c19c83ca0", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/openbiliclaw/web/desktop/assets/js/app.js:2250"}, "properties": {"repobilityId": "c1163d398fbdf037", "scanner": "scanner-primary", "fingerprint": "67f8b25c19c83ca0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-d63da3583b14afc0", "level": "warning", "message": {"text": "Dockerfile runs as root: Dockerfile"}, "properties": {"repobilityId": "a2ed1bd120e507db", "scanner": "scanner-primary", "fingerprint": "d63da3583b14afc0", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-e066691601852931", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.11-slim"}, "properties": {"repobilityId": "8d2564b1160c8005", "scanner": "scanner-primary", "fingerprint": "e066691601852931", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Dockerfile"}, "region": {"startLine": 6}}}]}, {"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-e0d18d012da82f36", "level": "warning", "message": {"text": "Insecure pattern 'subprocess_shell_true' in scripts/agent_bootstrap.py:1202"}, "properties": {"repobilityId": "04269c02602b5651", "scanner": "scanner-primary", "fingerprint": "e0d18d012da82f36", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "subprocess_shell_true"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/agent_bootstrap.py"}, "region": {"startLine": 1202}}}]}, {"ruleId": "scanner-f1c2b047aed125b4", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in extension/scripts/package-firefox.mjs:1"}, "properties": {"repobilityId": "2d2c84c0773f5a98", "scanner": "scanner-primary", "fingerprint": "f1c2b047aed125b4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "extension/scripts/package-firefox.mjs"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c90a5a511a4b8fa1", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in extension/scripts/package.mjs:1"}, "properties": {"repobilityId": "34874a162c505274", "scanner": "scanner-primary", "fingerprint": "c90a5a511a4b8fa1", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "extension/scripts/package.mjs"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-fef1d76dce801e2c", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in extension/popup/popup.js:2111"}, "properties": {"repobilityId": "bd6a0de99d5d1487", "scanner": "scanner-primary", "fingerprint": "fef1d76dce801e2c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "extension/popup/popup.js"}, "region": {"startLine": 2111}}}]}, {"ruleId": "scanner-ddd6bdab33e17af3", "level": "warning", "message": {"text": "Insecure pattern 'subprocess_shell_true' in src/openbiliclaw/cli.py:1367"}, "properties": {"repobilityId": "9ea71ebbbb4e3507", "scanner": "scanner-primary", "fingerprint": "ddd6bdab33e17af3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "subprocess_shell_true"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/openbiliclaw/cli.py"}, "region": {"startLine": 1367}}}]}, {"ruleId": "scanner-5f59c1f5d2c3d318", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in src/openbiliclaw/api/auth.py:367"}, "properties": {"repobilityId": "f8934dd756cc1333", "scanner": "scanner-primary", "fingerprint": "5f59c1f5d2c3d318", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/openbiliclaw/api/auth.py"}, "region": {"startLine": 367}}}]}, {"ruleId": "scanner-14daa1e199c26ce7", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in src/openbiliclaw/api/app.py:608"}, "properties": {"repobilityId": "c3633fce73249a3c", "scanner": "scanner-primary", "fingerprint": "14daa1e199c26ce7", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/openbiliclaw/api/app.py"}, "region": {"startLine": 608}}}]}, {"ruleId": "scanner-69751bfc1ed8007e", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/openbiliclaw/web/js/app.js:22"}, "properties": {"repobilityId": "6b68d20d1f540fc5", "scanner": "scanner-primary", "fingerprint": "69751bfc1ed8007e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/openbiliclaw/web/js/app.js"}, "region": {"startLine": 22}}}]}, {"ruleId": "scanner-e15e6b76eba16536", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/openbiliclaw/web/js/views/saved.js:41"}, "properties": {"repobilityId": "46dd9b96e8e2e469", "scanner": "scanner-primary", "fingerprint": "e15e6b76eba16536", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/openbiliclaw/web/js/views/saved.js"}, "region": {"startLine": 41}}}]}, {"ruleId": "scanner-120d8b75120eed46", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/openbiliclaw/web/js/views/recommend.js:120"}, "properties": {"repobilityId": "4e132a818add9f84", "scanner": "scanner-primary", "fingerprint": "120d8b75120eed46", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/openbiliclaw/web/js/views/recommend.js"}, "region": {"startLine": 120}}}]}, {"ruleId": "scanner-4d37a960b93a3484", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/openbiliclaw/web/js/views/login.js:12"}, "properties": {"repobilityId": "e73aa23a158131cf", "scanner": "scanner-primary", "fingerprint": "4d37a960b93a3484", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/openbiliclaw/web/js/views/login.js"}, "region": {"startLine": 12}}}]}, {"ruleId": "scanner-2940600258842a0a", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/openbiliclaw/web/js/views/chat.js:99"}, "properties": {"repobilityId": "05bd2d5ecdce4c50", "scanner": "scanner-primary", "fingerprint": "2940600258842a0a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/openbiliclaw/web/js/views/chat.js"}, "region": {"startLine": 99}}}]}, {"ruleId": "scanner-01b67b904688e86c", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/openbiliclaw/web/js/views/profile.js:104"}, "properties": {"repobilityId": "99e63a5a56b68cc6", "scanner": "scanner-primary", "fingerprint": "01b67b904688e86c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/openbiliclaw/web/js/views/profile.js"}, "region": {"startLine": 104}}}]}, {"ruleId": "scanner-e1ab2f199fe2292c", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/openbiliclaw/web/desktop/assets/js/app.js:490"}, "properties": {"repobilityId": "0bda15a9becc1b4b", "scanner": "scanner-primary", "fingerprint": "e1ab2f199fe2292c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/openbiliclaw/web/desktop/assets/js/app.js"}, "region": {"startLine": 490}}}]}, {"ruleId": "scanner-e034a18ba57ae833", "level": "warning", "message": {"text": "Insecure pattern 'direct_outerhtml_assignment' in src/openbiliclaw/web/desktop/assets/js/app.js:2546"}, "properties": {"repobilityId": "7764fdd15e1e03d5", "scanner": "scanner-primary", "fingerprint": "e034a18ba57ae833", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_outerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/openbiliclaw/web/desktop/assets/js/app.js"}, "region": {"startLine": 2546}}}]}, {"ruleId": "scanner-f6f5b121f55a680b", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/openbiliclaw/web/setup/index.html:270"}, "properties": {"repobilityId": "6b0b3d7ab3f137c3", "scanner": "scanner-primary", "fingerprint": "f6f5b121f55a680b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/openbiliclaw/web/setup/index.html"}, "region": {"startLine": 270}}}]}, {"ruleId": "scanner-728fd43e7ecd8a2d", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ed9577185575fd61", "scanner": "scanner-primary", "fingerprint": "728fd43e7ecd8a2d", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/publish-chrome-webstore.yml"}, "region": {"startLine": 27}}}]}, {"ruleId": "scanner-728fd43e7ecd8a2d", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "e474f73f9fc1f598", "scanner": "scanner-primary", "fingerprint": "728fd43e7ecd8a2d", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/publish-chrome-webstore.yml"}, "region": {"startLine": 30}}}]}, {"ruleId": "scanner-1c090c7bfc3f2fc8", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "7b2996fa4eb8941e", "scanner": "scanner-primary", "fingerprint": "1c090c7bfc3f2fc8", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release-extension.yml"}, "region": {"startLine": 18}}}]}, {"ruleId": "scanner-1c090c7bfc3f2fc8", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "58d13a09d106818e", "scanner": "scanner-primary", "fingerprint": "1c090c7bfc3f2fc8", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release-extension.yml"}, "region": {"startLine": 21}}}]}, {"ruleId": "scanner-1c090c7bfc3f2fc8", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "0215f0db636c1a10", "scanner": "scanner-primary", "fingerprint": "1c090c7bfc3f2fc8", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release-extension.yml"}, "region": {"startLine": 77}}}]}, {"ruleId": "scanner-1c090c7bfc3f2fc8", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "7b2996fa4eb8941e", "scanner": "scanner-primary", "fingerprint": "1c090c7bfc3f2fc8", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release-extension.yml"}, "region": {"startLine": 90}}}]}, {"ruleId": "scanner-1c090c7bfc3f2fc8", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "4dc69316e38bc39d", "scanner": "scanner-primary", "fingerprint": "1c090c7bfc3f2fc8", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release-extension.yml"}, "region": {"startLine": 95}}}]}, {"ruleId": "scanner-168d90d0da1bc76c", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "46354682e3a73c35", "scanner": "scanner-primary", "fingerprint": "168d90d0da1bc76c", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release-extension.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d76eaf0bd66712c9", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "c5ae159672b8a0d5", "scanner": "scanner-primary", "fingerprint": "d76eaf0bd66712c9", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release-desktop.yml"}, "region": {"startLine": 143}}}]}, {"ruleId": "scanner-d76eaf0bd66712c9", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "9c235af251f2c155", "scanner": "scanner-primary", "fingerprint": "d76eaf0bd66712c9", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release-desktop.yml"}, "region": {"startLine": 148}}}]}, {"ruleId": "scanner-b95d7b10e8652696", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "a47a1d35d34e6ab7", "scanner": "scanner-primary", "fingerprint": "b95d7b10e8652696", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release-desktop.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "97a9a5de61d82fcd", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 15}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "1b0add4759a308ec", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 18}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "97a9a5de61d82fcd", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 43}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "4a63b1fd6887cae9", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 46}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "97a9a5de61d82fcd", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 81}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "1b0add4759a308ec", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 84}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "54c8f1b47dd62535", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 92}}}]}, {"ruleId": "scanner-8355bdc1ce844cbb", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "9e454dcf6b8fd1fb", "scanner": "scanner-primary", "fingerprint": "8355bdc1ce844cbb", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release-backend.yml"}, "region": {"startLine": 18}}}]}, {"ruleId": "scanner-3b3f97b695be8d0d", "level": "note", "message": {"text": "Very large file: tests/test_api_xhs_ingest.py (1354 lines)"}, "properties": {"repobilityId": "9f0f3f070f396414", "scanner": "scanner-primary", "fingerprint": "3b3f97b695be8d0d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f1ce9a36ae8ede78", "level": "note", "message": {"text": "Very large file: tests/test_storage.py (3031 lines)"}, "properties": {"repobilityId": "1595d45d9b5ec413", "scanner": "scanner-primary", "fingerprint": "f1ce9a36ae8ede78", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-238c5af14e7334b9", "level": "note", "message": {"text": "Very large file: tests/test_recommendation_engine.py (2787 lines)"}, "properties": {"repobilityId": "30f264452af6b958", "scanner": "scanner-primary", "fingerprint": "238c5af14e7334b9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ad81ca22902dd86c", "level": "note", "message": {"text": "Very large file: tests/test_pipeline_advanced.py (3052 lines)"}, "properties": {"repobilityId": "82ea0af6ea4dcc55", "scanner": "scanner-primary", "fingerprint": "ad81ca22902dd86c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a403b9c067a5d0ee", "level": "note", "message": {"text": "Very large file: tests/test_api_app.py (8143 lines)"}, "properties": {"repobilityId": "5384d91795faac14", "scanner": "scanner-primary", "fingerprint": "a403b9c067a5d0ee", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c96174ec60d2b5f2", "level": "note", "message": {"text": "Very large file: tests/test_config.py (1966 lines)"}, "properties": {"repobilityId": "790fa6e92b697628", "scanner": "scanner-primary", "fingerprint": "c96174ec60d2b5f2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-dccd15593ad5e02c", "level": "note", "message": {"text": "Very large file: tests/test_speculator.py (1445 lines)"}, "properties": {"repobilityId": "da4eb7764b3ad8b1", "scanner": "scanner-primary", "fingerprint": "dccd15593ad5e02c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-5ecc353191aa0db4", "level": "note", "message": {"text": "Very large file: tests/test_cli.py (5701 lines)"}, "properties": {"repobilityId": "2121c5b297f0116c", "scanner": "scanner-primary", "fingerprint": "5ecc353191aa0db4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-404e03173a3c2a6d", "level": "note", "message": {"text": "Very large file: tests/test_refresh_runtime.py (3433 lines)"}, "properties": {"repobilityId": "3978c86e59113dff", "scanner": "scanner-primary", "fingerprint": "404e03173a3c2a6d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-0774a7157053ad8b", "level": "note", "message": {"text": "Very large file: tests/test_discovery_engine.py (2190 lines)"}, "properties": {"repobilityId": "7a19d1361de341fc", "scanner": "scanner-primary", "fingerprint": "0774a7157053ad8b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-fe47ce4235b5fd91", "level": "note", "message": {"text": "Very large file: tests/test_llm_registry.py (1518 lines)"}, "properties": {"repobilityId": "6169d0e18256060d", "scanner": "scanner-primary", "fingerprint": "fe47ce4235b5fd91", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-0dce53b68c65bc81", "level": "note", "message": {"text": "Very large file: scripts/agent_bootstrap.py (3279 lines)"}, "properties": {"repobilityId": "35f0f1041ac1a40b", "scanner": "scanner-primary", "fingerprint": "0dce53b68c65bc81", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-21b497b082502cae", "level": "note", "message": {"text": "Very large file: extension/popup/popup.js (6764 lines)"}, "properties": {"repobilityId": "5fb90a122bf75980", "scanner": "scanner-primary", "fingerprint": "21b497b082502cae", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-2a60ab756346c6ad", "level": "note", "message": {"text": "Very large file: extension/src/content/douyin.ts (1508 lines)"}, "properties": {"repobilityId": "ff6c3f1f385eaf40", "scanner": "scanner-primary", "fingerprint": "2a60ab756346c6ad", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-313d50924cc7c24f", "level": "note", "message": {"text": "Very large file: src/openbiliclaw/config.py (1970 lines)"}, "properties": {"repobilityId": "23f21c0dab078cd6", "scanner": "scanner-primary", "fingerprint": "313d50924cc7c24f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-27a4efafda9c964c", "level": "note", "message": {"text": "Very large file: src/openbiliclaw/cli.py (7099 lines)"}, "properties": {"repobilityId": "41081f484425d8b4", "scanner": "scanner-primary", "fingerprint": "27a4efafda9c964c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-0a4ce19a356ab597", "level": "note", "message": {"text": "Very large file: src/openbiliclaw/recommendation/engine.py (2607 lines)"}, "properties": {"repobilityId": "a7a3f317feca368e", "scanner": "scanner-primary", "fingerprint": "0a4ce19a356ab597", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b67beeb919883af2", "level": "note", "message": {"text": "Very large file: src/openbiliclaw/api/app.py (7731 lines)"}, "properties": {"repobilityId": "2a62bca392041ee4", "scanner": "scanner-primary", "fingerprint": "b67beeb919883af2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-1695546a386a3441", "level": "note", "message": {"text": "Very large file: src/openbiliclaw/api/runtime_context.py (1216 lines)"}, "properties": {"repobilityId": "0c459b0415ad3b89", "scanner": "scanner-primary", "fingerprint": "1695546a386a3441", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-aaeb538c04c34c3d", "level": "note", "message": {"text": "Very large file: src/openbiliclaw/soul/engine.py (1537 lines)"}, "properties": {"repobilityId": "a722271509325230", "scanner": "scanner-primary", "fingerprint": "aaeb538c04c34c3d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-61666e8d93f64d5e", "level": "note", "message": {"text": "Very large file: src/openbiliclaw/soul/speculator.py (1843 lines)"}, "properties": {"repobilityId": "0e872045711dfc3f", "scanner": "scanner-primary", "fingerprint": "61666e8d93f64d5e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-42dec2b716248fd3", "level": "note", "message": {"text": "Very large file: src/openbiliclaw/web/js/views/recommend.js (1402 lines)"}, "properties": {"repobilityId": "f4cd546cee87cd68", "scanner": "scanner-primary", "fingerprint": "42dec2b716248fd3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b34bf9c10d5abe99", "level": "note", "message": {"text": "Very large file: src/openbiliclaw/web/desktop/assets/js/app.js (4549 lines)"}, "properties": {"repobilityId": "be8d90d14af933cc", "scanner": "scanner-primary", "fingerprint": "b34bf9c10d5abe99", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-770adc45a9bedee0", "level": "note", "message": {"text": "Very large file: src/openbiliclaw/runtime/refresh.py (2595 lines)"}, "properties": {"repobilityId": "a39d4ac7fcb90762", "scanner": "scanner-primary", "fingerprint": "770adc45a9bedee0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-624fcdd26e1b9b60", "level": "note", "message": {"text": "Very large file: src/openbiliclaw/discovery/engine.py (2514 lines)"}, "properties": {"repobilityId": "f88a6dc824385d2b", "scanner": "scanner-primary", "fingerprint": "624fcdd26e1b9b60", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-5488dbc823e9be9c", "level": "note", "message": {"text": "Very large file: src/openbiliclaw/storage/database.py (5531 lines)"}, "properties": {"repobilityId": "a0e2139280c4faed", "scanner": "scanner-primary", "fingerprint": "5488dbc823e9be9c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f94ae1a70f028e35", "level": "note", "message": {"text": "Very large file: src/openbiliclaw/llm/prompts.py (2181 lines)"}, "properties": {"repobilityId": "c5c93ed8e650842c", "scanner": "scanner-primary", "fingerprint": "f94ae1a70f028e35", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "2c1fe930c1db78af", "scanner": "scanner-primary", "fingerprint": "3ab5d313dda8e5f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["debug", "cleanup", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-72b2a6250083a784", "level": "warning", "message": {"text": "Placeholder or mock-heavy implementation detected"}, "properties": {"repobilityId": "faea710c6a053fb7", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "e9937b406a4e2604", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "b8a42fcc15a5c684", "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": "f30e0a800b9b411f", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-4a51a6513cf7a0d0", "level": "warning", "message": {"text": "Agent instruction contains unpinned remote install: skills/browse/SKILL.md"}, "properties": {"repobilityId": "ba6d0b007f82ea3c", "scanner": "scanner-primary", "fingerprint": "4a51a6513cf7a0d0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "supply-chain", "skill_file"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "skills/browse/SKILL.md"}, "region": {"startLine": 34}}}]}, {"ruleId": "scanner-e725d2ab884fbd49", "level": "note", "message": {"text": "Multiple root agent instruction files without precedence"}, "properties": {"repobilityId": "1953db6c89508d22", "scanner": "scanner-primary", "fingerprint": "e725d2ab884fbd49", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["agent-instructions", "governance"]}}, {"ruleId": "scanner-ff4f62f06ce51225", "level": "note", "message": {"text": "Legacy-named symbol `test_get_pool_candidates_skips_rows_without_precomputed_copy` in tests/test_storage.py:1586"}, "properties": {"repobilityId": "ba298ec30290dfd1", "scanner": "scanner-primary", "fingerprint": "ff4f62f06ce51225", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-c27db689703dbdff", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/test_storage.py:502"}, "properties": {"repobilityId": "31e5bc21a67629eb", "scanner": "scanner-primary", "fingerprint": "c27db689703dbdff", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-882ff658d8e24bce", "level": "note", "message": {"text": "Legacy-named symbol `test_reshuffle_recommendations_hides_missing_precomputed_copy` in tests/test_recommendation_engine.py:1070"}, "properties": {"repobilityId": "fea7381efa548f04", "scanner": "scanner-primary", "fingerprint": "882ff658d8e24bce", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-c21ff602e43cd695", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/test_llm_prompts.py:457"}, "properties": {"repobilityId": "521f02d244bdf9ae", "scanner": "scanner-primary", "fingerprint": "c21ff602e43cd695", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6097dac594465c79", "level": "note", "message": {"text": "Legacy-named symbol `test_referenced_needed_cover_kept_even_when_old` in tests/test_image_cache.py:150"}, "properties": {"repobilityId": "626f2331c8c6af9e", "scanner": "scanner-primary", "fingerprint": "6097dac594465c79", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-514396565168c1e1", "level": "note", "message": {"text": "Legacy-named symbol `test_apply_overrides_empty_is_pure_copy` in tests/test_overrides.py:83"}, "properties": {"repobilityId": "f9065311f1180533", "scanner": "scanner-primary", "fingerprint": "514396565168c1e1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-a7395b64fc2b4df1", "level": "note", "message": {"text": "Legacy-named symbol `precompute_pool_copy` in tests/test_api_app.py:288"}, "properties": {"repobilityId": "e8f5b226dfdbf269", "scanner": "scanner-primary", "fingerprint": "a7395b64fc2b4df1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-1fa64a2849664179", "level": "note", "message": {"text": "Legacy-named symbol `test_twitter_engagement_scoring_v1` in tests/test_event_satisfaction.py:155"}, "properties": {"repobilityId": "d6483a3df3c8515f", "scanner": "scanner-primary", "fingerprint": "1fa64a2849664179", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-524d4956acf628bb", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/test_x_client.py:44"}, "properties": {"repobilityId": "8de12429fdddc534", "scanner": "scanner-primary", "fingerprint": "524d4956acf628bb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3dad49b2d9b00769", "level": "note", "message": {"text": "Legacy-named symbol `acct_old` in tests/test_codex_auth.py:104"}, "properties": {"repobilityId": "9520adf2532426d4", "scanner": "scanner-primary", "fingerprint": "3dad49b2d9b00769", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-b3ac4eba2bf1a1ed", "level": "note", "message": {"text": "Legacy-named symbol `BV_legacy` in tests/test_franchise_key_e2e.py:74"}, "properties": {"repobilityId": "d4e41d214f5d5ef9", "scanner": "scanner-primary", "fingerprint": "b3ac4eba2bf1a1ed", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-cf1d5975683617b3", "level": "note", "message": {"text": "Legacy-named symbol `exec_old` in tests/test_discovery_keywords.py:243"}, "properties": {"repobilityId": "11afe200c0b098fd", "scanner": "scanner-primary", "fingerprint": "cf1d5975683617b3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-e9ef4f581f3c2ed8", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/test_api_auth.py:674"}, "properties": {"repobilityId": "58e4c81533d36985", "scanner": "scanner-primary", "fingerprint": "e9ef4f581f3c2ed8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4fa778e80aeb0fc4", "level": "note", "message": {"text": "Legacy-named symbol `_maybe_create_runtime_database_backup` in tests/test_cli.py:527"}, "properties": {"repobilityId": "e874bb7317011157", "scanner": "scanner-primary", "fingerprint": "4fa778e80aeb0fc4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-24dbe7f24a790ac0", "level": "none", "message": {"text": "Commented-code block (9 lines) in tests/test_cli.py:2482"}, "properties": {"repobilityId": "4f2527daea9b2713", "scanner": "scanner-primary", "fingerprint": "24dbe7f24a790ac0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bb1f85dbe5fc1179", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/test_e2e_multi_source_diversity.py:435"}, "properties": {"repobilityId": "8c53d59016760be7", "scanner": "scanner-primary", "fingerprint": "bb1f85dbe5fc1179", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-34db756e97f304a2", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/test_trending_strategy.py:290"}, "properties": {"repobilityId": "22c3e53f7b49e4de", "scanner": "scanner-primary", "fingerprint": "34db756e97f304a2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d66b4c88568d1949", "level": "note", "message": {"text": "Legacy-named symbol `test_migrate_noop_when_nothing_legacy` in tests/test_packaging_entry.py:253"}, "properties": {"repobilityId": "c25f798acf18fe77", "scanner": "scanner-primary", "fingerprint": "d66b4c88568d1949", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-586542bbd6fd89c3", "level": "note", "message": {"text": "Legacy-named symbol `test_keeps_yielded_word_even_when_old` in tests/test_keyword_yield.py:118"}, "properties": {"repobilityId": "12186852bc7f8ef1", "scanner": "scanner-primary", "fingerprint": "586542bbd6fd89c3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-9e384ae0b7678f93", "level": "note", "message": {"text": "Legacy-named symbol `precompute_pool_copy` in tests/test_refresh_runtime.py:420"}, "properties": {"repobilityId": "32086320daf9d01d", "scanner": "scanner-primary", "fingerprint": "9e384ae0b7678f93", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-91c6a6393263a1bb", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/test_refresh_runtime.py:1217"}, "properties": {"repobilityId": "e2bad463bb0fc130", "scanner": "scanner-primary", "fingerprint": "91c6a6393263a1bb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-81470746f8a1a4c6", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/test_llm_usage.py:332"}, "properties": {"repobilityId": "a1e674cb640024a6", "scanner": "scanner-primary", "fingerprint": "81470746f8a1a4c6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-59eb9ac8e65cf67e", "level": "note", "message": {"text": "Legacy-named symbol `test_database_get_delight_candidate_requires_ready_copy` in tests/test_delight_scorer.py:300"}, "properties": {"repobilityId": "448f3ed0481c8166", "scanner": "scanner-primary", "fingerprint": "59eb9ac8e65cf67e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-f925ca46edf599d4", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/agent_bootstrap.py:103"}, "properties": {"repobilityId": "5fcb707ac5fa71ed", "scanner": "scanner-primary", "fingerprint": "f925ca46edf599d4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-64aae796d65e7982", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/agent_bootstrap.py:1229"}, "properties": {"repobilityId": "a558396aa6b435dc", "scanner": "scanner-primary", "fingerprint": "64aae796d65e7982", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9406a01d4bca9a9e", "level": "none", "message": {"text": "Commented-code block (5 lines) in extension/tests/xhs-task-executor.test.ts:876"}, "properties": {"repobilityId": "dced936f5b2d1f6d", "scanner": "scanner-primary", "fingerprint": "9406a01d4bca9a9e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3ba520a653c9b31a", "level": "none", "message": {"text": "Commented-code block (5 lines) in extension/tests/runtime-refresh-coalescing.test.ts:46"}, "properties": {"repobilityId": "fa89ab564c344cb0", "scanner": "scanner-primary", "fingerprint": "3ba520a653c9b31a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6af83fac1456de8b", "level": "none", "message": {"text": "Commented-code block (5 lines) in extension/tests/popup-embedding-banner.test.ts:92"}, "properties": {"repobilityId": "5c2b1955d90d7bc2", "scanner": "scanner-primary", "fingerprint": "6af83fac1456de8b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-20d6ac72b8ee2ee7", "level": "none", "message": {"text": "Commented-code block (5 lines) in extension/tests/popup-saved-sync.test.ts:162"}, "properties": {"repobilityId": "ac8b32a377684e7b", "scanner": "scanner-primary", "fingerprint": "20d6ac72b8ee2ee7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1e4f509c1ddd4658", "level": "none", "message": {"text": "Commented-code block (5 lines) in extension/tests/popup-layout.test.ts:205"}, "properties": {"repobilityId": "ce92b091a72a0726", "scanner": "scanner-primary", "fingerprint": "1e4f509c1ddd4658", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-332d7d4c84e857d0", "level": "none", "message": {"text": "Commented-code block (5 lines) in extension/scripts/package-firefox.mjs:48"}, "properties": {"repobilityId": "658441cf2e86a196", "scanner": "scanner-primary", "fingerprint": "332d7d4c84e857d0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-80d310f8bfac4ca2", "level": "none", "message": {"text": "Commented-code block (5 lines) in extension/popup/popup-helpers.js:740"}, "properties": {"repobilityId": "f7c1d5d1e41c2a6c", "scanner": "scanner-primary", "fingerprint": "80d310f8bfac4ca2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9872c75e2b5cbae6", "level": "none", "message": {"text": "Commented-code block (5 lines) in extension/popup/popup-init-control.js:30"}, "properties": {"repobilityId": "35cce0bff8401ab8", "scanner": "scanner-primary", "fingerprint": "9872c75e2b5cbae6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6022626cf4ca6734", "level": "none", "message": {"text": "Commented-code block (6 lines) in extension/popup/popup.js:138"}, "properties": {"repobilityId": "41755f9ad0458eac", "scanner": "scanner-primary", "fingerprint": "6022626cf4ca6734", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-100f97a07d58b5c1", "level": "none", "message": {"text": "Commented-code block (10 lines) in extension/src/content/xiaohongshu.ts:38"}, "properties": {"repobilityId": "11f7c11831b5ecd9", "scanner": "scanner-primary", "fingerprint": "100f97a07d58b5c1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-86684717dce1daa2", "level": "none", "message": {"text": "Commented-code block (6 lines) in extension/src/content/douyin.ts:70"}, "properties": {"repobilityId": "1d8853d046615e52", "scanner": "scanner-primary", "fingerprint": "86684717dce1daa2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e7ecd320c398b949", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 extension/src/content/douyin.ts:987"}, "properties": {"repobilityId": "25c72a7466aacde3", "scanner": "scanner-primary", "fingerprint": "e7ecd320c398b949", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-769b967d3ba727ef", "level": "none", "message": {"text": "Commented-code block (5 lines) in extension/src/content/kernel.ts:37"}, "properties": {"repobilityId": "edc6f5fe8fe1b914", "scanner": "scanner-primary", "fingerprint": "769b967d3ba727ef", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-86303539d2e52cf9", "level": "none", "message": {"text": "Commented-code block (8 lines) in extension/src/content/xhs/bootstrap.ts:947"}, "properties": {"repobilityId": "4474742a4ee79e69", "scanner": "scanner-primary", "fingerprint": "86303539d2e52cf9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2ab52f44c1cf082d", "level": "none", "message": {"text": "Commented-code block (9 lines) in extension/src/background/dy-task-dispatcher.ts:79"}, "properties": {"repobilityId": "603236f0724d8df3", "scanner": "scanner-primary", "fingerprint": "2ab52f44c1cf082d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-15748b214f1ec4e9", "level": "none", "message": {"text": "Commented-code block (5 lines) in extension/src/background/service-worker.ts:70"}, "properties": {"repobilityId": "56d23370b8afdf0f", "scanner": "scanner-primary", "fingerprint": "15748b214f1ec4e9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2d2705e0596d89e2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 extension/src/background/service-worker.ts:97"}, "properties": {"repobilityId": "a10739660970ef43", "scanner": "scanner-primary", "fingerprint": "2d2705e0596d89e2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1ff4a3efc383a10a", "level": "none", "message": {"text": "Commented-code block (7 lines) in extension/src/background/xhs-task-dispatcher.ts:19"}, "properties": {"repobilityId": "eba37cab80281896", "scanner": "scanner-primary", "fingerprint": "1ff4a3efc383a10a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1e44b33769804ca5", "level": "none", "message": {"text": "Commented-code block (7 lines) in extension/src/main/dy-fetch-tap.ts:526"}, "properties": {"repobilityId": "f14618658d871522", "scanner": "scanner-primary", "fingerprint": "1e44b33769804ca5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-83f9531d1534555e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 extension/src/main/dy-fetch-tap.ts:528"}, "properties": {"repobilityId": "1dea1da4324599bf", "scanner": "scanner-primary", "fingerprint": "83f9531d1534555e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-afc6c70ffe657eff", "level": "none", "message": {"text": "Commented-code block (6 lines) in packaging/build.py:451"}, "properties": {"repobilityId": "7e3039886cece3d1", "scanner": "scanner-primary", "fingerprint": "afc6c70ffe657eff", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d1168694a9808339", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 packaging/build.py:341"}, "properties": {"repobilityId": "27c53d1cfedc343a", "scanner": "scanner-primary", "fingerprint": "d1168694a9808339", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5c2a17e00284f91f", "level": "none", "message": {"text": "Commented-code block (9 lines) in packaging/entry.py:482"}, "properties": {"repobilityId": "cc5f57c3f4c3986c", "scanner": "scanner-primary", "fingerprint": "5c2a17e00284f91f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a2cb597d2935ab5e", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 packaging/entry.py:452"}, "properties": {"repobilityId": "9e77b9f53b54cbe1", "scanner": "scanner-primary", "fingerprint": "a2cb597d2935ab5e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cffba7973b3d6e4a", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/openbiliclaw/config.py:115"}, "properties": {"repobilityId": "2b240e6ce0a1443a", "scanner": "scanner-primary", "fingerprint": "cffba7973b3d6e4a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-84df34f456ea72c2", "level": "note", "message": {"text": "Legacy-named symbol `_maybe_create_runtime_database_backup` in src/openbiliclaw/cli.py:726"}, "properties": {"repobilityId": "fee9bb18a1fbc6c8", "scanner": "scanner-primary", "fingerprint": "84df34f456ea72c2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-e96775bdcba2f4e1", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/openbiliclaw/cli.py:149"}, "properties": {"repobilityId": "b8b0cfbc1a4ed220", "scanner": "scanner-primary", "fingerprint": "e96775bdcba2f4e1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-547f3de2ae570634", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 src/openbiliclaw/cli.py:1343"}, "properties": {"repobilityId": "5551420b0032952c", "scanner": "scanner-primary", "fingerprint": "547f3de2ae570634", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-90cf355f1d52e7c7", "level": "error", "message": {"text": "Blocking `urllib.request.urlopen(...)` inside `async def _acknowledge_delight` \u2014 src/openbiliclaw/integrations/openclaw/cli.py:232"}, "properties": {"repobilityId": "80f5300bde564ab6", "scanner": "scanner-primary", "fingerprint": "90cf355f1d52e7c7", "layer": "quality", "severity": "high", "confidence": 1.0, "tags": ["integrity", "sync-io-in-async", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/openbiliclaw/integrations/openclaw/cli.py"}, "region": {"startLine": 232}}}]}, {"ruleId": "scanner-513a0319c47e4d22", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/openbiliclaw/recommendation/delight.py:83"}, "properties": {"repobilityId": "47ea9b1d274d72b4", "scanner": "scanner-primary", "fingerprint": "513a0319c47e4d22", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-35da609f5a866e95", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/openbiliclaw/recommendation/curator.py:57"}, "properties": {"repobilityId": "1ea07c19d875b066", "scanner": "scanner-primary", "fingerprint": "35da609f5a866e95", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a81b292376b67fe6", "level": "note", "message": {"text": "Legacy-named symbol `precompute_pool_copy` in src/openbiliclaw/recommendation/engine.py:199"}, "properties": {"repobilityId": "068f0f17228ac3c5", "scanner": "scanner-primary", "fingerprint": "a81b292376b67fe6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-1f35abb0a12f1d60", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/openbiliclaw/recommendation/engine.py:191"}, "properties": {"repobilityId": "6f77d367ffb1a5b4", "scanner": "scanner-primary", "fingerprint": "1f35abb0a12f1d60", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-01f1a46d84230d2e", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/openbiliclaw/bilibili/api.py:462"}, "properties": {"repobilityId": "401277369c93a149", "scanner": "scanner-primary", "fingerprint": "01f1a46d84230d2e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-67e3630043474daa", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/openbiliclaw/api/auth.py:40"}, "properties": {"repobilityId": "6374dd61db6514f6", "scanner": "scanner-primary", "fingerprint": "67e3630043474daa", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-da007cdd4cf2b81f", "level": "none", "message": {"text": "Commented-code block (11 lines) in src/openbiliclaw/api/app.py:141"}, "properties": {"repobilityId": "b38353193405ccd9", "scanner": "scanner-primary", "fingerprint": "da007cdd4cf2b81f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ff1443f4b28f6223", "level": "note", "message": {"text": "Legacy-named symbol `precompute_pool_copy` in src/openbiliclaw/api/runtime_context.py:918"}, "properties": {"repobilityId": "5bbdb88b2a5a36fe", "scanner": "scanner-primary", "fingerprint": "ff1443f4b28f6223", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-a13c9b1973008a26", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/openbiliclaw/api/runtime_context.py:256"}, "properties": {"repobilityId": "04cd330ffd2ff6a1", "scanner": "scanner-primary", "fingerprint": "a13c9b1973008a26", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-551ae4969d5fecad", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/openbiliclaw/sources/browser.py:26"}, "properties": {"repobilityId": "7a8e58c7b35145bf", "scanner": "scanner-primary", "fingerprint": "551ae4969d5fecad", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ad1a43c74b9d5479", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/openbiliclaw/soul/cognition_cycle.py:63"}, "properties": {"repobilityId": "83e81db1ee8da3c6", "scanner": "scanner-primary", "fingerprint": "ad1a43c74b9d5479", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-540cde40a0eb5db1", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/openbiliclaw/soul/consolidator.py:55"}, "properties": {"repobilityId": "14f95bc8ec47bbee", "scanner": "scanner-primary", "fingerprint": "540cde40a0eb5db1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e2a6a4cbf0249176", "level": "note", "message": {"text": "Legacy-named symbol `from_legacy` in src/openbiliclaw/soul/profile_builder.py:130"}, "properties": {"repobilityId": "96ccc96e9ce529e1", "scanner": "scanner-primary", "fingerprint": "e2a6a4cbf0249176", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-260d4c6f1ec040a3", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/openbiliclaw/soul/profile_builder.py:278"}, "properties": {"repobilityId": "50404794d92776a3", "scanner": "scanner-primary", "fingerprint": "260d4c6f1ec040a3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0fce8af70ac50521", "level": "note", "message": {"text": "Legacy-named symbol `from_legacy` in src/openbiliclaw/soul/engine.py:301"}, "properties": {"repobilityId": "78de48c0306e85a7", "scanner": "scanner-primary", "fingerprint": "0fce8af70ac50521", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-17cefd6b789a3bbb", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/openbiliclaw/soul/engine.py:135"}, "properties": {"repobilityId": "c19273a39dab1b50", "scanner": "scanner-primary", "fingerprint": "17cefd6b789a3bbb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b7439a1ca2a57d88", "level": "note", "message": {"text": "Legacy-named symbol `from_legacy` in src/openbiliclaw/soul/profile.py:632"}, "properties": {"repobilityId": "4f3cc2dd04231ac7", "scanner": "scanner-primary", "fingerprint": "b7439a1ca2a57d88", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-c905419283a93057", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/openbiliclaw/soul/pipeline.py:690"}, "properties": {"repobilityId": "85cf5b0887b97186", "scanner": "scanner-primary", "fingerprint": "c905419283a93057", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2af2d8e7bcd1e315", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/openbiliclaw/soul/speculator.py:285"}, "properties": {"repobilityId": "dd2fb80a6c4aa73f", "scanner": "scanner-primary", "fingerprint": "2af2d8e7bcd1e315", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-41465e95d388a608", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/openbiliclaw/soul/preference_analyzer.py:24"}, "properties": {"repobilityId": "6d323662fe97d8e4", "scanner": "scanner-primary", "fingerprint": "41465e95d388a608", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9c335b0691abfd75", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/openbiliclaw/web/js/app.js:223"}, "properties": {"repobilityId": "673882e625d5fd99", "scanner": "scanner-primary", "fingerprint": "9c335b0691abfd75", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-279808340f4a80b4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/openbiliclaw/web/js/views/saved.js:30"}, "properties": {"repobilityId": "195962adbd68d215", "scanner": "scanner-primary", "fingerprint": "279808340f4a80b4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b7c6bc2deb472edd", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/openbiliclaw/web/js/views/profile.js:497"}, "properties": {"repobilityId": "93c5fbc89c94135c", "scanner": "scanner-primary", "fingerprint": "b7c6bc2deb472edd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7ebd4d1410702130", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/openbiliclaw/web/desktop/assets/js/app.js:1362"}, "properties": {"repobilityId": "2d31607ed3cafa02", "scanner": "scanner-primary", "fingerprint": "7ebd4d1410702130", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-371787e8459c9cb1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/openbiliclaw/web/desktop/assets/js/app.js:1376"}, "properties": {"repobilityId": "0ac0155e85d77c45", "scanner": "scanner-primary", "fingerprint": "371787e8459c9cb1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-407e7fd99ae40454", "level": "note", "message": {"text": "Legacy-named symbol `norm_old` in src/openbiliclaw/eval/optimizer.py:576"}, "properties": {"repobilityId": "355ec23b8240bce7", "scanner": "scanner-primary", "fingerprint": "407e7fd99ae40454", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-3cc2765f941cbef7", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/openbiliclaw/memory/manager.py:146"}, "properties": {"repobilityId": "b26ef2267cc0b090", "scanner": "scanner-primary", "fingerprint": "3cc2765f941cbef7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2f6ee7aeaf5f6fdb", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/openbiliclaw/runtime/init_prereqs.py:20"}, "properties": {"repobilityId": "7731b6be723fe89b", "scanner": "scanner-primary", "fingerprint": "2f6ee7aeaf5f6fdb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-efdf4e0db20e2a66", "level": "note", "message": {"text": "Legacy-named symbol `precompute_pool_copy` in src/openbiliclaw/runtime/refresh.py:239"}, "properties": {"repobilityId": "a840785f61d13b86", "scanner": "scanner-primary", "fingerprint": "efdf4e0db20e2a66", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-a71593cc23515463", "level": "none", "message": {"text": "Commented-code block (14 lines) in src/openbiliclaw/runtime/refresh.py:288"}, "properties": {"repobilityId": "40e3401ca965b863", "scanner": "scanner-primary", "fingerprint": "a71593cc23515463", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ed839a44b02bd59e", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/openbiliclaw/runtime/x_producer.py:84"}, "properties": {"repobilityId": "39f3509816d111a2", "scanner": "scanner-primary", "fingerprint": "ed839a44b02bd59e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b03598632dca833b", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/openbiliclaw/runtime/xhs_producer.py:47"}, "properties": {"repobilityId": "63d38ad20ee2316e", "scanner": "scanner-primary", "fingerprint": "b03598632dca833b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-036b1f072b129686", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/openbiliclaw/runtime/image_cache.py:243"}, "properties": {"repobilityId": "e3049fbed561b072", "scanner": "scanner-primary", "fingerprint": "036b1f072b129686", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-41f5d56cfca32564", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/openbiliclaw/runtime/keyword_planner.py:77"}, "properties": {"repobilityId": "b2330a167f6e0cf9", "scanner": "scanner-primary", "fingerprint": "41f5d56cfca32564", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d5c62a2e41ff61a3", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/openbiliclaw/runtime/updater.py:276"}, "properties": {"repobilityId": "0fff795d562278d2", "scanner": "scanner-primary", "fingerprint": "d5c62a2e41ff61a3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ff483419571b2160", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/openbiliclaw/runtime/account_sync.py:114"}, "properties": {"repobilityId": "db38f66cd40f25cb", "scanner": "scanner-primary", "fingerprint": "ff483419571b2160", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b682464d98da8ab1", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/openbiliclaw/runtime/ollama_supervisor.py:119"}, "properties": {"repobilityId": "45c5d1f1d33e60ec", "scanner": "scanner-primary", "fingerprint": "b682464d98da8ab1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6274527bdb218fab", "level": "note", "message": {"text": "Legacy-named symbol `precompute_pool_copy` in src/openbiliclaw/runtime/task_registry.py:115"}, "properties": {"repobilityId": "e8b0396041d00c16", "scanner": "scanner-primary", "fingerprint": "6274527bdb218fab", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-374c6cce48af58f4", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/openbiliclaw/runtime/youtube_producer.py:56"}, "properties": {"repobilityId": "24ed9c70580b4649", "scanner": "scanner-primary", "fingerprint": "374c6cce48af58f4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-33238b5ceec0d3b3", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/openbiliclaw/runtime/douyin_producer.py:94"}, "properties": {"repobilityId": "39e0ccec51efef01", "scanner": "scanner-primary", "fingerprint": "33238b5ceec0d3b3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-119f7c2eef682205", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/openbiliclaw/youtube/takeout.py:251"}, "properties": {"repobilityId": "c00fcfed72b91fea", "scanner": "scanner-primary", "fingerprint": "119f7c2eef682205", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-264d737abc2b1846", "level": "none", "message": {"text": "Commented-code block (11 lines) in src/openbiliclaw/discovery/engine.py:53"}, "properties": {"repobilityId": "17be9dafcb60ea65", "scanner": "scanner-primary", "fingerprint": "264d737abc2b1846", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-07c244769f067b97", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/openbiliclaw/discovery/strategies/_utils.py:289"}, "properties": {"repobilityId": "183fd33ce7d9ac23", "scanner": "scanner-primary", "fingerprint": "07c244769f067b97", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-85f74e0981a3ec88", "level": "none", "message": {"text": "Commented-code block (11 lines) in src/openbiliclaw/discovery/strategies/explore.py:65"}, "properties": {"repobilityId": "6311df08b96061bf", "scanner": "scanner-primary", "fingerprint": "85f74e0981a3ec88", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-140e151e8ffebe07", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/openbiliclaw/discovery/strategies/related_chain.py:54"}, "properties": {"repobilityId": "f6e927cd6b1e7b89", "scanner": "scanner-primary", "fingerprint": "140e151e8ffebe07", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b3904d41b98b8a1c", "level": "note", "message": {"text": "Legacy-named symbol `db_backup` in src/openbiliclaw/storage/maintenance.py:31"}, "properties": {"repobilityId": "ece382e8238b4ba2", "scanner": "scanner-primary", "fingerprint": "b3904d41b98b8a1c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-21d38e0191117e5d", "level": "note", "message": {"text": "Legacy-named symbol `get_pool_candidates_needing_copy` in src/openbiliclaw/storage/database.py:3187"}, "properties": {"repobilityId": "faecee79830b0345", "scanner": "scanner-primary", "fingerprint": "21d38e0191117e5d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-2d4ca83844e9fecb", "level": "none", "message": {"text": "Commented-code block (12 lines) in src/openbiliclaw/storage/database.py:24"}, "properties": {"repobilityId": "48c6fa715c947896", "scanner": "scanner-primary", "fingerprint": "2d4ca83844e9fecb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f043a649b5f65974", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/openbiliclaw/llm/prompts.py:979"}, "properties": {"repobilityId": "d80dc83e6168875b", "scanner": "scanner-primary", "fingerprint": "f043a649b5f65974", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-899ca913973a0cfb", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/openbiliclaw/llm/registry.py:97"}, "properties": {"repobilityId": "6d3a0ae5dc8bfdc6", "scanner": "scanner-primary", "fingerprint": "899ca913973a0cfb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3ace267820f9fde3", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/openbiliclaw/llm/usage_recorder.py:36"}, "properties": {"repobilityId": "452cf1ad4e0d5472", "scanner": "scanner-primary", "fingerprint": "3ace267820f9fde3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6a5982d991e2fe04", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/openbiliclaw/llm/ollama_provider.py:27"}, "properties": {"repobilityId": "2f6104e0aa02a67e", "scanner": "scanner-primary", "fingerprint": "6a5982d991e2fe04", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-727dbfaadab0764e", "level": "note", "message": {"text": "Legacy-named symbol `embedding_cache_legacy` in src/openbiliclaw/llm/embedding.py:101"}, "properties": {"repobilityId": "60b6f1515544714c", "scanner": "scanner-primary", "fingerprint": "727dbfaadab0764e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-b16a864b6cd3051f", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/openbiliclaw/llm/embedding.py:196"}, "properties": {"repobilityId": "e036663f7e7d71a7", "scanner": "scanner-primary", "fingerprint": "b16a864b6cd3051f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8b1f8aa5d5760c0a", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/openbiliclaw/llm/openai_provider.py:164"}, "properties": {"repobilityId": "ec6780fb0efa4fec", "scanner": "scanner-primary", "fingerprint": "8b1f8aa5d5760c0a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-70d4ce8a67f726b6", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/openbiliclaw/llm/base.py:66"}, "properties": {"repobilityId": "910ed412b06a5704", "scanner": "scanner-primary", "fingerprint": "70d4ce8a67f726b6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-aa7b911e14b89115", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/openbiliclaw/llm/openrouter_provider.py:11"}, "properties": {"repobilityId": "3456e7c673e70702", "scanner": "scanner-primary", "fingerprint": "aa7b911e14b89115", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-679612ad0db0e226", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 src/openbiliclaw/llm/codex_auth.py:205"}, "properties": {"repobilityId": "a3b3dce435521b79", "scanner": "scanner-primary", "fingerprint": "679612ad0db0e226", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-98f96ee05abc60bc", "level": "none", "message": {"text": "Commented-code block (11 lines) in src/openbiliclaw/llm/claude_provider.py:65"}, "properties": {"repobilityId": "a04da8bbeb19e681", "scanner": "scanner-primary", "fingerprint": "98f96ee05abc60bc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1673bc698a1fb9e8", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/openbiliclaw/llm/service.py:222"}, "properties": {"repobilityId": "ba9a97c84c66e77d", "scanner": "scanner-primary", "fingerprint": "1673bc698a1fb9e8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "b120e82d6dd40c8d", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "0fe8d6ac6c59704e", "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": "037a5750446d3392", "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": "f24b969ba57ebbcf", "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": "5e3ec613137155f3", "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": "6bae52ae3535f402", "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": "688d95c9775ded3e", "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": "328312190269b3c4", "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": "e1ebfe072f5b8166", "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": "a9e1be880beddb31", "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": "d3827a32eeedfc7a", "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": "7f84da4963c890fb", "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": "5456480d3f3ad8f1", "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": "d23bba605d23e952", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-6297377883dd7783", "level": "note", "message": {"text": "Near-duplicate function bodies in 13 places"}, "properties": {"repobilityId": "4e87d4c21244070d", "scanner": "scanner-primary", "fingerprint": "6297377883dd7783", "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": "877c7583b84f9c5a", "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": "5332903b40a6776e", "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": "936cd9f7c3b5cc9e", "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": "39084126fb915213", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-02525d39071dd2c7", "level": "note", "message": {"text": "Near-duplicate function bodies in 5 places"}, "properties": {"repobilityId": "f6ded31b5f6cd66f", "scanner": "scanner-primary", "fingerprint": "02525d39071dd2c7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-55ace8a4c62b315c", "level": "error", "message": {"text": "FastAPI POST `auth_login` without auth dependency \u2014 src/openbiliclaw/api/auth.py:423"}, "properties": {"repobilityId": "b157f3ee0d90853a", "scanner": "scanner-primary", "fingerprint": "55ace8a4c62b315c", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/openbiliclaw/api/auth.py"}, "region": {"startLine": 423}}}]}, {"ruleId": "scanner-98628ec4d91de73b", "level": "error", "message": {"text": "FastAPI POST `auth_logout` without auth dependency \u2014 src/openbiliclaw/api/auth.py:469"}, "properties": {"repobilityId": "1566dfb9b9b10700", "scanner": "scanner-primary", "fingerprint": "98628ec4d91de73b", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/openbiliclaw/api/auth.py"}, "region": {"startLine": 469}}}]}, {"ruleId": "scanner-691783bce40b9cdc", "level": "error", "message": {"text": "Dangling fetch: GET https://api.github.com/repos/${STAR_REPO_SLUG} (extension/popup/popup.js:2052)"}, "properties": {"repobilityId": "9e3bdc720c9e748e", "scanner": "scanner-primary", "fingerprint": "691783bce40b9cdc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-636f403f4837737d", "level": "error", "message": {"text": "Dangling fetch: GET https://api.github.com/repos/${STAR_REPO_SLUG} (src/openbiliclaw/web/desktop/assets/js/app.js:297)"}, "properties": {"repobilityId": "3d06e27f20942cbd", "scanner": "scanner-primary", "fingerprint": "636f403f4837737d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4033f1f6b79f3ca3", "level": "error", "message": {"text": "Dangling fetch: GET https://www.douyin.com/aweme/v2/web/module/feed/ (extension/tests/dy-fetch-tap.test.ts:325)"}, "properties": {"repobilityId": "eaa89fdf2d339ecb", "scanner": "scanner-primary", "fingerprint": "4033f1f6b79f3ca3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f4d72b120b8fea64", "level": "error", "message": {"text": "Dangling fetch: GET https://www.douyin.com/aweme/v1/web/hot/search/list/ (extension/tests/dy-fetch-tap.test.ts:326)"}, "properties": {"repobilityId": "83cb5e4c0197a912", "scanner": "scanner-primary", "fingerprint": "f4d72b120b8fea64", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-562322a28c342d7f", "level": "note", "message": {"text": "Unused endpoint: GET /api/auth/status"}, "properties": {"repobilityId": "39b73f8b48ce4bd0", "scanner": "scanner-primary", "fingerprint": "562322a28c342d7f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fd55aa0818a7c897", "level": "note", "message": {"text": "Unused endpoint: POST /api/auth/login"}, "properties": {"repobilityId": "e1ede87e9af5636f", "scanner": "scanner-primary", "fingerprint": "fd55aa0818a7c897", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d5a39262ac205120", "level": "note", "message": {"text": "Unused endpoint: POST /api/auth/logout"}, "properties": {"repobilityId": "8a0f7132a9c26994", "scanner": "scanner-primary", "fingerprint": "d5a39262ac205120", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d192fec1d2796642", "level": "note", "message": {"text": "Unused endpoint: POST /api/auth/admin"}, "properties": {"repobilityId": "dad31e6f27708fc6", "scanner": "scanner-primary", "fingerprint": "d192fec1d2796642", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3c93b82c283e36ca", "level": "note", "message": {"text": "Unused endpoint: GET /api/ping"}, "properties": {"repobilityId": "f20a849e5c1e0aee", "scanner": "scanner-primary", "fingerprint": "3c93b82c283e36ca", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4756b4c4da7d2088", "level": "note", "message": {"text": "Unused endpoint: GET /api/health"}, "properties": {"repobilityId": "7a59d3c52c8f22e2", "scanner": "scanner-primary", "fingerprint": "4756b4c4da7d2088", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0f2574792ebc37cf", "level": "note", "message": {"text": "Unused endpoint: GET /api/init-status"}, "properties": {"repobilityId": "3d00520edc914088", "scanner": "scanner-primary", "fingerprint": "0f2574792ebc37cf", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ef060c5aa8efa5ac", "level": "note", "message": {"text": "Unused endpoint: POST /api/init"}, "properties": {"repobilityId": "b219b29b44197e5b", "scanner": "scanner-primary", "fingerprint": "ef060c5aa8efa5ac", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-83e37414c93d9313", "level": "note", "message": {"text": "Unused endpoint: POST /api/init/cancel"}, "properties": {"repobilityId": "8d9c89f23d25c367", "scanner": "scanner-primary", "fingerprint": "83e37414c93d9313", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7f16ff40bbd2f2f4", "level": "note", "message": {"text": "Unused endpoint: GET /api/image-proxy"}, "properties": {"repobilityId": "61dd23988550f71a", "scanner": "scanner-primary", "fingerprint": "7f16ff40bbd2f2f4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ee97cc15fd3a0ff1", "level": "note", "message": {"text": "Unused endpoint: POST /api/bilibili/cookie"}, "properties": {"repobilityId": "15aa75af08d644e4", "scanner": "scanner-primary", "fingerprint": "ee97cc15fd3a0ff1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e314a6467a65f2c5", "level": "note", "message": {"text": "Unused endpoint: POST /api/sources/dy/cookie"}, "properties": {"repobilityId": "3969edadf86b55cd", "scanner": "scanner-primary", "fingerprint": "e314a6467a65f2c5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4641f8f45d922e48", "level": "note", "message": {"text": "Unused endpoint: POST /api/sources/x/cookie"}, "properties": {"repobilityId": "c37dbe36fda77efa", "scanner": "scanner-primary", "fingerprint": "4641f8f45d922e48", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-12cac75940bf5873", "level": "note", "message": {"text": "Unused endpoint: POST /api/init-completed"}, "properties": {"repobilityId": "7a38b402e85bf4e7", "scanner": "scanner-primary", "fingerprint": "12cac75940bf5873", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fb326fe65616b88e", "level": "note", "message": {"text": "Unused endpoint: GET /api/profile-summary"}, "properties": {"repobilityId": "dde5ea32845c42e4", "scanner": "scanner-primary", "fingerprint": "fb326fe65616b88e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6fa1d95cfae44fc5", "level": "note", "message": {"text": "Unused endpoint: GET /api/profile/edit-state"}, "properties": {"repobilityId": "5e39f55efdaefd0a", "scanner": "scanner-primary", "fingerprint": "6fa1d95cfae44fc5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-640cfd8b550d7749", "level": "note", "message": {"text": "Unused endpoint: POST /api/profile/edit"}, "properties": {"repobilityId": "1b47e225db23d3ed", "scanner": "scanner-primary", "fingerprint": "640cfd8b550d7749", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-beaed16e6be24185", "level": "note", "message": {"text": "Unused endpoint: POST /api/events"}, "properties": {"repobilityId": "9631cc3e39b09583", "scanner": "scanner-primary", "fingerprint": "beaed16e6be24185", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4c214cd557df70e8", "level": "note", "message": {"text": "Unused endpoint: GET /api/recommendations"}, "properties": {"repobilityId": "633e6ee26c0d8973", "scanner": "scanner-primary", "fingerprint": "4c214cd557df70e8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9b29abd0901aa185", "level": "note", "message": {"text": "Unused endpoint: POST /api/watch-later"}, "properties": {"repobilityId": "2b214a57e3a40875", "scanner": "scanner-primary", "fingerprint": "9b29abd0901aa185", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0c51999709c52180", "level": "note", "message": {"text": "Unused endpoint: DELETE /api/watch-later/{bvid}"}, "properties": {"repobilityId": "7e966eeeabee37be", "scanner": "scanner-primary", "fingerprint": "0c51999709c52180", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7f1cd2d2299f03f0", "level": "note", "message": {"text": "Unused endpoint: GET /api/watch-later/{bvid}"}, "properties": {"repobilityId": "4aa8c3b59bd0abf1", "scanner": "scanner-primary", "fingerprint": "7f1cd2d2299f03f0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-03d746d6e164a69f", "level": "note", "message": {"text": "Unused endpoint: GET /api/watch-later"}, "properties": {"repobilityId": "06d7ddb479ee1c8f", "scanner": "scanner-primary", "fingerprint": "03d746d6e164a69f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a4a7bb77498ade94", "level": "note", "message": {"text": "Unused endpoint: POST /api/favorites"}, "properties": {"repobilityId": "6a783f16ee36598a", "scanner": "scanner-primary", "fingerprint": "a4a7bb77498ade94", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d39662842e794999", "level": "note", "message": {"text": "Unused endpoint: DELETE /api/favorites/{bvid}"}, "properties": {"repobilityId": "21cb2904c03a3348", "scanner": "scanner-primary", "fingerprint": "d39662842e794999", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-444014115c680899", "level": "note", "message": {"text": "Unused endpoint: GET /api/favorites/{bvid}"}, "properties": {"repobilityId": "9720222752f6b195", "scanner": "scanner-primary", "fingerprint": "444014115c680899", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1587d758201bdc52", "level": "note", "message": {"text": "Unused endpoint: GET /api/favorites"}, "properties": {"repobilityId": "45c797aafcf7c612", "scanner": "scanner-primary", "fingerprint": "1587d758201bdc52", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f023148e065ac870", "level": "note", "message": {"text": "Unused endpoint: GET /api/activity-feed"}, "properties": {"repobilityId": "ad6f64010a1bf55f", "scanner": "scanner-primary", "fingerprint": "f023148e065ac870", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e51eb3cbec60367c", "level": "note", "message": {"text": "Unused endpoint: POST /api/recommendations/reshuffle"}, "properties": {"repobilityId": "7f51cf4284b73c4e", "scanner": "scanner-primary", "fingerprint": "e51eb3cbec60367c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e017d3f249c2a8c9", "level": "note", "message": {"text": "Unused endpoint: POST /api/recommendations/append"}, "properties": {"repobilityId": "c9c1c04a22a9d068", "scanner": "scanner-primary", "fingerprint": "e017d3f249c2a8c9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c4e35e1c1ed96f9e", "level": "note", "message": {"text": "Unused endpoint: POST /api/recommendations/refresh"}, "properties": {"repobilityId": "70002e6b833bb521", "scanner": "scanner-primary", "fingerprint": "c4e35e1c1ed96f9e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c1d7841f7e09c970", "level": "note", "message": {"text": "Unused endpoint: GET /api/runtime-status"}, "properties": {"repobilityId": "8a5c118585671a37", "scanner": "scanner-primary", "fingerprint": "c1d7841f7e09c970", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8315f1ad19bd9dab", "level": "note", "message": {"text": "Unused endpoint: GET /api/update-status"}, "properties": {"repobilityId": "f651447e41cbe70c", "scanner": "scanner-primary", "fingerprint": "8315f1ad19bd9dab", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8699ca43ff9b8e3b", "level": "note", "message": {"text": "Unused endpoint: POST /api/update/check"}, "properties": {"repobilityId": "642a08aa1a63092c", "scanner": "scanner-primary", "fingerprint": "8699ca43ff9b8e3b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7951ec91410b5deb", "level": "note", "message": {"text": "Unused endpoint: POST /api/update/apply"}, "properties": {"repobilityId": "7b1a9c33012ec0fe", "scanner": "scanner-primary", "fingerprint": "7951ec91410b5deb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-34a20a79838683cf", "level": "note", "message": {"text": "Unused endpoint: GET /api/notifications/pending"}, "properties": {"repobilityId": "11fe36acb2524da4", "scanner": "scanner-primary", "fingerprint": "34a20a79838683cf", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e8390056fef1d0ca", "level": "note", "message": {"text": "Unused endpoint: GET /api/cognition-updates/pending"}, "properties": {"repobilityId": "f73981ca83c24e00", "scanner": "scanner-primary", "fingerprint": "e8390056fef1d0ca", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2a228566b96003a6", "level": "note", "message": {"text": "Unused endpoint: POST /api/cognition-updates/seen"}, "properties": {"repobilityId": "7dd432a4a2037f05", "scanner": "scanner-primary", "fingerprint": "2a228566b96003a6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1ccb0ce9a9747829", "level": "note", "message": {"text": "Unused endpoint: POST /api/delight/trigger"}, "properties": {"repobilityId": "3e0eb8189010d617", "scanner": "scanner-primary", "fingerprint": "1ccb0ce9a9747829", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6488fa187c81c835", "level": "note", "message": {"text": "Unused endpoint: GET /api/delight/pending"}, "properties": {"repobilityId": "cc30ee320e542e01", "scanner": "scanner-primary", "fingerprint": "6488fa187c81c835", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-bd4659fdcf782d47", "level": "note", "message": {"text": "Unused endpoint: GET /api/delight/pending-batch"}, "properties": {"repobilityId": "a32d20e84c3a613a", "scanner": "scanner-primary", "fingerprint": "bd4659fdcf782d47", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0545d1962619ebc8", "level": "note", "message": {"text": "Unused endpoint: POST /api/delight/sent"}, "properties": {"repobilityId": "497f2c52a5aeb48d", "scanner": "scanner-primary", "fingerprint": "0545d1962619ebc8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5266c89ba6058f49", "level": "note", "message": {"text": "Unused endpoint: POST /api/delight/respond"}, "properties": {"repobilityId": "a88ae50ed023cb88", "scanner": "scanner-primary", "fingerprint": "5266c89ba6058f49", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ab1b17c834fdd3f2", "level": "note", "message": {"text": "Unused endpoint: POST /api/notifications/sent"}, "properties": {"repobilityId": "20cea6b7826b2eca", "scanner": "scanner-primary", "fingerprint": "ab1b17c834fdd3f2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9d2517f9eafc5297", "level": "note", "message": {"text": "Unused endpoint: POST /api/chat"}, "properties": {"repobilityId": "c02547ced3fca210", "scanner": "scanner-primary", "fingerprint": "9d2517f9eafc5297", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4059871d152f5d80", "level": "note", "message": {"text": "Unused endpoint: POST /api/chat/turns"}, "properties": {"repobilityId": "6822c61b52081842", "scanner": "scanner-primary", "fingerprint": "4059871d152f5d80", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a832758a82282716", "level": "note", "message": {"text": "Unused endpoint: GET /api/chat/turns"}, "properties": {"repobilityId": "dcf3b9dea7663a17", "scanner": "scanner-primary", "fingerprint": "a832758a82282716", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0899aa20262cf6fa", "level": "note", "message": {"text": "Unused endpoint: GET /api/chat/turns/{turn_id}"}, "properties": {"repobilityId": "c3af0c34c41defbf", "scanner": "scanner-primary", "fingerprint": "0899aa20262cf6fa", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d0b42802dddf37d1", "level": "note", "message": {"text": "Unused endpoint: POST /api/interest-probes/trigger"}, "properties": {"repobilityId": "c3c02d56b80b4363", "scanner": "scanner-primary", "fingerprint": "d0b42802dddf37d1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9d97525254c5a686", "level": "note", "message": {"text": "Unused endpoint: GET /api/interest-probes/pending"}, "properties": {"repobilityId": "2057126603f4e362", "scanner": "scanner-primary", "fingerprint": "9d97525254c5a686", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}