{"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": "foundry_unresolved_feedback", "name": "Foundry mined unresolved feedback: vincenzo000915-cmd/ai-quant", "shortDescription": {"text": "Foundry mined unresolved feedback: vincenzo000915-cmd/ai-quant"}, "fullDescription": {"text": "Graph query export: Human feedback without linked fix evidence\nQuery id: unresolved_feedback\nQuery type: motif_query\nIntent: Negative/unresolved examples that should not be hallucinated into fixes.\nMotif: unlinked_feedback_needs_evidence\nTraining usage: negative_or_unresolved\nGraph gold label: needs_more_evidence\nRepo: vincenzo000915-cmd/ai-quant\nThread: vincenzo000915-cmd/ai-quant#1\nEvidence:\nGraph motif: Human feedback exists without a linked fix\nMotif id: unlinked_feedback_needs_evidence\nPolarity: bad\nTraining usage: negative_or_unresolved\nSeverity: medium\nRepo: vincenzo000915-cmd/ai-quant\nThread: vincenzo000915-cmd/ai-quant#1\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: vincenzo000915-cmd/ai-quant#1\nRepo: vincenzo000915-cmd/ai-quant\nIssue/PR number: 1\nGraph consistency label: needs_more_evidence\nNodes: 9\nEdges: 11\nNode types: {'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix"}, "properties": {"scanner": "foundry_dataset", "category": "practices", "severity": "medium", "confidence": 0.7, "cwe": "", "owasp": ""}}, {"id": "foundry_bad_chain", "name": "Foundry mined bad chains: vincenzo000915-cmd/ai-quant", "shortDescription": {"text": "Foundry mined bad chains: vincenzo000915-cmd/ai-quant"}, "fullDescription": {"text": "Comment chain pattern product: bad_chains\nRepo: vincenzo000915-cmd/ai-quant\nThread: vincenzo000915-cmd/ai-quant#1\nOutcome: not_resolved_or_not_observed\nThread label: thread_has_human_issue_without_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_unresolved, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: vincenzo000915-cmd/ai-quant#1\nRepo: vincenzo000915-cmd/ai-quant\nThread label: thread_has_human_issue_without_fix_context\nOutcome: not_resolved_or_not_observed\nComment count: 1\nLinked commit count: 0\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 0\nLabels: {'security_auth_secret': 1}\nPolarities: {'bad': 1}\nChanged file labels: {}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-01f8b0b3ff73fa14\",\n    \"kind\": \"issue_body\",\n    \"label\": \"security_auth_secret\",\n    \"polarity\": \"bad\",\n    \"url\": \"htt"}, "properties": {"scanner": "foundry_dataset", "category": "practices", "severity": "high", "confidence": 0.84, "cwe": "", "owasp": ""}}, {"id": "foundry_auth_guardrail_gap", "name": "Foundry mined security auth guardrail gaps: vincenzo000915-cmd/ai-quant", "shortDescription": {"text": "Foundry mined security auth guardrail gaps: vincenzo000915-cmd/ai-quant"}, "fullDescription": {"text": "Graph query export: Security/auth changes without enough guardrails\nQuery id: security_auth_guardrail_gaps\nQuery type: motif_query\nIntent: Assumption-check security/auth examples requiring stronger tests or CI.\nMotif: security_auth_without_guardrails\nTraining usage: assumption_check\nGraph gold label: needs_more_evidence\nRepo: vincenzo000915-cmd/ai-quant\nThread: vincenzo000915-cmd/ai-quant#1\nEvidence:\nGraph motif: Security/auth change without enough guardrails\nMotif id: security_auth_without_guardrails\nPolarity: bad\nTraining usage: assumption_check\nSeverity: critical\nRepo: vincenzo000915-cmd/ai-quant\nThread: vincenzo000915-cmd/ai-quant#1\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: vincenzo000915-cmd/ai-quant#1\nRepo: vincenzo000915-cmd/ai-quant\nIssue/PR number: 1\nGraph consistency label: needs_more_evidence\nNodes: 9\nEdges: 11\nNode types: {'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': "}, "properties": {"scanner": "foundry_dataset", "category": "auth", "severity": "critical", "confidence": 0.78, "cwe": "", "owasp": ""}}, {"id": "scanner-0e87e07c5b01f51f", "name": "Possibly dead Python function: check_docker_containers", "shortDescription": {"text": "Possibly dead Python function: check_docker_containers"}, "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-96d0a9e19e0240d2", "name": "Possibly dead Python function: check_postgres_health", "shortDescription": {"text": "Possibly dead Python function: check_postgres_health"}, "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-9c3b92b01995bac1", "name": "Possibly dead Python function: check_redis_health", "shortDescription": {"text": "Possibly dead Python function: check_redis_health"}, "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-523020b29fa878e1", "name": "Possibly dead Python function: check_web_local", "shortDescription": {"text": "Possibly dead Python function: check_web_local"}, "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-c6c30e7311862acf", "name": "Possibly dead Python function: check_web_prod", "shortDescription": {"text": "Possibly dead Python function: check_web_prod"}, "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-1b5851472be36713", "name": "Possibly dead Python function: check_ssl_cert", "shortDescription": {"text": "Possibly dead Python function: check_ssl_cert"}, "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-9b05b36dcea2ce07", "name": "Possibly dead Python function: check_disk_space", "shortDescription": {"text": "Possibly dead Python function: check_disk_space"}, "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-fcaab40822a9938e", "name": "Possibly dead Python function: check_ram_load", "shortDescription": {"text": "Possibly dead Python function: check_ram_load"}, "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-6767cf2e0999a3bd", "name": "Possibly dead Python function: check_celery_worker_ping", "shortDescription": {"text": "Possibly dead Python function: check_celery_worker_ping"}, "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-818bb406dd8f8c11", "name": "Possibly dead Python function: check_celery_beat_alive", "shortDescription": {"text": "Possibly dead Python function: check_celery_beat_alive"}, "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-84ed7489c8b3fc41", "name": "Possibly dead Python function: check_okx_connectivity", "shortDescription": {"text": "Possibly dead Python function: check_okx_connectivity"}, "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-b5d6104f56a26a66", "name": "Possibly dead Python function: check_telegram_bot", "shortDescription": {"text": "Possibly dead Python function: check_telegram_bot"}, "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-ad2b3c94699ef1a6", "name": "Possibly dead Python function: check_recent_critical_events", "shortDescription": {"text": "Possibly dead Python function: check_recent_critical_events"}, "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-527c9d9e061c5cc0", "name": "Possibly dead Python function: check_translate_cron", "shortDescription": {"text": "Possibly dead Python function: check_translate_cron"}, "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-709b1ecd53901cd5", "name": "Possibly dead Python function: f", "shortDescription": {"text": "Possibly dead Python function: f"}, "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-9fb298b941edefc6", "name": "Possibly dead Python function: check_celery_beat_heartbeat", "shortDescription": {"text": "Possibly dead Python function: check_celery_beat_heartbeat"}, "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-5e6ec4f699e98a3b", "name": "Possibly dead Python function: check_signal_cycle_15m", "shortDescription": {"text": "Possibly dead Python function: check_signal_cycle_15m"}, "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-7e80bdd2b15baf07", "name": "Possibly dead Python function: check_ai_improve_recent", "shortDescription": {"text": "Possibly dead Python function: check_ai_improve_recent"}, "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-0e581d18ee83830c", "name": "Possibly dead Python function: check_translate_pipeline", "shortDescription": {"text": "Possibly dead Python function: check_translate_pipeline"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fc3c3228dd83b580", "name": "Possibly dead Python function: check_llm_errors_recent", "shortDescription": {"text": "Possibly dead Python function: check_llm_errors_recent"}, "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-afe7b8766374fa2f", "name": "Possibly dead Python function: check_claude_cli_auth", "shortDescription": {"text": "Possibly dead Python function: check_claude_cli_auth"}, "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-f827535ecf67182c", "name": "Possibly dead Python function: check_pg_pool", "shortDescription": {"text": "Possibly dead Python function: check_pg_pool"}, "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-6eaa90217a3abc4c", "name": "Possibly dead Python function: check_exchange_connectivity", "shortDescription": {"text": "Possibly dead Python function: check_exchange_connectivity"}, "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-9df6d53a300ad489", "name": "Possibly dead Python function: check_reconcile_recent", "shortDescription": {"text": "Possibly dead Python function: check_reconcile_recent"}, "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-1241daf4275293b1", "name": "Possibly dead Python function: check_running_strategies", "shortDescription": {"text": "Possibly dead Python function: check_running_strategies"}, "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-d6c1918c9959f2b2", "name": "Possibly dead Python function: check_market_brief_recent", "shortDescription": {"text": "Possibly dead Python function: check_market_brief_recent"}, "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-e4a607709a76b48f", "name": "Possibly dead Python function: check_dynamic_synth_recent", "shortDescription": {"text": "Possibly dead Python function: check_dynamic_synth_recent"}, "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-1490445198cdda10", "name": "Possibly dead Python function: check_directional_concentration", "shortDescription": {"text": "Possibly dead Python function: check_directional_concentration"}, "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-de98ace15b70d528", "name": "Possibly dead Python function: check_logic_health_risk_params", "shortDescription": {"text": "Possibly dead Python function: check_logic_health_risk_params"}, "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-152cfbc5238bbd87", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 frontend/src/components/LegalPage.js:56", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 frontend/src/components/LegalPage.js:56"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-87e205df3533e3c9", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 frontend/src/pages/Pricing.js:277", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 frontend/src/pages/Pricing.js:277"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-19f7cb25fc291ace", "name": "Stray `console.log` in TS/JS \u2014 frontend/src/services/okxWebSocket.js:59", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/src/services/okxWebSocket.js:59"}, "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-fb3dfe9fb2454bce", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 app/static/static/js/main.641d6522.js:2", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/static/static/js/main.641d6522.js:2"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-bb71776ea878078c", "name": "Privileged port 30 in use", "shortDescription": {"text": "Privileged port 30 in use"}, "fullDescription": {"text": "Port 30 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d63da3583b14afc0", "name": "Dockerfile runs as root: Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e066691601852931", "name": "Docker base image is tag-pinned but not digest-pinned: python:3.11-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.11-slim"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aa5acaa49eb8315b", "name": "Containers defined but no K8s/orchestration manifest found", "shortDescription": {"text": "Containers defined but no K8s/orchestration manifest found"}, "fullDescription": {"text": "Repo has Dockerfiles/compose but no Kubernetes/Nomad manifests. If the target deployment is K8s, the manifests may live in a separate ops repo."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-adb69d1e83219e51", "name": "Insecure pattern 'debug_true' in run.py:6", "shortDescription": {"text": "Insecure pattern 'debug_true' in run.py:6"}, "fullDescription": {"text": "Found a known-risky pattern (debug_true). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a738ca14ff3549e5", "name": "Insecure pattern 'dangerous_innerhtml' in frontend/src/components/LegalPage.js:56", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in frontend/src/components/LegalPage.js:56"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-064add562c30d96e", "name": "Insecure pattern 'direct_innerhtml_assignment' in frontend/src/components/TradingViewWidget.js:43", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/src/components/TradingViewWidget.js:43"}, "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-1000057a3bdb9084", "name": "Insecure pattern 'dangerous_innerhtml' in frontend/src/pages/Pricing.js:277", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in frontend/src/pages/Pricing.js:277"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f184d64ca94b3256", "name": "Possible secret in scripts/migrate_phase_11_1.py", "shortDescription": {"text": "Possible secret in scripts/migrate_phase_11_1.py"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-dff2d301fa3c03ae", "name": "Insecure pattern 'new_function_used' in app/static/static/js/main.641d6522.js:2", "shortDescription": {"text": "Insecure pattern 'new_function_used' in app/static/static/js/main.641d6522.js:2"}, "fullDescription": {"text": "Found a known-risky pattern (new_function_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-615973853dfe5f8e", "name": "Insecure pattern 'dangerous_innerhtml' in app/static/static/js/main.641d6522.js:2", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in app/static/static/js/main.641d6522.js:2"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a88e96eb755c6c6e", "name": "Insecure pattern 'direct_innerhtml_assignment' in app/static/static/js/main.641d6522.js:2", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in app/static/static/js/main.641d6522.js:2"}, "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-9019c74e239f9628", "name": "Insecure pattern 'exec_used' in app/services/candidate_sandbox.py:102", "shortDescription": {"text": "Insecure pattern 'exec_used' in app/services/candidate_sandbox.py:102"}, "fullDescription": {"text": "Found a known-risky pattern (exec_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7dba95806f01b382", "name": "Insecure pattern 'eval_used' in app/services/llm_prompts/strategy_synthesize_v2.py:728", "shortDescription": {"text": "Insecure pattern 'eval_used' in app/services/llm_prompts/strategy_synthesize_v2.py:728"}, "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-d115bf2be03fe126", "name": "Insecure pattern 'exec_used' in app/services/llm_prompts/strategy_synthesize_v2.py:728", "shortDescription": {"text": "Insecure pattern 'exec_used' in app/services/llm_prompts/strategy_synthesize_v2.py:728"}, "fullDescription": {"text": "Found a known-risky pattern (exec_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ff498054d318c782", "name": "Insecure pattern 'eval_used' in app/services/llm_prompts/strategy_synthesize.py:190", "shortDescription": {"text": "Insecure pattern 'eval_used' in app/services/llm_prompts/strategy_synthesize.py:190"}, "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-f1b0a9d205cced3a", "name": "Insecure pattern 'exec_used' in app/services/llm_prompts/strategy_synthesize.py:190", "shortDescription": {"text": "Insecure pattern 'exec_used' in app/services/llm_prompts/strategy_synthesize.py:190"}, "fullDescription": {"text": "Found a known-risky pattern (exec_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4601e3ad3bb28677", "name": "No CI/CD pipelines detected", "shortDescription": {"text": "No CI/CD pipelines detected"}, "fullDescription": {"text": "No GitHub Actions, GitLab CI, or CircleCI configs found. Without CI you can't gate deploys on tests/lints."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-19d128e381907672", "name": "Very large file: frontend/src/pages/Strategies.js (982 lines)", "shortDescription": {"text": "Very large file: frontend/src/pages/Strategies.js (982 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-7075dd07b3b817f5", "name": "Very large file: scripts/seed_catalog.py (1294 lines)", "shortDescription": {"text": "Very large file: scripts/seed_catalog.py (1294 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-a30e036decc1731b", "name": "Very large file: app/routes.py (3929 lines)", "shortDescription": {"text": "Very large file: app/routes.py (3929 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-7f29f5902b8eb7f6", "name": "Very large file: app/models.py (1242 lines)", "shortDescription": {"text": "Very large file: app/models.py (1242 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-6b0a118e4dfd6007", "name": "Very large file: app/tasks/strategy_tasks.py (4522 lines)", "shortDescription": {"text": "Very large file: app/tasks/strategy_tasks.py (4522 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-999b057c976afe7d", "name": "Very large file: app/services/gatekeeper_learning.py (1282 lines)", "shortDescription": {"text": "Very large file: app/services/gatekeeper_learning.py (1282 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-f27d425092e3b27d", "name": "Very large file: app/services/strategy_advisor.py (1390 lines)", "shortDescription": {"text": "Very large file: app/services/strategy_advisor.py (1390 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-3473b00888dd57d8", "name": "Very large file: app/services/gatekeeper_live.py (1797 lines)", "shortDescription": {"text": "Very large file: app/services/gatekeeper_live.py (1797 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-557ca8a3498c40df", "name": "Very large file: app/services/llm_prompts/strategy_recommend.py (1230 lines)", "shortDescription": {"text": "Very large file: app/services/llm_prompts/strategy_recommend.py (1230 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-ea3b5e389d8c9c0f", "name": "Low test-to-source ratio", "shortDescription": {"text": "Low test-to-source ratio"}, "fullDescription": {"text": "24 tests / 194 src (ratio 0.12)."}, "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 291 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 26 placeholder/mock markers across 13 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, ci. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-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, ci. 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-8224a29180266ec4", "name": "Agent authority lacks a verifier contract: frontend/.claude/settings.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: frontend/.claude/settings.json"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-122f91b7f2906dc4", "name": "Agent authority lacks a verifier contract: .claude/settings.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/settings.json"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4160838378f67ba8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/auth.js:141", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/auth.js:141"}, "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-59e12320d74fc695", "name": "Commented-code block (5 lines) in frontend/src/utils/strategyTypeLabels.js:79", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/utils/strategyTypeLabels.js:79"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2ddc46cdc25cabb7", "name": "Commented-code block (5 lines) in frontend/src/components/NeuralBackdrop.js:3", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/components/NeuralBackdrop.js:3"}, "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-96302581d6be2bb7", "name": "Commented-code block (6 lines) in frontend/src/components/TradingViewWidget.js:3", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/src/components/TradingViewWidget.js:3"}, "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-786fe15169b530f5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/components/ProfitTargetCard.js:130", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/components/ProfitTargetCard.js:130"}, "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-d9b19017d550fca4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/pages/Trades.js:83", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/pages/Trades.js:83"}, "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-f7e0538f96202b0c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/pages/Strategies.js:294", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/pages/Strategies.js:294"}, "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-f7786bd13161e14d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/pages/Settings.js:126", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/pages/Settings.js:126"}, "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-b5f2fdf69e344348", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/pages/Dashboard.js:219", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/pages/Dashboard.js:219"}, "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-fbe8352ac07e325c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/pages/AdminAuditLog.js:36", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/pages/AdminAuditLog.js:36"}, "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-20741930ff8e0bb3", "name": "Commented-code block (5 lines) in frontend/src/services/okxWebSocket.js:7", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/services/okxWebSocket.js:7"}, "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-50222afe06a0e098", "name": "Legacy-named symbol `strategy_synthesize_v2` in scripts/audit_range_menu_mtf.py:17", "shortDescription": {"text": "Legacy-named symbol `strategy_synthesize_v2` in scripts/audit_range_menu_mtf.py:17"}, "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-00a4ac8896468582", "name": "Legacy-named symbol `strategy_synthesize_v2` in scripts/audit_range_menu.py:19", "shortDescription": {"text": "Legacy-named symbol `strategy_synthesize_v2` in scripts/audit_range_menu.py:19"}, "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-9e708e9700e53131", "name": "Legacy-named symbol `stopped_old` in scripts/flow_watchdog.py:386", "shortDescription": {"text": "Legacy-named symbol `stopped_old` in scripts/flow_watchdog.py:386"}, "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-54a3e0215dd5e050", "name": "Legacy-named symbol `seg_old` in scripts/test_segment_mae_regression.py:2", "shortDescription": {"text": "Legacy-named symbol `seg_old` in scripts/test_segment_mae_regression.py:2"}, "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-825cb9c1b41699de", "name": "Commented-code block (5 lines) in app/routes.py:2089", "shortDescription": {"text": "Commented-code block (5 lines) in app/routes.py:2089"}, "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-7d1244cb5fd1a35d", "name": "Commented-code block (5 lines) in app/models.py:747", "shortDescription": {"text": "Commented-code block (5 lines) in app/models.py:747"}, "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-a80c20f8adb992e3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/static/static/js/main.641d6522.js:2", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/static/static/js/main.641d6522.js:2"}, "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-32fb605b2c3fc77d", "name": "Legacy-named symbol `days_old` in app/tasks/strategy_tasks.py:3234", "shortDescription": {"text": "Legacy-named symbol `days_old` in app/tasks/strategy_tasks.py:3234"}, "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-3af3d8585688cafa", "name": "Commented-code block (6 lines) in app/tasks/strategy_tasks.py:1479", "shortDescription": {"text": "Commented-code block (6 lines) in app/tasks/strategy_tasks.py:1479"}, "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-35843d056078f8b2", "name": "Commented-code block (7 lines) in app/quantcore/engine.py:307", "shortDescription": {"text": "Commented-code block (7 lines) in app/quantcore/engine.py:307"}, "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-9b8b48cc26bc73ba", "name": "Commented-code block (5 lines) in app/services/gatekeeper.py:207", "shortDescription": {"text": "Commented-code block (5 lines) in app/services/gatekeeper.py:207"}, "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-d3bf3ef7253b6b4f", "name": "Commented-code block (6 lines) in app/services/hyperliquid_service.py:467", "shortDescription": {"text": "Commented-code block (6 lines) in app/services/hyperliquid_service.py:467"}, "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-ab32bd8fe04c0f2f", "name": "Commented-code block (7 lines) in app/services/config_service.py:204", "shortDescription": {"text": "Commented-code block (7 lines) in app/services/config_service.py:204"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d115b4b33bc39965", "name": "Commented-code block (7 lines) in app/services/advisor_executor.py:591", "shortDescription": {"text": "Commented-code block (7 lines) in app/services/advisor_executor.py:591"}, "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-d97dc372f1da2ec6", "name": "Legacy-named symbol `strategy_synthesize_v2` in app/services/gatekeeper_learning.py:8", "shortDescription": {"text": "Legacy-named symbol `strategy_synthesize_v2` in app/services/gatekeeper_learning.py:8"}, "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-f2a1424d5cb92073", "name": "Commented-code block (9 lines) in app/services/gatekeeper_learning.py:439", "shortDescription": {"text": "Commented-code block (9 lines) in app/services/gatekeeper_learning.py:439"}, "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-c674e84460db1b36", "name": "Commented-code block (6 lines) in app/services/regime_detector.py:95", "shortDescription": {"text": "Commented-code block (6 lines) in app/services/regime_detector.py:95"}, "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-ca549cdb4695433f", "name": "Commented-code block (5 lines) in app/services/strategy_advisor.py:493", "shortDescription": {"text": "Commented-code block (5 lines) in app/services/strategy_advisor.py:493"}, "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-ae9dc4125a70fb5b", "name": "Commented-code block (5 lines) in app/services/gatekeeper_live.py:459", "shortDescription": {"text": "Commented-code block (5 lines) in app/services/gatekeeper_live.py:459"}, "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-da8d9d8bbf9f8d3e", "name": "Commented-code block (5 lines) in app/services/llm_provider.py:210", "shortDescription": {"text": "Commented-code block (5 lines) in app/services/llm_provider.py:210"}, "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-4dc803a74d75527f", "name": "Legacy-named symbol `strategy_synthesize_v2` in app/services/candidate_pipeline.py:516", "shortDescription": {"text": "Legacy-named symbol `strategy_synthesize_v2` in app/services/candidate_pipeline.py:516"}, "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-29ec216149409e77", "name": "Commented-code block (7 lines) in app/services/candidate_pipeline.py:205", "shortDescription": {"text": "Commented-code block (7 lines) in app/services/candidate_pipeline.py:205"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0032769c053cc4ce", "name": "Legacy-named symbol `synthesize_strategy_v2` in app/services/llm_prompts/strategy_synthesize_v2.py:761", "shortDescription": {"text": "Legacy-named symbol `synthesize_strategy_v2` in app/services/llm_prompts/strategy_synthesize_v2.py:761"}, "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-b01ef835bdd1adbb", "name": "Commented-code block (5 lines) in app/services/llm_prompts/strategy_synthesize_v2.py:748", "shortDescription": {"text": "Commented-code block (5 lines) in app/services/llm_prompts/strategy_synthesize_v2.py:748"}, "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-f3f1774be2067a8e", "name": "Commented-code block (8 lines) in app/services/llm_prompts/strategy_recommend.py:797", "shortDescription": {"text": "Commented-code block (8 lines) in app/services/llm_prompts/strategy_recommend.py:797"}, "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-87acb4066071a15a", "name": "19 env vars used in code but missing from .env.example", "shortDescription": {"text": "19 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `ADMIN_INITIAL_EMAIL`, `ADMIN_INITIAL_PASSWORD`, `API_AUTH_TOKEN`, `BSCSCAN_API_KEY`, `CANDIDATE_CLEANUP_DAYS`, `CLAUDE_CLI_MAX_CONCURRENT`, `CLAUDE_CLI_TIMEOUT`, `CLAUDE_CLI_WAIT_TIMEOUT` + 11 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-2c04133e54348533", "name": "Near-duplicate function bodies in 2 places", "shortDescription": {"text": "Near-duplicate function bodies in 2 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nscripts/site_audit.py:send_telegram, scripts/review_daily_ai_improve.py:send_tg\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-a0310aec627cfbe3", "name": "Near-duplicate function bodies in 26 places", "shortDescription": {"text": "Near-duplicate function bodies in 26 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\napp/models.py:to_dict, app/models.py:to_dict, app/models.py:to_dict, app/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-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:\napp/services/user_scope.py:wrapped, app/services/user_scope.py:wrapped, app/services/user_scope.py:wrapped, app/services/user_scope.py:wrapped\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-7cbad6e44494e8f8", "name": "Frontend route `/checkout` has no Link/navigate to it \u2014 frontend/src/App.js", "shortDescription": {"text": "Frontend route `/checkout` has no Link/navigate to it \u2014 frontend/src/App.js"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5163a1b673a89537", "name": "Frontend route `candidates` has no Link/navigate to it \u2014 frontend/src/App.js", "shortDescription": {"text": "Frontend route `candidates` has no Link/navigate to it \u2014 frontend/src/App.js"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f5ad3c3c67b81227", "name": "Frontend route `audit` has no Link/navigate to it \u2014 frontend/src/App.js", "shortDescription": {"text": "Frontend route `audit` has no Link/navigate to it \u2014 frontend/src/App.js"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a4cf86336595b9e0", "name": "Frontend route `admin/users` has no Link/navigate to it \u2014 frontend/src/App.js", "shortDescription": {"text": "Frontend route `admin/users` has no Link/navigate to it \u2014 frontend/src/App.js"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0ac3e3529f436ea9", "name": "Frontend route `admin/users/:id` has no Link/navigate to it \u2014 frontend/src/App.js", "shortDescription": {"text": "Frontend route `admin/users/:id` has no Link/navigate to it \u2014 frontend/src/App.js"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0504042abe1d09ea", "name": "Frontend route `admin/revenue` has no Link/navigate to it \u2014 frontend/src/App.js", "shortDescription": {"text": "Frontend route `admin/revenue` has no Link/navigate to it \u2014 frontend/src/App.js"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0d38fe2cfb57fc4c", "name": "Frontend route `admin/audit` has no Link/navigate to it \u2014 frontend/src/App.js", "shortDescription": {"text": "Frontend route `admin/audit` has no Link/navigate to it \u2014 frontend/src/App.js"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a93fc349d3a8086a", "name": "Dangling fetch: POST /api/strategies/${strategy.id}/explain (frontend/src/components/ExplainStrategyDialog.js:23)", "shortDescription": {"text": "Dangling fetch: POST /api/strategies/${strategy.id}/explain (frontend/src/components/ExplainStrategyDialog.js:23)"}, "fullDescription": {"text": "`frontend/src/components/ExplainStrategyDialog.js:23` calls `POST /api/strategies/${strategy.id}/explain` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/strategies/<p>/explain`\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-9389e9291dc952cd", "name": "Dangling fetch: POST /api/me/llm/${provider.id} (frontend/src/components/LlmBindingCard.js:93)", "shortDescription": {"text": "Dangling fetch: POST /api/me/llm/${provider.id} (frontend/src/components/LlmBindingCard.js:93)"}, "fullDescription": {"text": "`frontend/src/components/LlmBindingCard.js:93` calls `POST /api/me/llm/${provider.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/me/llm/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-961fc93dc52dbf1c", "name": "Dangling fetch: POST /api/me/llm/${provider.id}/test (frontend/src/components/LlmBindingCard.js:114)", "shortDescription": {"text": "Dangling fetch: POST /api/me/llm/${provider.id}/test (frontend/src/components/LlmBindingCard.js:114)"}, "fullDescription": {"text": "`frontend/src/components/LlmBindingCard.js:114` calls `POST /api/me/llm/${provider.id}/test` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/me/llm/<p>/test`\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-564cb5421e9983c8", "name": "Dangling fetch: PATCH /api/me/llm/${provider.id} (frontend/src/components/LlmBindingCard.js:124)", "shortDescription": {"text": "Dangling fetch: PATCH /api/me/llm/${provider.id} (frontend/src/components/LlmBindingCard.js:124)"}, "fullDescription": {"text": "`frontend/src/components/LlmBindingCard.js:124` calls `PATCH /api/me/llm/${provider.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/me/llm/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-44b5a275f8b5271b", "name": "Dangling fetch: DELETE /api/me/llm/${provider.id} (frontend/src/components/LlmBindingCard.js:137)", "shortDescription": {"text": "Dangling fetch: DELETE /api/me/llm/${provider.id} (frontend/src/components/LlmBindingCard.js:137)"}, "fullDescription": {"text": "`frontend/src/components/LlmBindingCard.js:137` calls `DELETE /api/me/llm/${provider.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/me/llm/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1ff9e03ba9276729", "name": "Dangling fetch: DELETE /api/me/profit-target/${target.id} (frontend/src/components/ProfitTargetCard.js:98)", "shortDescription": {"text": "Dangling fetch: DELETE /api/me/profit-target/${target.id} (frontend/src/components/ProfitTargetCard.js:98)"}, "fullDescription": {"text": "`frontend/src/components/ProfitTargetCard.js:98` calls `DELETE /api/me/profit-target/${target.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/me/profit-target/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fb1f3cb055a1b034", "name": "Dangling fetch: POST /api/me/profit-target/${t.id}/resume (frontend/src/components/ProfitTargetCard.js:130)", "shortDescription": {"text": "Dangling fetch: POST /api/me/profit-target/${t.id}/resume (frontend/src/components/ProfitTargetCard.js:130)"}, "fullDescription": {"text": "`frontend/src/components/ProfitTargetCard.js:130` calls `POST /api/me/profit-target/${t.id}/resume` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/me/profit-target/<p>/resume`\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-4422d753be0f0641", "name": "Unused endpoint: ANY /strategies/<int:id>", "shortDescription": {"text": "Unused endpoint: ANY /strategies/<int:id>"}, "fullDescription": {"text": "`app/routes.py` declares `ANY /strategies/<int: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-aab6d5b22acb5291", "name": "Unused endpoint: ANY /strategies/<int:id>/start", "shortDescription": {"text": "Unused endpoint: ANY /strategies/<int:id>/start"}, "fullDescription": {"text": "`app/routes.py` declares `ANY /strategies/<int:id>/start` 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-057bc17932f76811", "name": "Unused endpoint: ANY /strategies/<int:id>/stop", "shortDescription": {"text": "Unused endpoint: ANY /strategies/<int:id>/stop"}, "fullDescription": {"text": "`app/routes.py` declares `ANY /strategies/<int:id>/stop` 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-087c17920cf2297e", "name": "Unused endpoint: ANY /strategies/live-state", "shortDescription": {"text": "Unused endpoint: ANY /strategies/live-state"}, "fullDescription": {"text": "`app/routes.py` declares `ANY /strategies/live-state` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8d2231be79970ea0", "name": "Unused endpoint: ANY /strategies/<int:id>/optimize", "shortDescription": {"text": "Unused endpoint: ANY /strategies/<int:id>/optimize"}, "fullDescription": {"text": "`app/routes.py` declares `ANY /strategies/<int:id>/optimize` 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-370075482c47309b", "name": "Unused endpoint: ANY /strategies/<int:id>/optimize/latest", "shortDescription": {"text": "Unused endpoint: ANY /strategies/<int:id>/optimize/latest"}, "fullDescription": {"text": "`app/routes.py` declares `ANY /strategies/<int:id>/optimize/latest` 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-8826386fcda9309c", "name": "Unused endpoint: ANY /strategies/<int:id>/apply-params", "shortDescription": {"text": "Unused endpoint: ANY /strategies/<int:id>/apply-params"}, "fullDescription": {"text": "`app/routes.py` declares `ANY /strategies/<int:id>/apply-params` 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-3f0600f3584edcf2", "name": "Unused endpoint: ANY /strategies/<int:id>/fan-out", "shortDescription": {"text": "Unused endpoint: ANY /strategies/<int:id>/fan-out"}, "fullDescription": {"text": "`app/routes.py` declares `ANY /strategies/<int:id>/fan-out` 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-8d26bdf5d381c3e0", "name": "Unused endpoint: ANY /advisor/recommendations", "shortDescription": {"text": "Unused endpoint: ANY /advisor/recommendations"}, "fullDescription": {"text": "`app/routes.py` declares `ANY /advisor/recommendations` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7aa5dd360b4a4753", "name": "Unused endpoint: ANY /advisor/auto-apply/run", "shortDescription": {"text": "Unused endpoint: ANY /advisor/auto-apply/run"}, "fullDescription": {"text": "`app/routes.py` declares `ANY /advisor/auto-apply/run` 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-dc4e67b4208ff008", "name": "Unused endpoint: ANY /advisor/auto-apply/history", "shortDescription": {"text": "Unused endpoint: ANY /advisor/auto-apply/history"}, "fullDescription": {"text": "`app/routes.py` declares `ANY /advisor/auto-apply/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-1c013b47c96917c2", "name": "Unused endpoint: ANY /me/ai-activity-log", "shortDescription": {"text": "Unused endpoint: ANY /me/ai-activity-log"}, "fullDescription": {"text": "`app/routes.py` declares `ANY /me/ai-activity-log` 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-23311427096ad18e", "name": "Unused endpoint: ANY /strategies/health/check", "shortDescription": {"text": "Unused endpoint: ANY /strategies/health/check"}, "fullDescription": {"text": "`app/routes.py` declares `ANY /strategies/health/check` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0959adc3ebb825fa", "name": "Unused endpoint: ANY /strategies/<int:id>/explain", "shortDescription": {"text": "Unused endpoint: ANY /strategies/<int:id>/explain"}, "fullDescription": {"text": "`app/routes.py` declares `ANY /strategies/<int:id>/explain` 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-a12f9eba8145dd5e", "name": "Unused endpoint: ANY /me/weekly-review", "shortDescription": {"text": "Unused endpoint: ANY /me/weekly-review"}, "fullDescription": {"text": "`app/routes.py` declares `ANY /me/weekly-review` 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-3f04f669d6c97066", "name": "Unused endpoint: ANY /me/personal-advice", "shortDescription": {"text": "Unused endpoint: ANY /me/personal-advice"}, "fullDescription": {"text": "`app/routes.py` declares `ANY /me/personal-advice` 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-a9b9dff55f8467d2", "name": "Unused endpoint: ANY /candidates/<int:cid>/run-backtest", "shortDescription": {"text": "Unused endpoint: ANY /candidates/<int:cid>/run-backtest"}, "fullDescription": {"text": "`app/routes.py` declares `ANY /candidates/<int:cid>/run-backtest` 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-33d0843a40ad0323", "name": "Unused endpoint: ANY /me/recommendation-explain", "shortDescription": {"text": "Unused endpoint: ANY /me/recommendation-explain"}, "fullDescription": {"text": "`app/routes.py` declares `ANY /me/recommendation-explain` 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-82678bde2f28cb19", "name": "Unused endpoint: ANY /me/diagnose", "shortDescription": {"text": "Unused endpoint: ANY /me/diagnose"}, "fullDescription": {"text": "`app/routes.py` declares `ANY /me/diagnose` 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-ac99a0dabd6bca81", "name": "Unused endpoint: ANY /strategies/<int:id>/retire", "shortDescription": {"text": "Unused endpoint: ANY /strategies/<int:id>/retire"}, "fullDescription": {"text": "`app/routes.py` declares `ANY /strategies/<int:id>/retire` 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-c63e3d0668605625", "name": "Unused endpoint: ANY /strategies/<int:id>/revive", "shortDescription": {"text": "Unused endpoint: ANY /strategies/<int:id>/revive"}, "fullDescription": {"text": "`app/routes.py` declares `ANY /strategies/<int:id>/revive` 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-6c16a6daa7d97dd4", "name": "Unused endpoint: ANY /positions", "shortDescription": {"text": "Unused endpoint: ANY /positions"}, "fullDescription": {"text": "`app/routes.py` declares `ANY /positions` 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-1988c6ec318664b2", "name": "Unused endpoint: ANY /pnl/history", "shortDescription": {"text": "Unused endpoint: ANY /pnl/history"}, "fullDescription": {"text": "`app/routes.py` declares `ANY /pnl/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-9c5caa8755d8e640", "name": "Unused endpoint: ANY /pnl/summary", "shortDescription": {"text": "Unused endpoint: ANY /pnl/summary"}, "fullDescription": {"text": "`app/routes.py` declares `ANY /pnl/summary` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-33e83ca6a68cd8e4", "name": "Unused endpoint: ANY /strategies/<int:id>/backtest", "shortDescription": {"text": "Unused endpoint: ANY /strategies/<int:id>/backtest"}, "fullDescription": {"text": "`app/routes.py` declares `ANY /strategies/<int:id>/backtest` 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-40b3657ca040406a", "name": "Unused endpoint: ANY /strategies/<int:id>/backtest/all", "shortDescription": {"text": "Unused endpoint: ANY /strategies/<int:id>/backtest/all"}, "fullDescription": {"text": "`app/routes.py` declares `ANY /strategies/<int:id>/backtest/all` 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-c5ca4a25f152b51f", "name": "Unused endpoint: ANY /backtests/latest", "shortDescription": {"text": "Unused endpoint: ANY /backtests/latest"}, "fullDescription": {"text": "`app/routes.py` declares `ANY /backtests/latest` 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-e74b70a6d07df67e", "name": "Unused endpoint: ANY /backtests/run-all", "shortDescription": {"text": "Unused endpoint: ANY /backtests/run-all"}, "fullDescription": {"text": "`app/routes.py` declares `ANY /backtests/run-all` 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-d2cea53ce99db79d", "name": "Unused endpoint: ANY /strategies/performance", "shortDescription": {"text": "Unused endpoint: ANY /strategies/performance"}, "fullDescription": {"text": "`app/routes.py` declares `ANY /strategies/performance` 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-db34b22f188a7d9b", "name": "Unused endpoint: ANY /orders", "shortDescription": {"text": "Unused endpoint: ANY /orders"}, "fullDescription": {"text": "`app/routes.py` declares `ANY /orders` 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-882db530ae1d6bf0", "name": "Unused endpoint: ANY /trades", "shortDescription": {"text": "Unused endpoint: ANY /trades"}, "fullDescription": {"text": "`app/routes.py` declares `ANY /trades` 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-d85f36ab84b95a2c", "name": "Unused endpoint: ANY /account", "shortDescription": {"text": "Unused endpoint: ANY /account"}, "fullDescription": {"text": "`app/routes.py` declares `ANY /account` 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-dda924f7632ab5cd", "name": "Unused endpoint: ANY /market/btc-price", "shortDescription": {"text": "Unused endpoint: ANY /market/btc-price"}, "fullDescription": {"text": "`app/routes.py` declares `ANY /market/btc-price` 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-17fe06b098ad2c4d", "name": "Unused endpoint: ANY /symbols", "shortDescription": {"text": "Unused endpoint: ANY /symbols"}, "fullDescription": {"text": "`app/routes.py` declares `ANY /symbols` 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-3ddffd87df593c4e", "name": "Unused endpoint: ANY /market/<path:symbol>/price", "shortDescription": {"text": "Unused endpoint: ANY /market/<path:symbol>/price"}, "fullDescription": {"text": "`app/routes.py` declares `ANY /market/<path:symbol>/price` 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-8074cea46c002363", "name": "Unused endpoint: ANY /market/<path:symbol>/chart", "shortDescription": {"text": "Unused endpoint: ANY /market/<path:symbol>/chart"}, "fullDescription": {"text": "`app/routes.py` declares `ANY /market/<path:symbol>/chart` 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-879e06bf9de55f45", "name": "Unused endpoint: ANY /market/btc-chart", "shortDescription": {"text": "Unused endpoint: ANY /market/btc-chart"}, "fullDescription": {"text": "`app/routes.py` declares `ANY /market/btc-chart` 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-7f6e99abac7185a7", "name": "Unused endpoint: ANY /reconcile", "shortDescription": {"text": "Unused endpoint: ANY /reconcile"}, "fullDescription": {"text": "`app/routes.py` declares `ANY /reconcile` 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-cecd400e42d03005", "name": "Unused endpoint: ANY /anomaly/check", "shortDescription": {"text": "Unused endpoint: ANY /anomaly/check"}, "fullDescription": {"text": "`app/routes.py` declares `ANY /anomaly/check` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d310c256c33f7aa3", "name": "Unused endpoint: ANY /killswitch", "shortDescription": {"text": "Unused endpoint: ANY /killswitch"}, "fullDescription": {"text": "`app/routes.py` declares `ANY /killswitch` 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-6647368c0b3b8f99", "name": "Unused endpoint: ANY /telegram/test", "shortDescription": {"text": "Unused endpoint: ANY /telegram/test"}, "fullDescription": {"text": "`app/routes.py` declares `ANY /telegram/test` 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-ac23c3dd2f4cd1fc", "name": "Unused endpoint: ANY /halt", "shortDescription": {"text": "Unused endpoint: ANY /halt"}, "fullDescription": {"text": "`app/routes.py` declares `ANY /halt` 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-7ffcc6a8d132f8f7", "name": "Unused endpoint: ANY /unhalt", "shortDescription": {"text": "Unused endpoint: ANY /unhalt"}, "fullDescription": {"text": "`app/routes.py` declares `ANY /unhalt` 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-d5093423ec977238", "name": "Unused endpoint: ANY /halt/check", "shortDescription": {"text": "Unused endpoint: ANY /halt/check"}, "fullDescription": {"text": "`app/routes.py` declares `ANY /halt/check` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9ef407b1f648fae7", "name": "Unused endpoint: ANY /gatekeeper/dashboard", "shortDescription": {"text": "Unused endpoint: ANY /gatekeeper/dashboard"}, "fullDescription": {"text": "`app/routes.py` declares `ANY /gatekeeper/dashboard` 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-0a4ffb346b2104ec", "name": "Unused endpoint: ANY /manual-order", "shortDescription": {"text": "Unused endpoint: ANY /manual-order"}, "fullDescription": {"text": "`app/routes.py` declares `ANY /manual-order` 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-5bcc0f876f7d7016", "name": "Unused endpoint: ANY /trade-view/<path:symbol>", "shortDescription": {"text": "Unused endpoint: ANY /trade-view/<path:symbol>"}, "fullDescription": {"text": "`app/routes.py` declares `ANY /trade-view/<path:symbol>` 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-ee4b623a367eab89", "name": "Unused endpoint: ANY /gatekeeper/synthesize", "shortDescription": {"text": "Unused endpoint: ANY /gatekeeper/synthesize"}, "fullDescription": {"text": "`app/routes.py` declares `ANY /gatekeeper/synthesize` 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-54687e99f2c1ed06", "name": "Unused endpoint: ANY /preflight", "shortDescription": {"text": "Unused endpoint: ANY /preflight"}, "fullDescription": {"text": "`app/routes.py` declares `ANY /preflight` 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-01d100bfe37ea5e1", "name": "Unused endpoint: ANY /simulation/estimate", "shortDescription": {"text": "Unused endpoint: ANY /simulation/estimate"}, "fullDescription": {"text": "`app/routes.py` declares `ANY /simulation/estimate` 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/22266"}, "properties": {"repository": "vincenzo000915-cmd/ai-quant", "repoUrl": "https://github.com/vincenzo000915-cmd/ai-quant", "branch": "main"}, "results": [{"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: vincenzo000915-cmd/ai-quant"}, "properties": {"repobilityId": 431039, "scanner": "foundry_dataset", "fingerprint": "99f1807b37f45b7721cd2c2defd20b40dcc479fc63b880186f52367dd77a97e5", "category": "practices", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback without linked fix evidence", "intent": "Negative/unresolved examples that should not be hallucinated into fixes.", "labels": {"security_auth_secret": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 3, "human_reported_issue_no_linked_fix": 1, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "unlinked_feedback_needs_evidence", "outcomes": {"not_resolved_or_not_observed": 6}, "polarity": "bad", "query_id": "unresolved_feedback", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 11, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "chain_has_link_quality": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "thread_has_comment_chain": 1, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 9, "node_types": {"repo": 1, "thread": 1, "comment": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 3, "comment_chain": 1}, "query_type": "motif_query", "thread_key": "vincenzo000915-cmd/ai-quant#1", "issue_number": "1", "quality_tiers": {"unresolved": 3}, "repo_full_name": "vincenzo000915-cmd/ai-quant", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-237d5d8fcaaac3b7", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {}}, "text": "Graph query export: Human feedback without linked fix evidence\nQuery id: unresolved_feedback\nQuery type: motif_query\nIntent: Negative/unresolved examples that should not be hallucinated into fixes.\nMotif: unlinked_feedback_needs_evidence\nTraining usage: negative_or_unresolved\nGraph gold label: needs_more_evidence\nRepo: vincenzo000915-cmd/ai-quant\nThread: vincenzo000915-cmd/ai-quant#1\nEvidence:\nGraph motif: Human feedback exists without a linked fix\nMotif id: unlinked_feedback_needs_evidence\nPolarity: bad\nTraining usage: negative_or_unresolved\nSeverity: medium\nRepo: vincenzo000915-cmd/ai-quant\nThread: vincenzo000915-cmd/ai-quant#1\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: vincenzo000915-cmd/ai-quant#1\nRepo: vincenzo000915-cmd/ai-quant\nIssue/PR number: 1\nGraph consistency label: needs_more_evidence\nNodes: 9\nEdges: 11\nNode types: {'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'chain_has_link_quality': 3, 'repo_has_thread': 1, 'thread_has_comment': 1, 'thread_has_comment_chain': 1, 'comment_has_chain': 1, 'thread_has_issue_chain': 1, 'issue_chain_has_comment_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'not_resolved_or_not_observed': 3, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'security_auth_secret': 1, 'human_reported_issue_no_linked_fix': 1}\nOutcomes: {'not_resolved_or_not_observed': 6}\nQuality tiers: {'unresolved': 3}\nCI labels: {}\nCurriculum targets:\n- Teach models to preserve unresolved human feedback instead of hallucinating fixes.\n- Build issue-to-regression examples where no accepted fix exists yet.\nAssumption checks:\n- Can a commit be linked by issue number, SHA, changed path, or time window?\n- If no link exists, is this explicitly labelled unresolved?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/vincenzo000915-cmd/ai-quant", "source_id": "graph-query-motif_query-8468cccd3f6e40c5", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/unresolved_feedback/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "vincenzo000915-cmd/ai-quant", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: vincenzo000915-cmd/ai-quant"}, "properties": {"repobilityId": 392042, "scanner": "foundry_dataset", "fingerprint": "d6fff22fffe3a422763a20038d2b4f1834c33b98af2d5732a9d254df6d474ccc", "category": "practices", "severity": "high", "confidence": 0.84, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "comment_chain_pattern_product", "source": "comment_chain_pattern_miner", "product": "bad_chains", "synthetic": false, "thread_key": "vincenzo000915-cmd/ai-quant#1", "human_labels": ["security_auth_secret"], "issue_number": "1", "thread_label": "thread_has_human_issue_without_fix_context", "outcome_label": "not_resolved_or_not_observed", "source_backed": true, "max_confidence": 0.0, "repo_full_name": "vincenzo000915-cmd/ai-quant", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-35664eef5a3d2c99", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 2, "docs": 6}, "source_chain_kind": "issue_chain", "changed_file_count": 0, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {}, "linked_commit_count": 0, "helicopter_view_count": 4, "source_artifact_count": 8, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_unresolved", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 2, "design_schema_api_artifact_count": 0}, "text": "Comment chain pattern product: bad_chains\nRepo: vincenzo000915-cmd/ai-quant\nThread: vincenzo000915-cmd/ai-quant#1\nOutcome: not_resolved_or_not_observed\nThread label: thread_has_human_issue_without_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_unresolved, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: vincenzo000915-cmd/ai-quant#1\nRepo: vincenzo000915-cmd/ai-quant\nThread label: thread_has_human_issue_without_fix_context\nOutcome: not_resolved_or_not_observed\nComment count: 1\nLinked commit count: 0\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 0\nLabels: {'security_auth_secret': 1}\nPolarities: {'bad': 1}\nChanged file labels: {}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-01f8b0b3ff73fa14\",\n    \"kind\": \"issue_body\",\n    \"label\": \"security_auth_secret\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/vincenzo000915-cmd/ai-quant/issues/1\",\n    \"text\": \"GitHub feedback: security_auth_secret\\nPolarity: bad\\nKind: issue_body\\nRepo: vincenzo000915-cmd/ai-quant\\nAuthor: gitscan-agent (User)\\nURL: https://github.com/vincenzo000915-cmd/ai-quant/issues/1\\nTitle: Possible Telegram Bot API token leak in vincenzo000915-cmd/ai-quant\\nBody:\\nHi there,\\n\\nGitScan detected a possible `Telegram Bot API token` leak in `vincenzo000915-cmd/ai-quant`.\\n\\nHere's a redacted glimpse of what we saw:\\n\\n```\\nTG_TOKEN=os.e********************************w')\\n```\\n\\n**[View this finding securely on GitScan](https://gitscan.ai/view?utm_source=issue&utm_medium=disclosure&utm_campaign=auto_issue&utm_content=view_finding&issue=c8418fd5-d665-4e62-9fb1-ce611fbfb8ff&finding=gs_e425aa7b716bbc34)**\\n\\nYou'll see the exact location and step-by-step remediation there. GitScan never publishes the raw secret.\\n\\nWhen you're done, you can close this issue on GitHub.\"\n  }\n]\nChanged files:\n[]\nLinked chain ids:\n[\"evidence-chain-comment_to_commit-38cf7693ea50a8cb\"]\nSource graph evidence:\nSource evidence repo graph summary\nRepo: vincenzo000915-cmd/ai-quant\nGraph label: source_backed_multi_signal_graph\nNodes: 16\nEdges: 24\nNode types: {\"cooccurrence_profile\": 1, \"github_repo_summary\": 1, \"helicopter_repo_view\": 4, \"repo\": 1, \"source_artifact\": 8, \"source_bundle\": 1}\nEdge types: {\"artifact_needs_claim_verification\": 6, \"artifact_supports_verification\": 2, \"repo_has_cooccurrence_profile\": 1, \"repo_has_github_evidence_summary\": 1, \"repo_has_graphs_helicopter_view\": 2, \"repo_has_schemas_helicopter_view\": 2, \"repo_has_source_artifact\": 8, \"repo_has_source_bundle\": 1, \"source_bundle_uses_cooccurrence_profile\": 1}\nArtifact families: {\"ci\": 2, \"docs\": 6}\nHelicopter views: {\"graphs\": 2, \"schemas\": 2}\nBundle labels: {\"source_backed_security_guardrail_bundle\": 1}\nCo-occurrence labels: {\"security_guardrail_cluster\": 1}", "source": "foundry_mined_dataset", "repo_url": "https://github.com/vincenzo000915-cmd/ai-quant", "source_id": "comment-chain-pattern-bad_chains-b900f59362549511", "synthetic": false, "gold_label": "", "graph_label": "source_backed_multi_signal_graph", "source_path": "/data/distillate/foundry_data/comment_chain_patterns/bad_chains/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "vincenzo000915-cmd/ai-quant", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_auth_guardrail_gap", "level": "error", "message": {"text": "Foundry mined security auth guardrail gaps: vincenzo000915-cmd/ai-quant"}, "properties": {"repobilityId": 415027, "scanner": "foundry_dataset", "fingerprint": "7c672c7981970cb319e498b141f567242416a6f426217ce5fd2c2c7df9dca073", "category": "auth", "severity": "critical", "confidence": 0.78, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Security/auth changes without enough guardrails", "intent": "Assumption-check security/auth examples requiring stronger tests or CI.", "labels": {"security_auth_secret": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 3, "human_reported_issue_no_linked_fix": 1, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "security_auth_without_guardrails", "outcomes": {"not_resolved_or_not_observed": 6}, "polarity": "bad", "query_id": "security_auth_guardrail_gaps", "severity": "critical", "ci_labels": {}, "synthetic": false, "edge_count": 11, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "chain_has_link_quality": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "thread_has_comment_chain": 1, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 9, "node_types": {"repo": 1, "thread": 1, "comment": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 3, "comment_chain": 1}, "query_type": "motif_query", "thread_key": "vincenzo000915-cmd/ai-quant#1", "issue_number": "1", "quality_tiers": {"unresolved": 3}, "repo_full_name": "vincenzo000915-cmd/ai-quant", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-0492796e1f06a4ff", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {}}, "text": "Graph query export: Security/auth changes without enough guardrails\nQuery id: security_auth_guardrail_gaps\nQuery type: motif_query\nIntent: Assumption-check security/auth examples requiring stronger tests or CI.\nMotif: security_auth_without_guardrails\nTraining usage: assumption_check\nGraph gold label: needs_more_evidence\nRepo: vincenzo000915-cmd/ai-quant\nThread: vincenzo000915-cmd/ai-quant#1\nEvidence:\nGraph motif: Security/auth change without enough guardrails\nMotif id: security_auth_without_guardrails\nPolarity: bad\nTraining usage: assumption_check\nSeverity: critical\nRepo: vincenzo000915-cmd/ai-quant\nThread: vincenzo000915-cmd/ai-quant#1\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: vincenzo000915-cmd/ai-quant#1\nRepo: vincenzo000915-cmd/ai-quant\nIssue/PR number: 1\nGraph consistency label: needs_more_evidence\nNodes: 9\nEdges: 11\nNode types: {'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'chain_has_link_quality': 3, 'repo_has_thread': 1, 'thread_has_comment': 1, 'thread_has_comment_chain': 1, 'comment_has_chain': 1, 'thread_has_issue_chain': 1, 'issue_chain_has_comment_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'not_resolved_or_not_observed': 3, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'security_auth_secret': 1, 'human_reported_issue_no_linked_fix': 1}\nOutcomes: {'not_resolved_or_not_observed': 6}\nQuality tiers: {'unresolved': 3}\nCI labels: {}\nCurriculum targets:\n- Train auth boundary repair with tests, permission matrices, and secret-handling checks.\n- Keep risky auth changes separate from ordinary bug-fix examples.\nAssumption checks:\n- Are auth/permission paths covered by tests?\n- Are secrets, CORS, or access rules verified rather than summarized?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/vincenzo000915-cmd/ai-quant", "source_id": "graph-query-motif_query-618458bf893a18fe", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/security_auth_guardrail_gaps/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "vincenzo000915-cmd/ai-quant", "source_dataset": "graph_queries/security_auth_guardrail_gaps", "training_usage": "assumption_check"}}}, {"ruleId": "scanner-0e87e07c5b01f51f", "level": "note", "message": {"text": "Possibly dead Python function: check_docker_containers"}, "properties": {"repobilityId": "659e0b4932b6a539", "scanner": "scanner-primary", "fingerprint": "0e87e07c5b01f51f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/site_audit.py:107"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-96d0a9e19e0240d2", "level": "note", "message": {"text": "Possibly dead Python function: check_postgres_health"}, "properties": {"repobilityId": "a5bd2fe55cfb8d17", "scanner": "scanner-primary", "fingerprint": "96d0a9e19e0240d2", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/site_audit.py:126"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9c3b92b01995bac1", "level": "note", "message": {"text": "Possibly dead Python function: check_redis_health"}, "properties": {"repobilityId": "9cd5aed4ab24cdbe", "scanner": "scanner-primary", "fingerprint": "9c3b92b01995bac1", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/site_audit.py:144"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-523020b29fa878e1", "level": "note", "message": {"text": "Possibly dead Python function: check_web_local"}, "properties": {"repobilityId": "812c2daa624a936a", "scanner": "scanner-primary", "fingerprint": "523020b29fa878e1", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/site_audit.py:153"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c6c30e7311862acf", "level": "note", "message": {"text": "Possibly dead Python function: check_web_prod"}, "properties": {"repobilityId": "6f06997885fef7fe", "scanner": "scanner-primary", "fingerprint": "c6c30e7311862acf", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/site_audit.py:168"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1b5851472be36713", "level": "note", "message": {"text": "Possibly dead Python function: check_ssl_cert"}, "properties": {"repobilityId": "8e6d9c25a27de66f", "scanner": "scanner-primary", "fingerprint": "1b5851472be36713", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/site_audit.py:185"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9b05b36dcea2ce07", "level": "note", "message": {"text": "Possibly dead Python function: check_disk_space"}, "properties": {"repobilityId": "ddcc1240ffc39555", "scanner": "scanner-primary", "fingerprint": "9b05b36dcea2ce07", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/site_audit.py:205"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-fcaab40822a9938e", "level": "note", "message": {"text": "Possibly dead Python function: check_ram_load"}, "properties": {"repobilityId": "497e98cd0610f6cb", "scanner": "scanner-primary", "fingerprint": "fcaab40822a9938e", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/site_audit.py:226"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6767cf2e0999a3bd", "level": "note", "message": {"text": "Possibly dead Python function: check_celery_worker_ping"}, "properties": {"repobilityId": "6e0a59dc7bd93e3c", "scanner": "scanner-primary", "fingerprint": "6767cf2e0999a3bd", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/site_audit.py:250"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-818bb406dd8f8c11", "level": "note", "message": {"text": "Possibly dead Python function: check_celery_beat_alive"}, "properties": {"repobilityId": "45a57306adde59d7", "scanner": "scanner-primary", "fingerprint": "818bb406dd8f8c11", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/site_audit.py:263"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-84ed7489c8b3fc41", "level": "note", "message": {"text": "Possibly dead Python function: check_okx_connectivity"}, "properties": {"repobilityId": "679f1d3652133cdf", "scanner": "scanner-primary", "fingerprint": "84ed7489c8b3fc41", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/site_audit.py:312"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b5d6104f56a26a66", "level": "note", "message": {"text": "Possibly dead Python function: check_telegram_bot"}, "properties": {"repobilityId": "0b1f81c828189290", "scanner": "scanner-primary", "fingerprint": "b5d6104f56a26a66", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/site_audit.py:329"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ad2b3c94699ef1a6", "level": "note", "message": {"text": "Possibly dead Python function: check_recent_critical_events"}, "properties": {"repobilityId": "7053295575665cb5", "scanner": "scanner-primary", "fingerprint": "ad2b3c94699ef1a6", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/site_audit.py:341"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-527c9d9e061c5cc0", "level": "note", "message": {"text": "Possibly dead Python function: check_translate_cron"}, "properties": {"repobilityId": "3b60f23759f08fdc", "scanner": "scanner-primary", "fingerprint": "527c9d9e061c5cc0", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/site_audit.py:366"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-709b1ecd53901cd5", "level": "note", "message": {"text": "Possibly dead Python function: f"}, "properties": {"repobilityId": "353d09b5558cba0b", "scanner": "scanner-primary", "fingerprint": "709b1ecd53901cd5", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/mirror_experiment.py:37"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9fb298b941edefc6", "level": "note", "message": {"text": "Possibly dead Python function: check_celery_beat_heartbeat"}, "properties": {"repobilityId": "762cff59c6373f5a", "scanner": "scanner-primary", "fingerprint": "9fb298b941edefc6", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/flow_watchdog.py:94"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5e6ec4f699e98a3b", "level": "note", "message": {"text": "Possibly dead Python function: check_signal_cycle_15m"}, "properties": {"repobilityId": "2d036628de8e5984", "scanner": "scanner-primary", "fingerprint": "5e6ec4f699e98a3b", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/flow_watchdog.py:145"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7e80bdd2b15baf07", "level": "note", "message": {"text": "Possibly dead Python function: check_ai_improve_recent"}, "properties": {"repobilityId": "3e955814021333b6", "scanner": "scanner-primary", "fingerprint": "7e80bdd2b15baf07", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/flow_watchdog.py:165"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0e581d18ee83830c", "level": "note", "message": {"text": "Possibly dead Python function: check_translate_pipeline"}, "properties": {"repobilityId": "2030041e7a825bbe", "scanner": "scanner-primary", "fingerprint": "0e581d18ee83830c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/flow_watchdog.py:198"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-fc3c3228dd83b580", "level": "note", "message": {"text": "Possibly dead Python function: check_llm_errors_recent"}, "properties": {"repobilityId": "59adc4f7a77f2f50", "scanner": "scanner-primary", "fingerprint": "fc3c3228dd83b580", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/flow_watchdog.py:238"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-afe7b8766374fa2f", "level": "note", "message": {"text": "Possibly dead Python function: check_claude_cli_auth"}, "properties": {"repobilityId": "8537a4a8e724f83a", "scanner": "scanner-primary", "fingerprint": "afe7b8766374fa2f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/flow_watchdog.py:257"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f827535ecf67182c", "level": "note", "message": {"text": "Possibly dead Python function: check_pg_pool"}, "properties": {"repobilityId": "2da92082391857d9", "scanner": "scanner-primary", "fingerprint": "f827535ecf67182c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/flow_watchdog.py:281"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6eaa90217a3abc4c", "level": "note", "message": {"text": "Possibly dead Python function: check_exchange_connectivity"}, "properties": {"repobilityId": "b7230e45b986bb1f", "scanner": "scanner-primary", "fingerprint": "6eaa90217a3abc4c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/flow_watchdog.py:297"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9df6d53a300ad489", "level": "note", "message": {"text": "Possibly dead Python function: check_reconcile_recent"}, "properties": {"repobilityId": "2c0cfd4af20a03a3", "scanner": "scanner-primary", "fingerprint": "9df6d53a300ad489", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/flow_watchdog.py:355"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1241daf4275293b1", "level": "note", "message": {"text": "Possibly dead Python function: check_running_strategies"}, "properties": {"repobilityId": "354ec185103b4d66", "scanner": "scanner-primary", "fingerprint": "1241daf4275293b1", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/flow_watchdog.py:373"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d6c1918c9959f2b2", "level": "note", "message": {"text": "Possibly dead Python function: check_market_brief_recent"}, "properties": {"repobilityId": "89460d027292dfd0", "scanner": "scanner-primary", "fingerprint": "d6c1918c9959f2b2", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/flow_watchdog.py:403"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e4a607709a76b48f", "level": "note", "message": {"text": "Possibly dead Python function: check_dynamic_synth_recent"}, "properties": {"repobilityId": "1647cf2e417daa93", "scanner": "scanner-primary", "fingerprint": "e4a607709a76b48f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/flow_watchdog.py:468"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1490445198cdda10", "level": "note", "message": {"text": "Possibly dead Python function: check_directional_concentration"}, "properties": {"repobilityId": "1cd1d9c92f641057", "scanner": "scanner-primary", "fingerprint": "1490445198cdda10", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/flow_watchdog.py:482"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-de98ace15b70d528", "level": "note", "message": {"text": "Possibly dead Python function: check_logic_health_risk_params"}, "properties": {"repobilityId": "219a8abad92c8b6d", "scanner": "scanner-primary", "fingerprint": "de98ace15b70d528", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/flow_watchdog.py:510"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-152cfbc5238bbd87", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 frontend/src/components/LegalPage.js:56"}, "properties": {"repobilityId": "c380dddca3844e58", "scanner": "scanner-primary", "fingerprint": "152cfbc5238bbd87", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-87e205df3533e3c9", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 frontend/src/pages/Pricing.js:277"}, "properties": {"repobilityId": "a7a8fa02556f31e7", "scanner": "scanner-primary", "fingerprint": "87e205df3533e3c9", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-19f7cb25fc291ace", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/src/services/okxWebSocket.js:59"}, "properties": {"repobilityId": "efde1eb9b91192f7", "scanner": "scanner-primary", "fingerprint": "19f7cb25fc291ace", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fb3dfe9fb2454bce", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/static/static/js/main.641d6522.js:2"}, "properties": {"repobilityId": "35828e5867f8a0a8", "scanner": "scanner-primary", "fingerprint": "fb3dfe9fb2454bce", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-bb71776ea878078c", "level": "warning", "message": {"text": "Privileged port 30 in use"}, "properties": {"repobilityId": "54f172e7d16fc662", "scanner": "scanner-primary", "fingerprint": "bb71776ea878078c", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "translate_pending_cron.sh"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d63da3583b14afc0", "level": "warning", "message": {"text": "Dockerfile runs as root: Dockerfile"}, "properties": {"repobilityId": "a2ed1bd120e507db", "scanner": "scanner-primary", "fingerprint": "d63da3583b14afc0", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-e066691601852931", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.11-slim"}, "properties": {"repobilityId": "f391052c9bfd7e8b", "scanner": "scanner-primary", "fingerprint": "e066691601852931", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Dockerfile"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-aa5acaa49eb8315b", "level": "note", "message": {"text": "Containers defined but no K8s/orchestration manifest found"}, "properties": {"repobilityId": "b230ea9b68736081", "scanner": "scanner-primary", "fingerprint": "aa5acaa49eb8315b", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["coverage", "deployment"]}}, {"ruleId": "scanner-adb69d1e83219e51", "level": "note", "message": {"text": "Insecure pattern 'debug_true' in run.py:6"}, "properties": {"repobilityId": "188429209af586ce", "scanner": "scanner-primary", "fingerprint": "adb69d1e83219e51", "layer": "security", "severity": "low", "confidence": 1.0, "tags": ["owasp", "debug_true"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "run.py"}, "region": {"startLine": 6}}}]}, {"ruleId": "scanner-a738ca14ff3549e5", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in frontend/src/components/LegalPage.js:56"}, "properties": {"repobilityId": "c2d4530dffc9303d", "scanner": "scanner-primary", "fingerprint": "a738ca14ff3549e5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/src/components/LegalPage.js"}, "region": {"startLine": 56}}}]}, {"ruleId": "scanner-064add562c30d96e", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/src/components/TradingViewWidget.js:43"}, "properties": {"repobilityId": "c621430fb31cfb5e", "scanner": "scanner-primary", "fingerprint": "064add562c30d96e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/src/components/TradingViewWidget.js"}, "region": {"startLine": 43}}}]}, {"ruleId": "scanner-1000057a3bdb9084", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in frontend/src/pages/Pricing.js:277"}, "properties": {"repobilityId": "39df03e30423d5e8", "scanner": "scanner-primary", "fingerprint": "1000057a3bdb9084", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/src/pages/Pricing.js"}, "region": {"startLine": 277}}}]}, {"ruleId": "scanner-f184d64ca94b3256", "level": "error", "message": {"text": "Possible secret in scripts/migrate_phase_11_1.py"}, "properties": {"repobilityId": "662a481bd2eaa35b", "scanner": "scanner-primary", "fingerprint": "f184d64ca94b3256", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/migrate_phase_11_1.py"}, "region": {"startLine": 7}}}]}, {"ruleId": "scanner-dff2d301fa3c03ae", "level": "error", "message": {"text": "Insecure pattern 'new_function_used' in app/static/static/js/main.641d6522.js:2"}, "properties": {"repobilityId": "9b7397a24f917537", "scanner": "scanner-primary", "fingerprint": "dff2d301fa3c03ae", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "new_function_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/static/static/js/main.641d6522.js"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-615973853dfe5f8e", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in app/static/static/js/main.641d6522.js:2"}, "properties": {"repobilityId": "bf2ecde65f3364c5", "scanner": "scanner-primary", "fingerprint": "615973853dfe5f8e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/static/static/js/main.641d6522.js"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-a88e96eb755c6c6e", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in app/static/static/js/main.641d6522.js:2"}, "properties": {"repobilityId": "b2435f2564dfc8f5", "scanner": "scanner-primary", "fingerprint": "a88e96eb755c6c6e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/static/static/js/main.641d6522.js"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-9019c74e239f9628", "level": "error", "message": {"text": "Insecure pattern 'exec_used' in app/services/candidate_sandbox.py:102"}, "properties": {"repobilityId": "f890169da93b720d", "scanner": "scanner-primary", "fingerprint": "9019c74e239f9628", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "exec_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/services/candidate_sandbox.py"}, "region": {"startLine": 102}}}]}, {"ruleId": "scanner-7dba95806f01b382", "level": "error", "message": {"text": "Insecure pattern 'eval_used' in app/services/llm_prompts/strategy_synthesize_v2.py:728"}, "properties": {"repobilityId": "41aba80846d62e22", "scanner": "scanner-primary", "fingerprint": "7dba95806f01b382", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "eval_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/services/llm_prompts/strategy_synthesize_v2.py"}, "region": {"startLine": 728}}}]}, {"ruleId": "scanner-d115bf2be03fe126", "level": "error", "message": {"text": "Insecure pattern 'exec_used' in app/services/llm_prompts/strategy_synthesize_v2.py:728"}, "properties": {"repobilityId": "d7049f15f3e9033f", "scanner": "scanner-primary", "fingerprint": "d115bf2be03fe126", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "exec_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/services/llm_prompts/strategy_synthesize_v2.py"}, "region": {"startLine": 728}}}]}, {"ruleId": "scanner-ff498054d318c782", "level": "error", "message": {"text": "Insecure pattern 'eval_used' in app/services/llm_prompts/strategy_synthesize.py:190"}, "properties": {"repobilityId": "23747601bdc55d42", "scanner": "scanner-primary", "fingerprint": "ff498054d318c782", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "eval_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/services/llm_prompts/strategy_synthesize.py"}, "region": {"startLine": 190}}}]}, {"ruleId": "scanner-f1b0a9d205cced3a", "level": "error", "message": {"text": "Insecure pattern 'exec_used' in app/services/llm_prompts/strategy_synthesize.py:190"}, "properties": {"repobilityId": "f7104dd6f87b746c", "scanner": "scanner-primary", "fingerprint": "f1b0a9d205cced3a", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "exec_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/services/llm_prompts/strategy_synthesize.py"}, "region": {"startLine": 190}}}]}, {"ruleId": "scanner-4601e3ad3bb28677", "level": "warning", "message": {"text": "No CI/CD pipelines detected"}, "properties": {"repobilityId": "c3ee439bce2bc51e", "scanner": "scanner-primary", "fingerprint": "4601e3ad3bb28677", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-19d128e381907672", "level": "note", "message": {"text": "Very large file: frontend/src/pages/Strategies.js (982 lines)"}, "properties": {"repobilityId": "1e9543f2a36eb351", "scanner": "scanner-primary", "fingerprint": "19d128e381907672", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-7075dd07b3b817f5", "level": "note", "message": {"text": "Very large file: scripts/seed_catalog.py (1294 lines)"}, "properties": {"repobilityId": "d3d0220c547ba5f5", "scanner": "scanner-primary", "fingerprint": "7075dd07b3b817f5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a30e036decc1731b", "level": "note", "message": {"text": "Very large file: app/routes.py (3929 lines)"}, "properties": {"repobilityId": "27ce1b70513a8ec9", "scanner": "scanner-primary", "fingerprint": "a30e036decc1731b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-7f29f5902b8eb7f6", "level": "note", "message": {"text": "Very large file: app/models.py (1242 lines)"}, "properties": {"repobilityId": "f58fcff20cbc7491", "scanner": "scanner-primary", "fingerprint": "7f29f5902b8eb7f6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6b0a118e4dfd6007", "level": "note", "message": {"text": "Very large file: app/tasks/strategy_tasks.py (4522 lines)"}, "properties": {"repobilityId": "6dabce5815beace5", "scanner": "scanner-primary", "fingerprint": "6b0a118e4dfd6007", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-999b057c976afe7d", "level": "note", "message": {"text": "Very large file: app/services/gatekeeper_learning.py (1282 lines)"}, "properties": {"repobilityId": "311578166ce9b90e", "scanner": "scanner-primary", "fingerprint": "999b057c976afe7d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f27d425092e3b27d", "level": "note", "message": {"text": "Very large file: app/services/strategy_advisor.py (1390 lines)"}, "properties": {"repobilityId": "28f775c470db8c99", "scanner": "scanner-primary", "fingerprint": "f27d425092e3b27d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3473b00888dd57d8", "level": "note", "message": {"text": "Very large file: app/services/gatekeeper_live.py (1797 lines)"}, "properties": {"repobilityId": "b4072aff4847fbee", "scanner": "scanner-primary", "fingerprint": "3473b00888dd57d8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-557ca8a3498c40df", "level": "note", "message": {"text": "Very large file: app/services/llm_prompts/strategy_recommend.py (1230 lines)"}, "properties": {"repobilityId": "8a28c8bb031d3607", "scanner": "scanner-primary", "fingerprint": "557ca8a3498c40df", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ea3b5e389d8c9c0f", "level": "note", "message": {"text": "Low test-to-source ratio"}, "properties": {"repobilityId": "ef7b2552cc00a375", "scanner": "scanner-primary", "fingerprint": "ea3b5e389d8c9c0f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["tests"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "8969bdf566643018", "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": "f6c414946efcad7f", "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": "1d880858179c8dc2", "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": "e0fcee344e1b5ea6", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "note", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "656a9a56a2ac6d14", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "0dacb490e0f108ec", "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": "a4aafbb86291ccf8", "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": "e9519778fb7d70e4", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-8224a29180266ec4", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: frontend/.claude/settings.json"}, "properties": {"repobilityId": "0bb909d32c1c8d31", "scanner": "scanner-primary", "fingerprint": "8224a29180266ec4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/.claude/settings.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-122f91b7f2906dc4", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/settings.json"}, "properties": {"repobilityId": "a2967269048b6a9d", "scanner": "scanner-primary", "fingerprint": "122f91b7f2906dc4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/settings.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4160838378f67ba8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/auth.js:141"}, "properties": {"repobilityId": "f875e70653f0bd9c", "scanner": "scanner-primary", "fingerprint": "4160838378f67ba8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-59e12320d74fc695", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/utils/strategyTypeLabels.js:79"}, "properties": {"repobilityId": "0df4a6d9e76dd415", "scanner": "scanner-primary", "fingerprint": "59e12320d74fc695", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2ddc46cdc25cabb7", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/components/NeuralBackdrop.js:3"}, "properties": {"repobilityId": "e4cce8d1cb9d3962", "scanner": "scanner-primary", "fingerprint": "2ddc46cdc25cabb7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-96302581d6be2bb7", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/src/components/TradingViewWidget.js:3"}, "properties": {"repobilityId": "4fe9202e7815f31f", "scanner": "scanner-primary", "fingerprint": "96302581d6be2bb7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-786fe15169b530f5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/components/ProfitTargetCard.js:130"}, "properties": {"repobilityId": "770154f741fe1ed9", "scanner": "scanner-primary", "fingerprint": "786fe15169b530f5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d9b19017d550fca4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/pages/Trades.js:83"}, "properties": {"repobilityId": "b22001935829a42f", "scanner": "scanner-primary", "fingerprint": "d9b19017d550fca4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f7e0538f96202b0c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/pages/Strategies.js:294"}, "properties": {"repobilityId": "705020a5cb6bb679", "scanner": "scanner-primary", "fingerprint": "f7e0538f96202b0c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f7786bd13161e14d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/pages/Settings.js:126"}, "properties": {"repobilityId": "b72781ebeb1ca2ef", "scanner": "scanner-primary", "fingerprint": "f7786bd13161e14d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b5f2fdf69e344348", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/pages/Dashboard.js:219"}, "properties": {"repobilityId": "e9ed7582da9918fa", "scanner": "scanner-primary", "fingerprint": "b5f2fdf69e344348", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fbe8352ac07e325c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/pages/AdminAuditLog.js:36"}, "properties": {"repobilityId": "9f8005a0f004e7ee", "scanner": "scanner-primary", "fingerprint": "fbe8352ac07e325c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-20741930ff8e0bb3", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/services/okxWebSocket.js:7"}, "properties": {"repobilityId": "fcfd067a7066cc36", "scanner": "scanner-primary", "fingerprint": "20741930ff8e0bb3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-50222afe06a0e098", "level": "note", "message": {"text": "Legacy-named symbol `strategy_synthesize_v2` in scripts/audit_range_menu_mtf.py:17"}, "properties": {"repobilityId": "e34a686b61b43f67", "scanner": "scanner-primary", "fingerprint": "50222afe06a0e098", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-00a4ac8896468582", "level": "note", "message": {"text": "Legacy-named symbol `strategy_synthesize_v2` in scripts/audit_range_menu.py:19"}, "properties": {"repobilityId": "4a31d9fc4cb1fd5b", "scanner": "scanner-primary", "fingerprint": "00a4ac8896468582", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-9e708e9700e53131", "level": "note", "message": {"text": "Legacy-named symbol `stopped_old` in scripts/flow_watchdog.py:386"}, "properties": {"repobilityId": "8d5fe260fcb5034f", "scanner": "scanner-primary", "fingerprint": "9e708e9700e53131", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-54a3e0215dd5e050", "level": "note", "message": {"text": "Legacy-named symbol `seg_old` in scripts/test_segment_mae_regression.py:2"}, "properties": {"repobilityId": "32df1090b596219f", "scanner": "scanner-primary", "fingerprint": "54a3e0215dd5e050", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-825cb9c1b41699de", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/routes.py:2089"}, "properties": {"repobilityId": "bbf34f922459be30", "scanner": "scanner-primary", "fingerprint": "825cb9c1b41699de", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7d1244cb5fd1a35d", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/models.py:747"}, "properties": {"repobilityId": "122a983bdbfc71fd", "scanner": "scanner-primary", "fingerprint": "7d1244cb5fd1a35d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a80c20f8adb992e3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/static/static/js/main.641d6522.js:2"}, "properties": {"repobilityId": "ddd5ba483849f115", "scanner": "scanner-primary", "fingerprint": "a80c20f8adb992e3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-32fb605b2c3fc77d", "level": "note", "message": {"text": "Legacy-named symbol `days_old` in app/tasks/strategy_tasks.py:3234"}, "properties": {"repobilityId": "aa7a35bcd666fd4e", "scanner": "scanner-primary", "fingerprint": "32fb605b2c3fc77d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-3af3d8585688cafa", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/tasks/strategy_tasks.py:1479"}, "properties": {"repobilityId": "0035c659721675d6", "scanner": "scanner-primary", "fingerprint": "3af3d8585688cafa", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-35843d056078f8b2", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/quantcore/engine.py:307"}, "properties": {"repobilityId": "2a686d251d1ecd03", "scanner": "scanner-primary", "fingerprint": "35843d056078f8b2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9b8b48cc26bc73ba", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/services/gatekeeper.py:207"}, "properties": {"repobilityId": "7e07f4488ab32ef2", "scanner": "scanner-primary", "fingerprint": "9b8b48cc26bc73ba", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d3bf3ef7253b6b4f", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/services/hyperliquid_service.py:467"}, "properties": {"repobilityId": "a3f43bf5175d2dc7", "scanner": "scanner-primary", "fingerprint": "d3bf3ef7253b6b4f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ab32bd8fe04c0f2f", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/services/config_service.py:204"}, "properties": {"repobilityId": "f6a434914ddc5a1d", "scanner": "scanner-primary", "fingerprint": "ab32bd8fe04c0f2f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d115b4b33bc39965", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/services/advisor_executor.py:591"}, "properties": {"repobilityId": "39cbfe6799da42e8", "scanner": "scanner-primary", "fingerprint": "d115b4b33bc39965", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d97dc372f1da2ec6", "level": "note", "message": {"text": "Legacy-named symbol `strategy_synthesize_v2` in app/services/gatekeeper_learning.py:8"}, "properties": {"repobilityId": "0112b7101a2e1678", "scanner": "scanner-primary", "fingerprint": "d97dc372f1da2ec6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-f2a1424d5cb92073", "level": "none", "message": {"text": "Commented-code block (9 lines) in app/services/gatekeeper_learning.py:439"}, "properties": {"repobilityId": "bdf82af3f4438bfa", "scanner": "scanner-primary", "fingerprint": "f2a1424d5cb92073", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c674e84460db1b36", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/services/regime_detector.py:95"}, "properties": {"repobilityId": "cb38506f829836c8", "scanner": "scanner-primary", "fingerprint": "c674e84460db1b36", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ca549cdb4695433f", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/services/strategy_advisor.py:493"}, "properties": {"repobilityId": "394b3b83f10844c0", "scanner": "scanner-primary", "fingerprint": "ca549cdb4695433f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ae9dc4125a70fb5b", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/services/gatekeeper_live.py:459"}, "properties": {"repobilityId": "fbd99b7f20345b8d", "scanner": "scanner-primary", "fingerprint": "ae9dc4125a70fb5b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-da8d9d8bbf9f8d3e", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/services/llm_provider.py:210"}, "properties": {"repobilityId": "01d92f7636eb8017", "scanner": "scanner-primary", "fingerprint": "da8d9d8bbf9f8d3e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4dc803a74d75527f", "level": "note", "message": {"text": "Legacy-named symbol `strategy_synthesize_v2` in app/services/candidate_pipeline.py:516"}, "properties": {"repobilityId": "100234bea5b67995", "scanner": "scanner-primary", "fingerprint": "4dc803a74d75527f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-29ec216149409e77", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/services/candidate_pipeline.py:205"}, "properties": {"repobilityId": "1fde75d6259fabc7", "scanner": "scanner-primary", "fingerprint": "29ec216149409e77", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0032769c053cc4ce", "level": "note", "message": {"text": "Legacy-named symbol `synthesize_strategy_v2` in app/services/llm_prompts/strategy_synthesize_v2.py:761"}, "properties": {"repobilityId": "9ce179e37fe2d0d4", "scanner": "scanner-primary", "fingerprint": "0032769c053cc4ce", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-b01ef835bdd1adbb", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/services/llm_prompts/strategy_synthesize_v2.py:748"}, "properties": {"repobilityId": "192630d7289e931b", "scanner": "scanner-primary", "fingerprint": "b01ef835bdd1adbb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f3f1774be2067a8e", "level": "none", "message": {"text": "Commented-code block (8 lines) in app/services/llm_prompts/strategy_recommend.py:797"}, "properties": {"repobilityId": "30a2590aec50e743", "scanner": "scanner-primary", "fingerprint": "f3f1774be2067a8e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-87acb4066071a15a", "level": "note", "message": {"text": "19 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "b1f30c58de7ffb20", "scanner": "scanner-primary", "fingerprint": "87acb4066071a15a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "ab0e5c3324c15e35", "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": "8011ccb5497102eb", "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": "22b57ec3af02de35", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-a0310aec627cfbe3", "level": "note", "message": {"text": "Near-duplicate function bodies in 26 places"}, "properties": {"repobilityId": "de9e0eadf4cf13a3", "scanner": "scanner-primary", "fingerprint": "a0310aec627cfbe3", "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": "6d933eec0c6b7f82", "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": "030da8f981419283", "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": "8d71de0bbdc1c1c4", "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": "95e87fe85fd1f089", "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": "bb333c7317f2297e", "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": "f92a464d6b1cc80c", "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": "215eff0ac9a14da2", "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": "b51a42a1432bab66", "scanner": "scanner-primary", "fingerprint": "02525d39071dd2c7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-7cbad6e44494e8f8", "level": "warning", "message": {"text": "Frontend route `/checkout` has no Link/navigate to it \u2014 frontend/src/App.js"}, "properties": {"repobilityId": "2c0a38b34aee51e2", "scanner": "scanner-primary", "fingerprint": "7cbad6e44494e8f8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-5163a1b673a89537", "level": "warning", "message": {"text": "Frontend route `candidates` has no Link/navigate to it \u2014 frontend/src/App.js"}, "properties": {"repobilityId": "79bfc058b0862831", "scanner": "scanner-primary", "fingerprint": "5163a1b673a89537", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-f5ad3c3c67b81227", "level": "warning", "message": {"text": "Frontend route `audit` has no Link/navigate to it \u2014 frontend/src/App.js"}, "properties": {"repobilityId": "5eefcce3ef6ff8cd", "scanner": "scanner-primary", "fingerprint": "f5ad3c3c67b81227", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-a4cf86336595b9e0", "level": "warning", "message": {"text": "Frontend route `admin/users` has no Link/navigate to it \u2014 frontend/src/App.js"}, "properties": {"repobilityId": "282c0f0ad145d32d", "scanner": "scanner-primary", "fingerprint": "a4cf86336595b9e0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-0ac3e3529f436ea9", "level": "warning", "message": {"text": "Frontend route `admin/users/:id` has no Link/navigate to it \u2014 frontend/src/App.js"}, "properties": {"repobilityId": "948ae6f54923ad83", "scanner": "scanner-primary", "fingerprint": "0ac3e3529f436ea9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-0504042abe1d09ea", "level": "warning", "message": {"text": "Frontend route `admin/revenue` has no Link/navigate to it \u2014 frontend/src/App.js"}, "properties": {"repobilityId": "af63fc09232e070c", "scanner": "scanner-primary", "fingerprint": "0504042abe1d09ea", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-0d38fe2cfb57fc4c", "level": "warning", "message": {"text": "Frontend route `admin/audit` has no Link/navigate to it \u2014 frontend/src/App.js"}, "properties": {"repobilityId": "a74642c2b82845cd", "scanner": "scanner-primary", "fingerprint": "0d38fe2cfb57fc4c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-a93fc349d3a8086a", "level": "error", "message": {"text": "Dangling fetch: POST /api/strategies/${strategy.id}/explain (frontend/src/components/ExplainStrategyDialog.js:23)"}, "properties": {"repobilityId": "b37abeb183188c98", "scanner": "scanner-primary", "fingerprint": "a93fc349d3a8086a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9389e9291dc952cd", "level": "error", "message": {"text": "Dangling fetch: POST /api/me/llm/${provider.id} (frontend/src/components/LlmBindingCard.js:93)"}, "properties": {"repobilityId": "ab8cbce688e6eae9", "scanner": "scanner-primary", "fingerprint": "9389e9291dc952cd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-961fc93dc52dbf1c", "level": "error", "message": {"text": "Dangling fetch: POST /api/me/llm/${provider.id}/test (frontend/src/components/LlmBindingCard.js:114)"}, "properties": {"repobilityId": "f590cef5601260e7", "scanner": "scanner-primary", "fingerprint": "961fc93dc52dbf1c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-564cb5421e9983c8", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/me/llm/${provider.id} (frontend/src/components/LlmBindingCard.js:124)"}, "properties": {"repobilityId": "465b2b3bb649b1e8", "scanner": "scanner-primary", "fingerprint": "564cb5421e9983c8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-44b5a275f8b5271b", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/me/llm/${provider.id} (frontend/src/components/LlmBindingCard.js:137)"}, "properties": {"repobilityId": "f30c652d7822602c", "scanner": "scanner-primary", "fingerprint": "44b5a275f8b5271b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1ff9e03ba9276729", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/me/profit-target/${target.id} (frontend/src/components/ProfitTargetCard.js:98)"}, "properties": {"repobilityId": "a4eb835d55b10922", "scanner": "scanner-primary", "fingerprint": "1ff9e03ba9276729", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fb1f3cb055a1b034", "level": "error", "message": {"text": "Dangling fetch: POST /api/me/profit-target/${t.id}/resume (frontend/src/components/ProfitTargetCard.js:130)"}, "properties": {"repobilityId": "3ffd7df97a4f740c", "scanner": "scanner-primary", "fingerprint": "fb1f3cb055a1b034", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4422d753be0f0641", "level": "note", "message": {"text": "Unused endpoint: ANY /strategies/<int:id>"}, "properties": {"repobilityId": "e3fe89d68e468ea2", "scanner": "scanner-primary", "fingerprint": "4422d753be0f0641", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-aab6d5b22acb5291", "level": "note", "message": {"text": "Unused endpoint: ANY /strategies/<int:id>/start"}, "properties": {"repobilityId": "b3b495fc13a307b3", "scanner": "scanner-primary", "fingerprint": "aab6d5b22acb5291", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-057bc17932f76811", "level": "note", "message": {"text": "Unused endpoint: ANY /strategies/<int:id>/stop"}, "properties": {"repobilityId": "15fa5a15fe9524df", "scanner": "scanner-primary", "fingerprint": "057bc17932f76811", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-087c17920cf2297e", "level": "note", "message": {"text": "Unused endpoint: ANY /strategies/live-state"}, "properties": {"repobilityId": "b12d10305ceb0998", "scanner": "scanner-primary", "fingerprint": "087c17920cf2297e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8d2231be79970ea0", "level": "note", "message": {"text": "Unused endpoint: ANY /strategies/<int:id>/optimize"}, "properties": {"repobilityId": "e434fe22d04a2ddf", "scanner": "scanner-primary", "fingerprint": "8d2231be79970ea0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-370075482c47309b", "level": "note", "message": {"text": "Unused endpoint: ANY /strategies/<int:id>/optimize/latest"}, "properties": {"repobilityId": "6229411729b5767e", "scanner": "scanner-primary", "fingerprint": "370075482c47309b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8826386fcda9309c", "level": "note", "message": {"text": "Unused endpoint: ANY /strategies/<int:id>/apply-params"}, "properties": {"repobilityId": "cabc5761e1b40c13", "scanner": "scanner-primary", "fingerprint": "8826386fcda9309c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3f0600f3584edcf2", "level": "note", "message": {"text": "Unused endpoint: ANY /strategies/<int:id>/fan-out"}, "properties": {"repobilityId": "c7a93236ba1489a0", "scanner": "scanner-primary", "fingerprint": "3f0600f3584edcf2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8d26bdf5d381c3e0", "level": "note", "message": {"text": "Unused endpoint: ANY /advisor/recommendations"}, "properties": {"repobilityId": "50298d9242df9ece", "scanner": "scanner-primary", "fingerprint": "8d26bdf5d381c3e0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7aa5dd360b4a4753", "level": "note", "message": {"text": "Unused endpoint: ANY /advisor/auto-apply/run"}, "properties": {"repobilityId": "9b8aeb90d66946d0", "scanner": "scanner-primary", "fingerprint": "7aa5dd360b4a4753", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-dc4e67b4208ff008", "level": "note", "message": {"text": "Unused endpoint: ANY /advisor/auto-apply/history"}, "properties": {"repobilityId": "da4d046bc5ebbe36", "scanner": "scanner-primary", "fingerprint": "dc4e67b4208ff008", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1c013b47c96917c2", "level": "note", "message": {"text": "Unused endpoint: ANY /me/ai-activity-log"}, "properties": {"repobilityId": "7c33256f4526ee1a", "scanner": "scanner-primary", "fingerprint": "1c013b47c96917c2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-23311427096ad18e", "level": "note", "message": {"text": "Unused endpoint: ANY /strategies/health/check"}, "properties": {"repobilityId": "afebdc3fcb77d6f8", "scanner": "scanner-primary", "fingerprint": "23311427096ad18e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0959adc3ebb825fa", "level": "note", "message": {"text": "Unused endpoint: ANY /strategies/<int:id>/explain"}, "properties": {"repobilityId": "d65c98df3fbf8e00", "scanner": "scanner-primary", "fingerprint": "0959adc3ebb825fa", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a12f9eba8145dd5e", "level": "note", "message": {"text": "Unused endpoint: ANY /me/weekly-review"}, "properties": {"repobilityId": "3af8290be92ecd22", "scanner": "scanner-primary", "fingerprint": "a12f9eba8145dd5e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3f04f669d6c97066", "level": "note", "message": {"text": "Unused endpoint: ANY /me/personal-advice"}, "properties": {"repobilityId": "198023e919b13c4b", "scanner": "scanner-primary", "fingerprint": "3f04f669d6c97066", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a9b9dff55f8467d2", "level": "note", "message": {"text": "Unused endpoint: ANY /candidates/<int:cid>/run-backtest"}, "properties": {"repobilityId": "0d5da92d8601df4a", "scanner": "scanner-primary", "fingerprint": "a9b9dff55f8467d2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-33d0843a40ad0323", "level": "note", "message": {"text": "Unused endpoint: ANY /me/recommendation-explain"}, "properties": {"repobilityId": "17648228724a8878", "scanner": "scanner-primary", "fingerprint": "33d0843a40ad0323", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-82678bde2f28cb19", "level": "note", "message": {"text": "Unused endpoint: ANY /me/diagnose"}, "properties": {"repobilityId": "8c4fe42de812f07a", "scanner": "scanner-primary", "fingerprint": "82678bde2f28cb19", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ac99a0dabd6bca81", "level": "note", "message": {"text": "Unused endpoint: ANY /strategies/<int:id>/retire"}, "properties": {"repobilityId": "15e71db403db28cc", "scanner": "scanner-primary", "fingerprint": "ac99a0dabd6bca81", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c63e3d0668605625", "level": "note", "message": {"text": "Unused endpoint: ANY /strategies/<int:id>/revive"}, "properties": {"repobilityId": "a11eefa27de4c00e", "scanner": "scanner-primary", "fingerprint": "c63e3d0668605625", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6c16a6daa7d97dd4", "level": "note", "message": {"text": "Unused endpoint: ANY /positions"}, "properties": {"repobilityId": "dfd66e0fa3de02e8", "scanner": "scanner-primary", "fingerprint": "6c16a6daa7d97dd4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1988c6ec318664b2", "level": "note", "message": {"text": "Unused endpoint: ANY /pnl/history"}, "properties": {"repobilityId": "0f2bd30349b11921", "scanner": "scanner-primary", "fingerprint": "1988c6ec318664b2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9c5caa8755d8e640", "level": "note", "message": {"text": "Unused endpoint: ANY /pnl/summary"}, "properties": {"repobilityId": "9d5d3de4171cf7af", "scanner": "scanner-primary", "fingerprint": "9c5caa8755d8e640", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-33e83ca6a68cd8e4", "level": "note", "message": {"text": "Unused endpoint: ANY /strategies/<int:id>/backtest"}, "properties": {"repobilityId": "dcb9dad2ad9607b8", "scanner": "scanner-primary", "fingerprint": "33e83ca6a68cd8e4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-40b3657ca040406a", "level": "note", "message": {"text": "Unused endpoint: ANY /strategies/<int:id>/backtest/all"}, "properties": {"repobilityId": "ae1edb3b17877668", "scanner": "scanner-primary", "fingerprint": "40b3657ca040406a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c5ca4a25f152b51f", "level": "note", "message": {"text": "Unused endpoint: ANY /backtests/latest"}, "properties": {"repobilityId": "831fa53f5111a315", "scanner": "scanner-primary", "fingerprint": "c5ca4a25f152b51f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e74b70a6d07df67e", "level": "note", "message": {"text": "Unused endpoint: ANY /backtests/run-all"}, "properties": {"repobilityId": "f4112d70b226e7b9", "scanner": "scanner-primary", "fingerprint": "e74b70a6d07df67e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d2cea53ce99db79d", "level": "note", "message": {"text": "Unused endpoint: ANY /strategies/performance"}, "properties": {"repobilityId": "c705a8086afa75f3", "scanner": "scanner-primary", "fingerprint": "d2cea53ce99db79d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-db34b22f188a7d9b", "level": "note", "message": {"text": "Unused endpoint: ANY /orders"}, "properties": {"repobilityId": "f254486192cf8cab", "scanner": "scanner-primary", "fingerprint": "db34b22f188a7d9b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-882db530ae1d6bf0", "level": "note", "message": {"text": "Unused endpoint: ANY /trades"}, "properties": {"repobilityId": "ef1a45bb815c7b02", "scanner": "scanner-primary", "fingerprint": "882db530ae1d6bf0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d85f36ab84b95a2c", "level": "note", "message": {"text": "Unused endpoint: ANY /account"}, "properties": {"repobilityId": "002b86b369d50950", "scanner": "scanner-primary", "fingerprint": "d85f36ab84b95a2c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-dda924f7632ab5cd", "level": "note", "message": {"text": "Unused endpoint: ANY /market/btc-price"}, "properties": {"repobilityId": "8dd53cbf282aae27", "scanner": "scanner-primary", "fingerprint": "dda924f7632ab5cd", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-17fe06b098ad2c4d", "level": "note", "message": {"text": "Unused endpoint: ANY /symbols"}, "properties": {"repobilityId": "a0f3b2effca510cf", "scanner": "scanner-primary", "fingerprint": "17fe06b098ad2c4d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3ddffd87df593c4e", "level": "note", "message": {"text": "Unused endpoint: ANY /market/<path:symbol>/price"}, "properties": {"repobilityId": "b69fa67bb3cb994a", "scanner": "scanner-primary", "fingerprint": "3ddffd87df593c4e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8074cea46c002363", "level": "note", "message": {"text": "Unused endpoint: ANY /market/<path:symbol>/chart"}, "properties": {"repobilityId": "a992c96b701ca18f", "scanner": "scanner-primary", "fingerprint": "8074cea46c002363", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-879e06bf9de55f45", "level": "note", "message": {"text": "Unused endpoint: ANY /market/btc-chart"}, "properties": {"repobilityId": "33a80015a0425f24", "scanner": "scanner-primary", "fingerprint": "879e06bf9de55f45", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7f6e99abac7185a7", "level": "note", "message": {"text": "Unused endpoint: ANY /reconcile"}, "properties": {"repobilityId": "ae76ec6eedc341c0", "scanner": "scanner-primary", "fingerprint": "7f6e99abac7185a7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cecd400e42d03005", "level": "note", "message": {"text": "Unused endpoint: ANY /anomaly/check"}, "properties": {"repobilityId": "db09e8bf30d3ce81", "scanner": "scanner-primary", "fingerprint": "cecd400e42d03005", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d310c256c33f7aa3", "level": "note", "message": {"text": "Unused endpoint: ANY /killswitch"}, "properties": {"repobilityId": "cd1ed78debfadc06", "scanner": "scanner-primary", "fingerprint": "d310c256c33f7aa3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6647368c0b3b8f99", "level": "note", "message": {"text": "Unused endpoint: ANY /telegram/test"}, "properties": {"repobilityId": "6724b3eed921acd2", "scanner": "scanner-primary", "fingerprint": "6647368c0b3b8f99", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ac23c3dd2f4cd1fc", "level": "note", "message": {"text": "Unused endpoint: ANY /halt"}, "properties": {"repobilityId": "0f53c5863878c202", "scanner": "scanner-primary", "fingerprint": "ac23c3dd2f4cd1fc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7ffcc6a8d132f8f7", "level": "note", "message": {"text": "Unused endpoint: ANY /unhalt"}, "properties": {"repobilityId": "2c7fbd2cac1b9a09", "scanner": "scanner-primary", "fingerprint": "7ffcc6a8d132f8f7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d5093423ec977238", "level": "note", "message": {"text": "Unused endpoint: ANY /halt/check"}, "properties": {"repobilityId": "f07a425769a359ed", "scanner": "scanner-primary", "fingerprint": "d5093423ec977238", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9ef407b1f648fae7", "level": "note", "message": {"text": "Unused endpoint: ANY /gatekeeper/dashboard"}, "properties": {"repobilityId": "611c5618edc1ba3c", "scanner": "scanner-primary", "fingerprint": "9ef407b1f648fae7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0a4ffb346b2104ec", "level": "note", "message": {"text": "Unused endpoint: ANY /manual-order"}, "properties": {"repobilityId": "579846d0c7c9db9f", "scanner": "scanner-primary", "fingerprint": "0a4ffb346b2104ec", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5bcc0f876f7d7016", "level": "note", "message": {"text": "Unused endpoint: ANY /trade-view/<path:symbol>"}, "properties": {"repobilityId": "9202501010062077", "scanner": "scanner-primary", "fingerprint": "5bcc0f876f7d7016", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ee4b623a367eab89", "level": "note", "message": {"text": "Unused endpoint: ANY /gatekeeper/synthesize"}, "properties": {"repobilityId": "0a819e764c3f6769", "scanner": "scanner-primary", "fingerprint": "ee4b623a367eab89", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-54687e99f2c1ed06", "level": "note", "message": {"text": "Unused endpoint: ANY /preflight"}, "properties": {"repobilityId": "7b2293ad2550bfe6", "scanner": "scanner-primary", "fingerprint": "54687e99f2c1ed06", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-01d100bfe37ea5e1", "level": "note", "message": {"text": "Unused endpoint: ANY /simulation/estimate"}, "properties": {"repobilityId": "9d9b4194de5847e5", "scanner": "scanner-primary", "fingerprint": "01d100bfe37ea5e1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}