{"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-da26eed9a25359a8", "name": "Possibly dead Python function: truncate_text", "shortDescription": {"text": "Possibly dead Python function: truncate_text"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7b258920fb2b31ea", "name": "Possibly dead Python function: set_history_messages", "shortDescription": {"text": "Possibly dead Python function: set_history_messages"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d3263ab216d3f2e1", "name": "Possibly dead Python function: save_skill_source_info", "shortDescription": {"text": "Possibly dead Python function: save_skill_source_info"}, "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-7d2a9dad1a5dcd55", "name": "Possibly dead Python function: cmd_scan", "shortDescription": {"text": "Possibly dead Python function: cmd_scan"}, "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-78060b3863accb2d", "name": "Possibly dead Python function: cmd_infer", "shortDescription": {"text": "Possibly dead Python function: cmd_infer"}, "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-b87fc78b389af45a", "name": "Possibly dead Python function: cmd_report", "shortDescription": {"text": "Possibly dead Python function: cmd_report"}, "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-b5cfb66fa106b658", "name": "Possibly dead Python function: cmd_show", "shortDescription": {"text": "Possibly dead Python function: cmd_show"}, "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-ebd12db3de388c90", "name": "Possibly dead Python function: cmd_skills_search", "shortDescription": {"text": "Possibly dead Python function: cmd_skills_search"}, "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-20967b894131ecef", "name": "Possibly dead Python function: cmd_skills_install", "shortDescription": {"text": "Possibly dead Python function: cmd_skills_install"}, "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-f06897d74856bc6f", "name": "Possibly dead Python function: cmd_skills_list", "shortDescription": {"text": "Possibly dead Python function: cmd_skills_list"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2d6bdec2e7756e40", "name": "Possibly dead Python function: cmd_skills_update", "shortDescription": {"text": "Possibly dead Python function: cmd_skills_update"}, "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-5890e312ea81278b", "name": "Possibly dead Python function: cmd_skills_remove", "shortDescription": {"text": "Possibly dead Python function: cmd_skills_remove"}, "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-46f94e7807faa01e", "name": "Possibly dead Python function: cmd_skills_enable", "shortDescription": {"text": "Possibly dead Python function: cmd_skills_enable"}, "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-ef5fe740c666def1", "name": "Possibly dead Python function: cmd_skills_disable", "shortDescription": {"text": "Possibly dead Python function: cmd_skills_disable"}, "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-c889b97cd85e8346", "name": "Possibly dead Python function: cmd_skills_default", "shortDescription": {"text": "Possibly dead Python function: cmd_skills_default"}, "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-b41d1a25a09273f4", "name": "Possibly dead Python function: detect_local_proxy_url", "shortDescription": {"text": "Possibly dead Python function: detect_local_proxy_url"}, "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-eb4b4acd9defe640", "name": "Possibly dead Python function: cmd_service_install", "shortDescription": {"text": "Possibly dead Python function: cmd_service_install"}, "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-fdf76ef29a0f412d", "name": "Possibly dead Python function: cmd_service_uninstall", "shortDescription": {"text": "Possibly dead Python function: cmd_service_uninstall"}, "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-1a709d10285c3628", "name": "Possibly dead Python function: cmd_service_status", "shortDescription": {"text": "Possibly dead Python function: cmd_service_status"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-de87839b9d82ac12", "name": "Possibly dead Python function: cmd_list", "shortDescription": {"text": "Possibly dead Python function: cmd_list"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ce7b723dfd296f6a", "name": "Possibly dead Python function: cmd_config", "shortDescription": {"text": "Possibly dead Python function: cmd_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-b1c9a76e92106b7d", "name": "Possibly dead Python function: cmd_migrate_agent", "shortDescription": {"text": "Possibly dead Python function: cmd_migrate_agent"}, "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-a36ab9c9289b78d2", "name": "Possibly dead Python function: cmd_doctor", "shortDescription": {"text": "Possibly dead Python function: cmd_doctor"}, "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-4b07f37ff46fd9d4", "name": "Possibly dead Python function: cmd_cleanup_logs", "shortDescription": {"text": "Possibly dead Python function: cmd_cleanup_logs"}, "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-207ff7dde553e2bd", "name": "Possibly dead Python function: task_done_callback", "shortDescription": {"text": "Possibly dead Python function: task_done_callback"}, "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-f3eb4f3d667299ab", "name": "Possibly dead Python function: load_session_messages", "shortDescription": {"text": "Possibly dead Python function: load_session_messages"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-88f1877d208b45d1", "name": "Possibly dead Python function: emit_callback", "shortDescription": {"text": "Possibly dead Python function: emit_callback"}, "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-afd709c570553574", "name": "Possibly dead Python function: register_agent", "shortDescription": {"text": "Possibly dead Python function: register_agent"}, "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-a1b05487e4d1e8dd", "name": "Possibly dead Python function: unregister_agent", "shortDescription": {"text": "Possibly dead Python function: unregister_agent"}, "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-e73f2dc38832b512", "name": "Stray `console.log` in TS/JS \u2014 skills/web/scripts/start-server.ts:12", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 skills/web/scripts/start-server.ts:12"}, "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-64e42a536f096d06", "name": "Stray `console.log` in TS/JS \u2014 skills/web/src/index.ts:175", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 skills/web/src/index.ts:175"}, "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-575176cd0d5d8077", "name": "Stray `console.log` in TS/JS \u2014 src/everbot/web/static/js/app.js:259", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/everbot/web/static/js/app.js:259"}, "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-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-f1ae44e4ea4b34fd", "name": "Insecure pattern 'node_child_process' in skills/web/scripts/start-server.ts:2", "shortDescription": {"text": "Insecure pattern 'node_child_process' in skills/web/scripts/start-server.ts:2"}, "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-2a4d6618e893b4b9", "name": "Insecure pattern 'eval_used' in skills/web/src/client.ts:363", "shortDescription": {"text": "Insecure pattern 'eval_used' in skills/web/src/client.ts:363"}, "fullDescription": {"text": "Found a known-risky pattern (eval_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-495fdfd9aa2482d7", "name": "Insecure pattern 'eval_used' in skills/web/src/snapshot/__tests__/snapshot.test.ts:39", "shortDescription": {"text": "Insecure pattern 'eval_used' in skills/web/src/snapshot/__tests__/snapshot.test.ts:39"}, "fullDescription": {"text": "Found a known-risky pattern (eval_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-df8a70df75140de7", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/everbot/web/static/js/app.js:122", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/everbot/web/static/js/app.js:122"}, "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-6372cebde0220094", "name": "No auth library detected", "shortDescription": {"text": "No auth library detected"}, "fullDescription": {"text": "The scanner did not find any standard auth library (JWT, OAuth, NextAuth, Auth0, etc.). The repo has auth/admin/session surface indicators, so auth may live in custom code, in a separate service, or be missing."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7efbda965f283c17", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/setup-python@v5 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8033ed3a4d2317c2", "name": "Very large file: tests/unit/test_inspector.py (1658 lines)", "shortDescription": {"text": "Very large file: tests/unit/test_inspector.py (1658 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-a4391aaa244148bc", "name": "Very large file: tests/unit/test_telegram_channel.py (1931 lines)", "shortDescription": {"text": "Very large file: tests/unit/test_telegram_channel.py (1931 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-230c366b058f435d", "name": "Very large file: tests/unit/test_heartbeat_runner_core.py (1646 lines)", "shortDescription": {"text": "Very large file: tests/unit/test_heartbeat_runner_core.py (1646 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-a08d8f3de33e4e97", "name": "Very large file: tests/unit/test_session_manager_core.py (1608 lines)", "shortDescription": {"text": "Very large file: tests/unit/test_session_manager_core.py (1608 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-bfe3d95e67bdcc2b", "name": "Very large file: tests/unit/test_turn_orchestrator.py (2696 lines)", "shortDescription": {"text": "Very large file: tests/unit/test_turn_orchestrator.py (2696 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-e38e7b1f361b3444", "name": "Very large file: src/everbot/web/static/js/app.js (1513 lines)", "shortDescription": {"text": "Very large file: src/everbot/web/static/js/app.js (1513 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-e274b5e8e25607fc", "name": "Very large file: src/everbot/channels/telegram_channel.py (1330 lines)", "shortDescription": {"text": "Very large file: src/everbot/channels/telegram_channel.py (1330 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-0cb9ca07c085564e", "name": "Very large file: src/everbot/core/runtime/heartbeat.py (1777 lines)", "shortDescription": {"text": "Very large file: src/everbot/core/runtime/heartbeat.py (1777 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-14ca9faab3eabae5", "name": "Very large file: src/everbot/core/runtime/turn_orchestrator.py (1243 lines)", "shortDescription": {"text": "Very large file: src/everbot/core/runtime/turn_orchestrator.py (1243 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-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 528 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 25 placeholder/mock markers across 10 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-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "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-46fde0e5239709ee", "name": "Agent authority lacks a verifier contract: skills/ops/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: skills/ops/SKILL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-63e45fea060be385", "name": "Agent authority lacks a verifier contract: skills/twitter-watch/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: skills/twitter-watch/SKILL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e03e137cf413fbeb", "name": "Agent authority lacks a verifier contract: skills/daily-attractor/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: skills/daily-attractor/SKILL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-377c0bcefae290b2", "name": "Agent authority lacks a verifier contract: skills/web/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: skills/web/SKILL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c7a8785a8614d092", "name": "Agent authority lacks a verifier contract: skills/trajectory-reviewer/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: skills/trajectory-reviewer/SKILL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3c4b8a6a3169e8be", "name": "Agent authority lacks a verifier contract: skills/gray-rhino/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: skills/gray-rhino/SKILL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f71794822e54b544", "name": "Agent authority lacks a verifier contract: skills/invest/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: skills/invest/SKILL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3db78965e7466c30", "name": "Agent authority lacks a verifier contract: skills/paper-discovery/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: skills/paper-discovery/SKILL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-630661a7b3c0bf8d", "name": "Agent authority lacks a verifier contract: skills/trace-review/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: skills/trace-review/SKILL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-fe9e729cc7a7df33", "name": "Legacy-named symbol `llm_v1` in tests/integration/test_slm_lifecycle.py:157", "shortDescription": {"text": "Legacy-named symbol `llm_v1` in tests/integration/test_slm_lifecycle.py:157"}, "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-41300c835bdb4d20", "name": "Legacy-named symbol `report_v1` in tests/integration/test_slm_real_llm.py:212", "shortDescription": {"text": "Legacy-named symbol `report_v1` in tests/integration/test_slm_real_llm.py:212"}, "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-a74d1920d1d0b146", "name": "Commented-code block (5 lines) in tests/unit/test_session_context_trace.py:107", "shortDescription": {"text": "Commented-code block (5 lines) in tests/unit/test_session_context_trace.py:107"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f0a6267be3969499", "name": "Legacy-named symbol `test_fingerprint_changed_respawns_and_closes_old` in tests/unit/test_milkie_pool.py:180", "shortDescription": {"text": "Legacy-named symbol `test_fingerprint_changed_respawns_and_closes_old` in tests/unit/test_milkie_pool.py:180"}, "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-1d816b259f9175b0", "name": "Commented-code block (7 lines) in tests/unit/test_empty_output_guard.py:298", "shortDescription": {"text": "Commented-code block (7 lines) in tests/unit/test_empty_output_guard.py:298"}, "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-ef42f866a88a0afd", "name": "Legacy-named symbol `search_v2` in tests/unit/test_skill_log_recorder.py:313", "shortDescription": {"text": "Legacy-named symbol `search_v2` in tests/unit/test_skill_log_recorder.py:313"}, "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-b128a9b3d7b60a73", "name": "Legacy-named symbol `test_cleanup_redacts_historical_logs_and_creates_backup` in tests/unit/test_log_cleanup.py:12", "shortDescription": {"text": "Legacy-named symbol `test_cleanup_redacts_historical_logs_and_creates_backup` in tests/unit/test_log_cleanup.py:12"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-12b46c2343064cc7", "name": "Legacy-named symbol `evt_old` in tests/unit/test_session_mailbox.py:72", "shortDescription": {"text": "Legacy-named symbol `evt_old` in tests/unit/test_session_mailbox.py:72"}, "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-4148bb87b7f222a6", "name": "Legacy-named symbol `test_save_creates_backup` in tests/unit/test_profile_store.py:100", "shortDescription": {"text": "Legacy-named symbol `test_save_creates_backup` in tests/unit/test_profile_store.py:100"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e96fc4183042e15c", "name": "Commented-code block (5 lines) in tests/unit/test_mailbox_runtime.py:115", "shortDescription": {"text": "Commented-code block (5 lines) in tests/unit/test_mailbox_runtime.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-72c10867a32bd39b", "name": "Legacy-named symbol `test_placeholder_evicted_with_heartbeat_legacy` in tests/unit/test_history_policy.py:207", "shortDescription": {"text": "Legacy-named symbol `test_placeholder_evicted_with_heartbeat_legacy` in tests/unit/test_history_policy.py:207"}, "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-5c876f0937e2f504", "name": "Stub function `set_session_id` (body is just `pass`/`return`) \u2014 examples/everbot_demo.py:145", "shortDescription": {"text": "Stub function `set_session_id` (body is just `pass`/`return`) \u2014 examples/everbot_demo.py:145"}, "fullDescription": {"text": "Likely an AI scaffold that was never filled in. Remove or implement."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1b0c382ad3992771", "name": "Network/subprocess call without timeout or try/except \u2014 skills/codex-coding-tool/scripts/run_codex.py:21", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 skills/codex-coding-tool/scripts/run_codex.py:21"}, "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-363af49e1c20fcfd", "name": "Network/subprocess call without timeout or try/except \u2014 skills/twitter-watch/scripts/fetch_tweets.py:49", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 skills/twitter-watch/scripts/fetch_tweets.py:49"}, "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-936d846da71445f5", "name": "Network/subprocess call without timeout or try/except \u2014 skills/skill-installer/scripts/install.py:307", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 skills/skill-installer/scripts/install.py:307"}, "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-9e724d22bd4850c0", "name": "Network/subprocess call without timeout or try/except \u2014 skills/daily-attractor/scripts/scheduler.py:31", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 skills/daily-attractor/scripts/scheduler.py:31"}, "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-6c16804efa0baa40", "name": "Network/subprocess call without timeout or try/except \u2014 skills/daily-attractor/scripts/push_telegram.py:21", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 skills/daily-attractor/scripts/push_telegram.py:21"}, "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-f3ac31ca14bd0dd6", "name": "Legacy-named symbol `dimension_old` in skills/daily-attractor/scripts/main.py:53", "shortDescription": {"text": "Legacy-named symbol `dimension_old` in skills/daily-attractor/scripts/main.py:53"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8c0b87d04b820c1d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 skills/web/src/client.ts:299", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 skills/web/src/client.ts:299"}, "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-73a0fca1fa4fa901", "name": "Legacy-named symbol `days_old` in skills/paper-discovery/scripts/fetch_papers.py:335", "shortDescription": {"text": "Legacy-named symbol `days_old` in skills/paper-discovery/scripts/fetch_papers.py:335"}, "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-56ca7a8274239d11", "name": "Legacy-named symbol `r_old` in skills/trace-review/tests/test_review_run.py:442", "shortDescription": {"text": "Legacy-named symbol `r_old` in skills/trace-review/tests/test_review_run.py:442"}, "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-716121408e91f54a", "name": "Network/subprocess call without timeout or try/except \u2014 src/everbot/cli/skills_cli.py:36", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 src/everbot/cli/skills_cli.py:36"}, "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-fbc3a0435d304595", "name": "Network/subprocess call without timeout or try/except \u2014 src/everbot/cli/launch_agent.py:121", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 src/everbot/cli/launch_agent.py:121"}, "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-c79a307af276aa8e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/everbot/web/static/js/app.js:31", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/everbot/web/static/js/app.js:31"}, "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-eae10956bfa0848b", "name": "Commented-code block (5 lines) in src/everbot/core/agent/provider/milkie/provider.py:115", "shortDescription": {"text": "Commented-code block (5 lines) in src/everbot/core/agent/provider/milkie/provider.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-7f2876242d04eeb6", "name": "Commented-code block (5 lines) in src/everbot/core/slm/version_manager.py:264", "shortDescription": {"text": "Commented-code block (5 lines) in src/everbot/core/slm/version_manager.py:264"}, "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-25a4f13415f0f9c8", "name": "Commented-code block (6 lines) in src/everbot/core/runtime/heartbeat.py:240", "shortDescription": {"text": "Commented-code block (6 lines) in src/everbot/core/runtime/heartbeat.py:240"}, "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-6ae9984bcf26e04d", "name": "Commented-code block (6 lines) in src/everbot/core/runtime/turn_orchestrator.py:182", "shortDescription": {"text": "Commented-code block (6 lines) in src/everbot/core/runtime/turn_orchestrator.py:182"}, "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-0f205dcceaec613f", "name": "Commented-code block (5 lines) in src/everbot/core/session/persistence.py:619", "shortDescription": {"text": "Commented-code block (5 lines) in src/everbot/core/session/persistence.py:619"}, "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-8dbd8525721f2577", "name": "Legacy-named symbol `migrated_backup` in src/everbot/core/session/session.py:716", "shortDescription": {"text": "Legacy-named symbol `migrated_backup` in src/everbot/core/session/session.py:716"}, "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-8c290d63fa15e75b", "name": "Commented-code block (6 lines) in src/everbot/core/channel/core_service.py:487", "shortDescription": {"text": "Commented-code block (6 lines) in src/everbot/core/channel/core_service.py:487"}, "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-65df07ab4020db79", "name": "18 env vars used in code but missing from .env.example", "shortDescription": {"text": "18 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `ALFRED_DEBUG_HTTP`, `ALFRED_HOME`, `ALFRED_PROJECT_ROOT`, `ALFRED_REPO_ROOT`, `ALFRED_SKILL_MODEL`, `ALFRED_SKILL_REGISTRY`, `ALIYUN_API_KEY`, `DAILY_ATTRACTOR_TIME` + 10 more. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-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:\nskills/skill-installer/scripts/remove.py:find_skills_directories, skills/skill-installer/scripts/list.py:find_skills_directories, skills/skill-installer/scripts/update.py:find_skills_directories\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:\nskills/skill-installer/scripts/remove.py:find_installed_skill, skills/skill-installer/scripts/update.py:find_installed_skill\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/everbot/core/slm/models.py:to_dict, src/everbot/core/slm/models.py:to_dict, src/everbot/core/slm/models.py:to_dict, src/everbot/core/slm/models.py:to_dict\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/everbot/core/slm/models.py:to_json, src/everbot/core/slm/models.py:to_json, src/everbot/core/slm/models.py:to_json, src/everbot/core/slm/models.py:to_json\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-e8de425b61331212", "name": "Dangling fetch: GET http://localhost:9222 (skills/web/scripts/start-server.ts:78)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:9222 (skills/web/scripts/start-server.ts:78)"}, "fullDescription": {"text": "`skills/web/scripts/start-server.ts:78` calls `GET http://localhost:9222` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:9222`\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-5baa8971ebe192a1", "name": "Unused endpoint: GET /", "shortDescription": {"text": "Unused endpoint: GET /"}, "fullDescription": {"text": "`src/everbot/web/app.py` declares `GET /` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c4b0361ac0f5eeb9", "name": "Unused endpoint: GET /api/agents", "shortDescription": {"text": "Unused endpoint: GET /api/agents"}, "fullDescription": {"text": "`src/everbot/web/app.py` declares `GET /api/agents` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-963710f42a2c8219", "name": "Unused endpoint: GET /api/status", "shortDescription": {"text": "Unused endpoint: GET /api/status"}, "fullDescription": {"text": "`src/everbot/web/app.py` declares `GET /api/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-1b5effcdf5d38729", "name": "Unused endpoint: POST /api/agents/{agent_name}/heartbeat", "shortDescription": {"text": "Unused endpoint: POST /api/agents/{agent_name}/heartbeat"}, "fullDescription": {"text": "`src/everbot/web/app.py` declares `POST /api/agents/{agent_name}/heartbeat` 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-3645778125bc4658", "name": "Unused endpoint: POST /api/agents/{agent_name}/sessions/reset", "shortDescription": {"text": "Unused endpoint: POST /api/agents/{agent_name}/sessions/reset"}, "fullDescription": {"text": "`src/everbot/web/app.py` declares `POST /api/agents/{agent_name}/sessions/reset` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-476815212f73853b", "name": "Unused endpoint: POST /api/agents/{agent_name}/sessions/{session_id}/clear-history", "shortDescription": {"text": "Unused endpoint: POST /api/agents/{agent_name}/sessions/{session_id}/clear-history"}, "fullDescription": {"text": "`src/everbot/web/app.py` declares `POST /api/agents/{agent_name}/sessions/{session_id}/clear-history` 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-8e655cca33f72d8e", "name": "Unused endpoint: GET /api/agents/{agent_name}/sessions", "shortDescription": {"text": "Unused endpoint: GET /api/agents/{agent_name}/sessions"}, "fullDescription": {"text": "`src/everbot/web/app.py` declares `GET /api/agents/{agent_name}/sessions` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ceacd210f89934f", "name": "Unused endpoint: POST /api/agents/{agent_name}/sessions", "shortDescription": {"text": "Unused endpoint: POST /api/agents/{agent_name}/sessions"}, "fullDescription": {"text": "`src/everbot/web/app.py` declares `POST /api/agents/{agent_name}/sessions` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a8de7e0086f79346", "name": "Unused endpoint: GET /api/agents/{agent_name}/session/trace", "shortDescription": {"text": "Unused endpoint: GET /api/agents/{agent_name}/session/trace"}, "fullDescription": {"text": "`src/everbot/web/app.py` declares `GET /api/agents/{agent_name}/session/trace` 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-a5472c3e7c62dec3", "name": "Unused endpoint: GET /api/settings/telegram", "shortDescription": {"text": "Unused endpoint: GET /api/settings/telegram"}, "fullDescription": {"text": "`src/everbot/web/app.py` declares `GET /api/settings/telegram` 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-70d83bba25b3d96f", "name": "Unused endpoint: POST /api/settings/telegram", "shortDescription": {"text": "Unused endpoint: POST /api/settings/telegram"}, "fullDescription": {"text": "`src/everbot/web/app.py` declares `POST /api/settings/telegram` 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-949799427bfba919", "name": "Unused endpoint: GET /api/settings/skills", "shortDescription": {"text": "Unused endpoint: GET /api/settings/skills"}, "fullDescription": {"text": "`src/everbot/web/app.py` declares `GET /api/settings/skills` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-73f24d77afb326b0", "name": "Unused endpoint: POST /api/settings/skills/{skill_name}/toggle", "shortDescription": {"text": "Unused endpoint: POST /api/settings/skills/{skill_name}/toggle"}, "fullDescription": {"text": "`src/everbot/web/app.py` declares `POST /api/settings/skills/{skill_name}/toggle` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a7738c9a048ec214", "name": "Unused endpoint: GET /api/logs/heartbeat/stream", "shortDescription": {"text": "Unused endpoint: GET /api/logs/heartbeat/stream"}, "fullDescription": {"text": "`src/everbot/web/app.py` declares `GET /api/logs/heartbeat/stream` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7110b11c11759049", "name": "Unused endpoint: GET /api/logs/heartbeat/events/stream", "shortDescription": {"text": "Unused endpoint: GET /api/logs/heartbeat/events/stream"}, "fullDescription": {"text": "`src/everbot/web/app.py` declares `GET /api/logs/heartbeat/events/stream` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d7f2396f72e9300e", "name": "Unused endpoint: POST /pages", "shortDescription": {"text": "Unused endpoint: POST /pages"}, "fullDescription": {"text": "`skills/web/src/index.ts` declares `POST /pages` 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-abdfb7ca067f44c1", "name": "Unused endpoint: GET /pages", "shortDescription": {"text": "Unused endpoint: GET /pages"}, "fullDescription": {"text": "`skills/web/src/index.ts` declares `GET /pages` 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-540bcf54618d399e", "name": "Unused endpoint: DELETE /pages/:id", "shortDescription": {"text": "Unused endpoint: DELETE /pages/:id"}, "fullDescription": {"text": "`skills/web/src/index.ts` declares `DELETE /pages/: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-a26f7e511b2cb254", "name": "Unused endpoint: DELETE /pages/:name", "shortDescription": {"text": "Unused endpoint: DELETE /pages/:name"}, "fullDescription": {"text": "`skills/web/src/index.ts` declares `DELETE /pages/:name` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/22983"}, "properties": {"repository": "xforce-io/alfred", "repoUrl": "https://github.com/xforce-io/alfred", "branch": "main"}, "results": [{"ruleId": "scanner-da26eed9a25359a8", "level": "note", "message": {"text": "Possibly dead Python function: truncate_text"}, "properties": {"repobilityId": "b63a6a3df6e79254", "scanner": "scanner-primary", "fingerprint": "da26eed9a25359a8", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/view_trajectory.py:208"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7b258920fb2b31ea", "level": "note", "message": {"text": "Possibly dead Python function: set_history_messages"}, "properties": {"repobilityId": "cc9370275ec82708", "scanner": "scanner-primary", "fingerprint": "7b258920fb2b31ea", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "examples/everbot_demo.py:142"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d3263ab216d3f2e1", "level": "note", "message": {"text": "Possibly dead Python function: save_skill_source_info"}, "properties": {"repobilityId": "cb69ff16c18d86b1", "scanner": "scanner-primary", "fingerprint": "d3263ab216d3f2e1", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "skills/skill-installer/scripts/update.py:114"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7d2a9dad1a5dcd55", "level": "note", "message": {"text": "Possibly dead Python function: cmd_scan"}, "properties": {"repobilityId": "45239483b43d0dd2", "scanner": "scanner-primary", "fingerprint": "7d2a9dad1a5dcd55", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "skills/invest/scripts/tools.py:530"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-78060b3863accb2d", "level": "note", "message": {"text": "Possibly dead Python function: cmd_infer"}, "properties": {"repobilityId": "1834681185ef6511", "scanner": "scanner-primary", "fingerprint": "78060b3863accb2d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "skills/invest/scripts/tools.py:910"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b87fc78b389af45a", "level": "note", "message": {"text": "Possibly dead Python function: cmd_report"}, "properties": {"repobilityId": "e07177dc4040e77f", "scanner": "scanner-primary", "fingerprint": "b87fc78b389af45a", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "skills/invest/scripts/tools.py:982"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b5cfb66fa106b658", "level": "note", "message": {"text": "Possibly dead Python function: cmd_show"}, "properties": {"repobilityId": "a65c825fe9b6238d", "scanner": "scanner-primary", "fingerprint": "b5cfb66fa106b658", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "skills/invest/scripts/tools.py:1042"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ebd12db3de388c90", "level": "note", "message": {"text": "Possibly dead Python function: cmd_skills_search"}, "properties": {"repobilityId": "daf59da7fa9e62f9", "scanner": "scanner-primary", "fingerprint": "ebd12db3de388c90", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/everbot/cli/skills_cli.py:40"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-20967b894131ecef", "level": "note", "message": {"text": "Possibly dead Python function: cmd_skills_install"}, "properties": {"repobilityId": "dc91fb71337b601f", "scanner": "scanner-primary", "fingerprint": "20967b894131ecef", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/everbot/cli/skills_cli.py:45"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f06897d74856bc6f", "level": "note", "message": {"text": "Possibly dead Python function: cmd_skills_list"}, "properties": {"repobilityId": "b51dd905fb967781", "scanner": "scanner-primary", "fingerprint": "f06897d74856bc6f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/everbot/cli/skills_cli.py:55"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-2d6bdec2e7756e40", "level": "note", "message": {"text": "Possibly dead Python function: cmd_skills_update"}, "properties": {"repobilityId": "c6ba7c11e376c6f5", "scanner": "scanner-primary", "fingerprint": "2d6bdec2e7756e40", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/everbot/cli/skills_cli.py:60"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5890e312ea81278b", "level": "note", "message": {"text": "Possibly dead Python function: cmd_skills_remove"}, "properties": {"repobilityId": "afa6adab7f0a0a5e", "scanner": "scanner-primary", "fingerprint": "5890e312ea81278b", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/everbot/cli/skills_cli.py:73"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-46f94e7807faa01e", "level": "note", "message": {"text": "Possibly dead Python function: cmd_skills_enable"}, "properties": {"repobilityId": "cf8a07e43866dfba", "scanner": "scanner-primary", "fingerprint": "46f94e7807faa01e", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/everbot/cli/skills_cli.py:94"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ef5fe740c666def1", "level": "note", "message": {"text": "Possibly dead Python function: cmd_skills_disable"}, "properties": {"repobilityId": "4e0c20ff39a88eab", "scanner": "scanner-primary", "fingerprint": "ef5fe740c666def1", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/everbot/cli/skills_cli.py:99"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c889b97cd85e8346", "level": "note", "message": {"text": "Possibly dead Python function: cmd_skills_default"}, "properties": {"repobilityId": "a3da8294f56b868d", "scanner": "scanner-primary", "fingerprint": "c889b97cd85e8346", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/everbot/cli/skills_cli.py:104"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b41d1a25a09273f4", "level": "note", "message": {"text": "Possibly dead Python function: detect_local_proxy_url"}, "properties": {"repobilityId": "566b34d14e122244", "scanner": "scanner-primary", "fingerprint": "b41d1a25a09273f4", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/everbot/cli/launch_agent.py:29"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-eb4b4acd9defe640", "level": "note", "message": {"text": "Possibly dead Python function: cmd_service_install"}, "properties": {"repobilityId": "d72578285cb6baf3", "scanner": "scanner-primary", "fingerprint": "eb4b4acd9defe640", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/everbot/cli/launch_agent.py:129"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-fdf76ef29a0f412d", "level": "note", "message": {"text": "Possibly dead Python function: cmd_service_uninstall"}, "properties": {"repobilityId": "adc098924d9f6d9e", "scanner": "scanner-primary", "fingerprint": "fdf76ef29a0f412d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/everbot/cli/launch_agent.py:145"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1a709d10285c3628", "level": "note", "message": {"text": "Possibly dead Python function: cmd_service_status"}, "properties": {"repobilityId": "6aca3cb5b6d53571", "scanner": "scanner-primary", "fingerprint": "1a709d10285c3628", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/everbot/cli/launch_agent.py:157"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-de87839b9d82ac12", "level": "note", "message": {"text": "Possibly dead Python function: cmd_list"}, "properties": {"repobilityId": "bd09044da90857da", "scanner": "scanner-primary", "fingerprint": "de87839b9d82ac12", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/everbot/cli/main.py:57"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ce7b723dfd296f6a", "level": "note", "message": {"text": "Possibly dead Python function: cmd_config"}, "properties": {"repobilityId": "713345609a6761b5", "scanner": "scanner-primary", "fingerprint": "ce7b723dfd296f6a", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/everbot/cli/main.py:113"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b1c9a76e92106b7d", "level": "note", "message": {"text": "Possibly dead Python function: cmd_migrate_agent"}, "properties": {"repobilityId": "e9405dbac33c5795", "scanner": "scanner-primary", "fingerprint": "b1c9a76e92106b7d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/everbot/cli/main.py:181"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a36ab9c9289b78d2", "level": "note", "message": {"text": "Possibly dead Python function: cmd_doctor"}, "properties": {"repobilityId": "9a95a890c390a044", "scanner": "scanner-primary", "fingerprint": "a36ab9c9289b78d2", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/everbot/cli/main.py:193"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4b07f37ff46fd9d4", "level": "note", "message": {"text": "Possibly dead Python function: cmd_cleanup_logs"}, "properties": {"repobilityId": "8a3a38d173035574", "scanner": "scanner-primary", "fingerprint": "4b07f37ff46fd9d4", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/everbot/cli/main.py:213"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-207ff7dde553e2bd", "level": "note", "message": {"text": "Possibly dead Python function: task_done_callback"}, "properties": {"repobilityId": "e4245e8aa091ef80", "scanner": "scanner-primary", "fingerprint": "207ff7dde553e2bd", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/everbot/web/services/chat_service.py:447"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f3eb4f3d667299ab", "level": "note", "message": {"text": "Possibly dead Python function: load_session_messages"}, "properties": {"repobilityId": "94d29fad42e7874a", "scanner": "scanner-primary", "fingerprint": "f3eb4f3d667299ab", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/everbot/core/scanners/session_scanner.py:205"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-88f1877d208b45d1", "level": "note", "message": {"text": "Possibly dead Python function: emit_callback"}, "properties": {"repobilityId": "13e9b97ce2b94921", "scanner": "scanner-primary", "fingerprint": "88f1877d208b45d1", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/everbot/core/runtime/cron_delivery.py:205"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-afd709c570553574", "level": "note", "message": {"text": "Possibly dead Python function: register_agent"}, "properties": {"repobilityId": "b7552b70fdc18a2e", "scanner": "scanner-primary", "fingerprint": "afd709c570553574", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/everbot/core/runtime/scheduler.py:187"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a1b05487e4d1e8dd", "level": "note", "message": {"text": "Possibly dead Python function: unregister_agent"}, "properties": {"repobilityId": "2a3604dab750ec82", "scanner": "scanner-primary", "fingerprint": "a1b05487e4d1e8dd", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/everbot/core/runtime/scheduler.py:191"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e73f2dc38832b512", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 skills/web/scripts/start-server.ts:12"}, "properties": {"repobilityId": "2c0a46d79af48245", "scanner": "scanner-primary", "fingerprint": "e73f2dc38832b512", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-64e42a536f096d06", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 skills/web/src/index.ts:175"}, "properties": {"repobilityId": "ac4734a19174042c", "scanner": "scanner-primary", "fingerprint": "64e42a536f096d06", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-575176cd0d5d8077", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/everbot/web/static/js/app.js:259"}, "properties": {"repobilityId": "a6c78bdc74a23ca2", "scanner": "scanner-primary", "fingerprint": "575176cd0d5d8077", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"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-f1ae44e4ea4b34fd", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in skills/web/scripts/start-server.ts:2"}, "properties": {"repobilityId": "632c6efae36bacac", "scanner": "scanner-primary", "fingerprint": "f1ae44e4ea4b34fd", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "skills/web/scripts/start-server.ts"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-2a4d6618e893b4b9", "level": "error", "message": {"text": "Insecure pattern 'eval_used' in skills/web/src/client.ts:363"}, "properties": {"repobilityId": "95e2d4940377462e", "scanner": "scanner-primary", "fingerprint": "2a4d6618e893b4b9", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "eval_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "skills/web/src/client.ts"}, "region": {"startLine": 363}}}]}, {"ruleId": "scanner-495fdfd9aa2482d7", "level": "error", "message": {"text": "Insecure pattern 'eval_used' in skills/web/src/snapshot/__tests__/snapshot.test.ts:39"}, "properties": {"repobilityId": "f522411937457365", "scanner": "scanner-primary", "fingerprint": "495fdfd9aa2482d7", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "eval_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "skills/web/src/snapshot/__tests__/snapshot.test.ts"}, "region": {"startLine": 39}}}]}, {"ruleId": "scanner-df8a70df75140de7", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/everbot/web/static/js/app.js:122"}, "properties": {"repobilityId": "e6836a3d4dfbfa96", "scanner": "scanner-primary", "fingerprint": "df8a70df75140de7", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/everbot/web/static/js/app.js"}, "region": {"startLine": 122}}}]}, {"ruleId": "scanner-6372cebde0220094", "level": "warning", "message": {"text": "No auth library detected"}, "properties": {"repobilityId": "a5b6035a5bbf8054", "scanner": "scanner-primary", "fingerprint": "6372cebde0220094", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["coverage", "auth"]}}, {"ruleId": "scanner-7efbda965f283c17", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "cd843b74d3963b06", "scanner": "scanner-primary", "fingerprint": "7efbda965f283c17", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/test.yml"}, "region": {"startLine": 20}}}]}, {"ruleId": "scanner-8033ed3a4d2317c2", "level": "note", "message": {"text": "Very large file: tests/unit/test_inspector.py (1658 lines)"}, "properties": {"repobilityId": "ba9a8785950e6d4b", "scanner": "scanner-primary", "fingerprint": "8033ed3a4d2317c2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a4391aaa244148bc", "level": "note", "message": {"text": "Very large file: tests/unit/test_telegram_channel.py (1931 lines)"}, "properties": {"repobilityId": "f9500e5494b13443", "scanner": "scanner-primary", "fingerprint": "a4391aaa244148bc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-230c366b058f435d", "level": "note", "message": {"text": "Very large file: tests/unit/test_heartbeat_runner_core.py (1646 lines)"}, "properties": {"repobilityId": "c4389d7bb446c372", "scanner": "scanner-primary", "fingerprint": "230c366b058f435d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a08d8f3de33e4e97", "level": "note", "message": {"text": "Very large file: tests/unit/test_session_manager_core.py (1608 lines)"}, "properties": {"repobilityId": "5d1d5e80b126a956", "scanner": "scanner-primary", "fingerprint": "a08d8f3de33e4e97", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-bfe3d95e67bdcc2b", "level": "note", "message": {"text": "Very large file: tests/unit/test_turn_orchestrator.py (2696 lines)"}, "properties": {"repobilityId": "033560b99a30bd39", "scanner": "scanner-primary", "fingerprint": "bfe3d95e67bdcc2b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e38e7b1f361b3444", "level": "note", "message": {"text": "Very large file: src/everbot/web/static/js/app.js (1513 lines)"}, "properties": {"repobilityId": "a86a003273062b4a", "scanner": "scanner-primary", "fingerprint": "e38e7b1f361b3444", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e274b5e8e25607fc", "level": "note", "message": {"text": "Very large file: src/everbot/channels/telegram_channel.py (1330 lines)"}, "properties": {"repobilityId": "d2d1d93c2869aeea", "scanner": "scanner-primary", "fingerprint": "e274b5e8e25607fc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-0cb9ca07c085564e", "level": "note", "message": {"text": "Very large file: src/everbot/core/runtime/heartbeat.py (1777 lines)"}, "properties": {"repobilityId": "3f4b965b15990a9e", "scanner": "scanner-primary", "fingerprint": "0cb9ca07c085564e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-14ca9faab3eabae5", "level": "note", "message": {"text": "Very large file: src/everbot/core/runtime/turn_orchestrator.py (1243 lines)"}, "properties": {"repobilityId": "5cec417eddc195e3", "scanner": "scanner-primary", "fingerprint": "14ca9faab3eabae5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "d438323ed9c8a771", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "22318ba39447b7c1", "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": "a78fdbd4cf42fee0", "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": "417c058254d132bb", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "4270e46a85fd9b8b", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "e3d8412ed5698a00", "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": "94ca03c14793d791", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-46fde0e5239709ee", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: skills/ops/SKILL.md"}, "properties": {"repobilityId": "3a40e03401eb0377", "scanner": "scanner-primary", "fingerprint": "46fde0e5239709ee", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "skill_file"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "skills/ops/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-63e45fea060be385", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: skills/twitter-watch/SKILL.md"}, "properties": {"repobilityId": "6f91632d2c698797", "scanner": "scanner-primary", "fingerprint": "63e45fea060be385", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "skill_file"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "skills/twitter-watch/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e03e137cf413fbeb", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: skills/daily-attractor/SKILL.md"}, "properties": {"repobilityId": "d7c8fa317cc167cf", "scanner": "scanner-primary", "fingerprint": "e03e137cf413fbeb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "skill_file"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "skills/daily-attractor/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-377c0bcefae290b2", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: skills/web/SKILL.md"}, "properties": {"repobilityId": "46bc6d2da955c96e", "scanner": "scanner-primary", "fingerprint": "377c0bcefae290b2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "skill_file"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "skills/web/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c7a8785a8614d092", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: skills/trajectory-reviewer/SKILL.md"}, "properties": {"repobilityId": "5b7b8cf38b0c2a6b", "scanner": "scanner-primary", "fingerprint": "c7a8785a8614d092", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "skill_file"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "skills/trajectory-reviewer/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3c4b8a6a3169e8be", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: skills/gray-rhino/SKILL.md"}, "properties": {"repobilityId": "b88652707ec37308", "scanner": "scanner-primary", "fingerprint": "3c4b8a6a3169e8be", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "skill_file"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "skills/gray-rhino/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f71794822e54b544", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: skills/invest/SKILL.md"}, "properties": {"repobilityId": "f14ef0b3e196f261", "scanner": "scanner-primary", "fingerprint": "f71794822e54b544", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "skill_file"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "skills/invest/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3db78965e7466c30", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: skills/paper-discovery/SKILL.md"}, "properties": {"repobilityId": "55f18212d5aaf52f", "scanner": "scanner-primary", "fingerprint": "3db78965e7466c30", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "skill_file"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "skills/paper-discovery/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-630661a7b3c0bf8d", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: skills/trace-review/SKILL.md"}, "properties": {"repobilityId": "b76303c2cc7cd473", "scanner": "scanner-primary", "fingerprint": "630661a7b3c0bf8d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "skill_file"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "skills/trace-review/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-fe9e729cc7a7df33", "level": "note", "message": {"text": "Legacy-named symbol `llm_v1` in tests/integration/test_slm_lifecycle.py:157"}, "properties": {"repobilityId": "a176044dd20fb9ae", "scanner": "scanner-primary", "fingerprint": "fe9e729cc7a7df33", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-41300c835bdb4d20", "level": "note", "message": {"text": "Legacy-named symbol `report_v1` in tests/integration/test_slm_real_llm.py:212"}, "properties": {"repobilityId": "3b3a9afddadb39f7", "scanner": "scanner-primary", "fingerprint": "41300c835bdb4d20", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-a74d1920d1d0b146", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/unit/test_session_context_trace.py:107"}, "properties": {"repobilityId": "bf0b6744edc84a28", "scanner": "scanner-primary", "fingerprint": "a74d1920d1d0b146", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f0a6267be3969499", "level": "note", "message": {"text": "Legacy-named symbol `test_fingerprint_changed_respawns_and_closes_old` in tests/unit/test_milkie_pool.py:180"}, "properties": {"repobilityId": "e5ee44765098d2e4", "scanner": "scanner-primary", "fingerprint": "f0a6267be3969499", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-1d816b259f9175b0", "level": "none", "message": {"text": "Commented-code block (7 lines) in tests/unit/test_empty_output_guard.py:298"}, "properties": {"repobilityId": "50183d666511a6b1", "scanner": "scanner-primary", "fingerprint": "1d816b259f9175b0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ef42f866a88a0afd", "level": "note", "message": {"text": "Legacy-named symbol `search_v2` in tests/unit/test_skill_log_recorder.py:313"}, "properties": {"repobilityId": "6e203b23d397cfca", "scanner": "scanner-primary", "fingerprint": "ef42f866a88a0afd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-b128a9b3d7b60a73", "level": "note", "message": {"text": "Legacy-named symbol `test_cleanup_redacts_historical_logs_and_creates_backup` in tests/unit/test_log_cleanup.py:12"}, "properties": {"repobilityId": "3108ba5c65783138", "scanner": "scanner-primary", "fingerprint": "b128a9b3d7b60a73", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-12b46c2343064cc7", "level": "note", "message": {"text": "Legacy-named symbol `evt_old` in tests/unit/test_session_mailbox.py:72"}, "properties": {"repobilityId": "22c6dd5a760fac6c", "scanner": "scanner-primary", "fingerprint": "12b46c2343064cc7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-4148bb87b7f222a6", "level": "note", "message": {"text": "Legacy-named symbol `test_save_creates_backup` in tests/unit/test_profile_store.py:100"}, "properties": {"repobilityId": "7d96eed966007c9c", "scanner": "scanner-primary", "fingerprint": "4148bb87b7f222a6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-e96fc4183042e15c", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/unit/test_mailbox_runtime.py:115"}, "properties": {"repobilityId": "1b16f422d9c0c872", "scanner": "scanner-primary", "fingerprint": "e96fc4183042e15c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-72c10867a32bd39b", "level": "note", "message": {"text": "Legacy-named symbol `test_placeholder_evicted_with_heartbeat_legacy` in tests/unit/test_history_policy.py:207"}, "properties": {"repobilityId": "a45eac9ddafd7cef", "scanner": "scanner-primary", "fingerprint": "72c10867a32bd39b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-5c876f0937e2f504", "level": "note", "message": {"text": "Stub function `set_session_id` (body is just `pass`/`return`) \u2014 examples/everbot_demo.py:145"}, "properties": {"repobilityId": "a2fff862c754d940", "scanner": "scanner-primary", "fingerprint": "5c876f0937e2f504", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "empty-handler", "dead-code"]}}, {"ruleId": "scanner-1b0c382ad3992771", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 skills/codex-coding-tool/scripts/run_codex.py:21"}, "properties": {"repobilityId": "6222c5bee0bc4165", "scanner": "scanner-primary", "fingerprint": "1b0c382ad3992771", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-363af49e1c20fcfd", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 skills/twitter-watch/scripts/fetch_tweets.py:49"}, "properties": {"repobilityId": "2a6c3bf00f41f08c", "scanner": "scanner-primary", "fingerprint": "363af49e1c20fcfd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-936d846da71445f5", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 skills/skill-installer/scripts/install.py:307"}, "properties": {"repobilityId": "0e61a5690364612f", "scanner": "scanner-primary", "fingerprint": "936d846da71445f5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9e724d22bd4850c0", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 skills/daily-attractor/scripts/scheduler.py:31"}, "properties": {"repobilityId": "90af6adc38d31f03", "scanner": "scanner-primary", "fingerprint": "9e724d22bd4850c0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6c16804efa0baa40", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 skills/daily-attractor/scripts/push_telegram.py:21"}, "properties": {"repobilityId": "ed050565cc53b1cf", "scanner": "scanner-primary", "fingerprint": "6c16804efa0baa40", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f3ac31ca14bd0dd6", "level": "note", "message": {"text": "Legacy-named symbol `dimension_old` in skills/daily-attractor/scripts/main.py:53"}, "properties": {"repobilityId": "af20c9e08bb24cab", "scanner": "scanner-primary", "fingerprint": "f3ac31ca14bd0dd6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-8c0b87d04b820c1d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 skills/web/src/client.ts:299"}, "properties": {"repobilityId": "64f435a36fb7a4fb", "scanner": "scanner-primary", "fingerprint": "8c0b87d04b820c1d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-73a0fca1fa4fa901", "level": "note", "message": {"text": "Legacy-named symbol `days_old` in skills/paper-discovery/scripts/fetch_papers.py:335"}, "properties": {"repobilityId": "405b8caef8fe04d7", "scanner": "scanner-primary", "fingerprint": "73a0fca1fa4fa901", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-56ca7a8274239d11", "level": "note", "message": {"text": "Legacy-named symbol `r_old` in skills/trace-review/tests/test_review_run.py:442"}, "properties": {"repobilityId": "5e80bd30b4b2fde9", "scanner": "scanner-primary", "fingerprint": "56ca7a8274239d11", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-716121408e91f54a", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 src/everbot/cli/skills_cli.py:36"}, "properties": {"repobilityId": "e7a95a757329f114", "scanner": "scanner-primary", "fingerprint": "716121408e91f54a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fbc3a0435d304595", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 src/everbot/cli/launch_agent.py:121"}, "properties": {"repobilityId": "69398299d1b6e0bf", "scanner": "scanner-primary", "fingerprint": "fbc3a0435d304595", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c79a307af276aa8e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/everbot/web/static/js/app.js:31"}, "properties": {"repobilityId": "53ce38c843522461", "scanner": "scanner-primary", "fingerprint": "c79a307af276aa8e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-eae10956bfa0848b", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/everbot/core/agent/provider/milkie/provider.py:115"}, "properties": {"repobilityId": "81535fcbd63d02de", "scanner": "scanner-primary", "fingerprint": "eae10956bfa0848b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7f2876242d04eeb6", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/everbot/core/slm/version_manager.py:264"}, "properties": {"repobilityId": "7daabe8154122f2b", "scanner": "scanner-primary", "fingerprint": "7f2876242d04eeb6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-25a4f13415f0f9c8", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/everbot/core/runtime/heartbeat.py:240"}, "properties": {"repobilityId": "ed3a1234fa4651c9", "scanner": "scanner-primary", "fingerprint": "25a4f13415f0f9c8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6ae9984bcf26e04d", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/everbot/core/runtime/turn_orchestrator.py:182"}, "properties": {"repobilityId": "a303162558ec2492", "scanner": "scanner-primary", "fingerprint": "6ae9984bcf26e04d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0f205dcceaec613f", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/everbot/core/session/persistence.py:619"}, "properties": {"repobilityId": "63c16d5e401c963a", "scanner": "scanner-primary", "fingerprint": "0f205dcceaec613f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8dbd8525721f2577", "level": "note", "message": {"text": "Legacy-named symbol `migrated_backup` in src/everbot/core/session/session.py:716"}, "properties": {"repobilityId": "422f215d2da52ddf", "scanner": "scanner-primary", "fingerprint": "8dbd8525721f2577", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-8c290d63fa15e75b", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/everbot/core/channel/core_service.py:487"}, "properties": {"repobilityId": "61edeb2dc605b73a", "scanner": "scanner-primary", "fingerprint": "8c290d63fa15e75b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-65df07ab4020db79", "level": "note", "message": {"text": "18 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "5e334d56f52c02e1", "scanner": "scanner-primary", "fingerprint": "65df07ab4020db79", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "8bec6d99a42ffa2e", "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": "c6f0ce2ff152cb7d", "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": "80a1b25916e05d6f", "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": "b5107d4cb6f96506", "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": "a495e9ebfc4e3f32", "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": "2f8d96ecc6d1fdfc", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "52ded6b44a1de916", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "e9789c9ab6192390", "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": "9756d77d3195b5f3", "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": "c3b173f51da6e629", "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": "d56dd199cd3d4255", "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": "0a173dd5e4698e23", "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": "7756896d7989e72a", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "0bf8753278aaa567", "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": "96d07267af125344", "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": "55a649ad94cfff0c", "scanner": "scanner-primary", "fingerprint": "02525d39071dd2c7", "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": "85aeb380132f7f31", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "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": "caa52134e9d76e70", "scanner": "scanner-primary", "fingerprint": "02525d39071dd2c7", "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": "f9741f800274c424", "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": "7f429fb10417a297", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-e8de425b61331212", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:9222 (skills/web/scripts/start-server.ts:78)"}, "properties": {"repobilityId": "d3ea12c6bc2b2f44", "scanner": "scanner-primary", "fingerprint": "e8de425b61331212", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5baa8971ebe192a1", "level": "note", "message": {"text": "Unused endpoint: GET /"}, "properties": {"repobilityId": "136f74f35f3692db", "scanner": "scanner-primary", "fingerprint": "5baa8971ebe192a1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c4b0361ac0f5eeb9", "level": "note", "message": {"text": "Unused endpoint: GET /api/agents"}, "properties": {"repobilityId": "546182a2087723ed", "scanner": "scanner-primary", "fingerprint": "c4b0361ac0f5eeb9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-963710f42a2c8219", "level": "note", "message": {"text": "Unused endpoint: GET /api/status"}, "properties": {"repobilityId": "8b644c4dafd0b230", "scanner": "scanner-primary", "fingerprint": "963710f42a2c8219", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1b5effcdf5d38729", "level": "note", "message": {"text": "Unused endpoint: POST /api/agents/{agent_name}/heartbeat"}, "properties": {"repobilityId": "c5819fc007b80525", "scanner": "scanner-primary", "fingerprint": "1b5effcdf5d38729", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3645778125bc4658", "level": "note", "message": {"text": "Unused endpoint: POST /api/agents/{agent_name}/sessions/reset"}, "properties": {"repobilityId": "c0615618d3c66425", "scanner": "scanner-primary", "fingerprint": "3645778125bc4658", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-476815212f73853b", "level": "note", "message": {"text": "Unused endpoint: POST /api/agents/{agent_name}/sessions/{session_id}/clear-history"}, "properties": {"repobilityId": "69ceaf179e5a80c7", "scanner": "scanner-primary", "fingerprint": "476815212f73853b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8e655cca33f72d8e", "level": "note", "message": {"text": "Unused endpoint: GET /api/agents/{agent_name}/sessions"}, "properties": {"repobilityId": "2566868ad42f3352", "scanner": "scanner-primary", "fingerprint": "8e655cca33f72d8e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3ceacd210f89934f", "level": "note", "message": {"text": "Unused endpoint: POST /api/agents/{agent_name}/sessions"}, "properties": {"repobilityId": "dbd90ac8dc7c61ff", "scanner": "scanner-primary", "fingerprint": "3ceacd210f89934f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a8de7e0086f79346", "level": "note", "message": {"text": "Unused endpoint: GET /api/agents/{agent_name}/session/trace"}, "properties": {"repobilityId": "7795d1191cffe7ba", "scanner": "scanner-primary", "fingerprint": "a8de7e0086f79346", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a5472c3e7c62dec3", "level": "note", "message": {"text": "Unused endpoint: GET /api/settings/telegram"}, "properties": {"repobilityId": "46d08e83de11f689", "scanner": "scanner-primary", "fingerprint": "a5472c3e7c62dec3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-70d83bba25b3d96f", "level": "note", "message": {"text": "Unused endpoint: POST /api/settings/telegram"}, "properties": {"repobilityId": "4516d9e8dbbf66f3", "scanner": "scanner-primary", "fingerprint": "70d83bba25b3d96f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-949799427bfba919", "level": "note", "message": {"text": "Unused endpoint: GET /api/settings/skills"}, "properties": {"repobilityId": "a65f629d9d6a610b", "scanner": "scanner-primary", "fingerprint": "949799427bfba919", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-73f24d77afb326b0", "level": "note", "message": {"text": "Unused endpoint: POST /api/settings/skills/{skill_name}/toggle"}, "properties": {"repobilityId": "d1cd4d2ed0df64af", "scanner": "scanner-primary", "fingerprint": "73f24d77afb326b0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a7738c9a048ec214", "level": "note", "message": {"text": "Unused endpoint: GET /api/logs/heartbeat/stream"}, "properties": {"repobilityId": "828191651a65b7f3", "scanner": "scanner-primary", "fingerprint": "a7738c9a048ec214", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7110b11c11759049", "level": "note", "message": {"text": "Unused endpoint: GET /api/logs/heartbeat/events/stream"}, "properties": {"repobilityId": "d6fcde7649d26e3c", "scanner": "scanner-primary", "fingerprint": "7110b11c11759049", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d7f2396f72e9300e", "level": "note", "message": {"text": "Unused endpoint: POST /pages"}, "properties": {"repobilityId": "ff9dfc4b29ba8ca7", "scanner": "scanner-primary", "fingerprint": "d7f2396f72e9300e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-abdfb7ca067f44c1", "level": "note", "message": {"text": "Unused endpoint: GET /pages"}, "properties": {"repobilityId": "cd63783a2d95eb2b", "scanner": "scanner-primary", "fingerprint": "abdfb7ca067f44c1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-540bcf54618d399e", "level": "note", "message": {"text": "Unused endpoint: DELETE /pages/:id"}, "properties": {"repobilityId": "49a264596757b6c0", "scanner": "scanner-primary", "fingerprint": "540bcf54618d399e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a26f7e511b2cb254", "level": "note", "message": {"text": "Unused endpoint: DELETE /pages/:name"}, "properties": {"repobilityId": "78bb226c50e0a761", "scanner": "scanner-primary", "fingerprint": "a26f7e511b2cb254", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}