{"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: shizifan/Analytica", "shortDescription": {"text": "Foundry mined unresolved feedback: shizifan/Analytica"}, "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: shizifan/Analytica\nThread: shizifan/Analytica#9\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: shizifan/Analytica\nThread: shizifan/Analytica#9\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: shizifan/Analytica#9\nRepo: shizifan/Analytica\nIssue/PR number: 9\nGraph consistency label: needs_more_evidence\nNodes: 24\nEdges: 50\nNode types: {'pr_file': 15, 'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'thread_tou"}, "properties": {"scanner": "foundry_dataset", "category": "practices", "severity": "medium", "confidence": 0.7, "cwe": "", "owasp": ""}}, {"id": "foundry_assumption_check", "name": "Foundry mined assumption checks: shizifan/Analytica", "shortDescription": {"text": "Foundry mined assumption checks: shizifan/Analytica"}, "fullDescription": {"text": "Comment chain pattern product: assumption_checks\nRepo: shizifan/Analytica\nThread: shizifan/Analytica#21\nOutcome: claimed_resolved_unverified\nThread label: thread_has_human_issue_and_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_weak_supervision\nChain evidence:\nIssue/PR evidence chain: shizifan/Analytica#21\nRepo: shizifan/Analytica\nThread label: thread_has_human_issue_and_fix_context\nOutcome: claimed_resolved_unverified\nComment count: 1\nLinked commit count: 5\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 19\nLabels: {'agent_instruction_gap': 1}\nPolarities: {'bad': 1}\nChanged file labels: {'api_or_backend': 15, 'source_or_other': 1, 'test_or_ci': 3}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-7c1bb08b31b8e43e\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"agent_instruction_gap\",\n    \"polarity\": \"bad\",\n    \"url\""}, "properties": {"scanner": "foundry_dataset", "category": "practices", "severity": "medium", "confidence": 0.62, "cwe": "", "owasp": ""}}, {"id": "foundry_test_ci_gap", "name": "Foundry mined test ci gap after feedback: shizifan/Analytica", "shortDescription": {"text": "Foundry mined test ci gap after feedback: shizifan/Analytica"}, "fullDescription": {"text": "Graph query export: Feedback exposes missing tests or CI\nQuery id: test_ci_gap_after_feedback\nQuery type: motif_query\nIntent: Hard negatives for feedback/fix chains without adequate guardrails.\nMotif: test_ci_gap_after_feedback\nTraining usage: hard_negative\nGraph gold label: needs_more_evidence\nRepo: shizifan/Analytica\nThread: shizifan/Analytica#9\nEvidence:\nGraph motif: Feedback or fix context exposes missing test/CI guardrails\nMotif id: test_ci_gap_after_feedback\nPolarity: bad\nTraining usage: hard_negative\nSeverity: high\nRepo: shizifan/Analytica\nThread: shizifan/Analytica#9\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: shizifan/Analytica#9\nRepo: shizifan/Analytica\nIssue/PR number: 9\nGraph consistency label: needs_more_evidence\nNodes: 24\nEdges: 50\nNode types: {'pr_file': 15, 'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'thread_touches_file': 15, 'com"}, "properties": {"scanner": "foundry_dataset", "category": "testing", "severity": "high", "confidence": 0.78, "cwe": "", "owasp": ""}}, {"id": "foundry_schema_ui_api_gap", "name": "Foundry mined schema ui api mismatch: shizifan/Analytica", "shortDescription": {"text": "Foundry mined schema ui api mismatch: shizifan/Analytica"}, "fullDescription": {"text": "Graph query export: Schema, UI, and API mismatch\nQuery id: schema_ui_api_mismatch\nQuery type: motif_query\nIntent: Assumption-check examples for data-path consistency across layers.\nMotif: schema_ui_api_mismatch\nTraining usage: assumption_check\nGraph gold label: needs_more_evidence\nRepo: shizifan/Analytica\nThread: shizifan/Analytica#15\nEvidence:\nGraph motif: Schema, UI, and API evidence do not line up\nMotif id: schema_ui_api_mismatch\nPolarity: bad\nTraining usage: assumption_check\nSeverity: high\nRepo: shizifan/Analytica\nThread: shizifan/Analytica#15\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: shizifan/Analytica#15\nRepo: shizifan/Analytica\nIssue/PR number: 15\nGraph consistency label: needs_more_evidence\nNodes: 10\nEdges: 14\nNode types: {'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'pr_file': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'chain_has_link_quality': 3, 'repo_has_thread': 1, 'thread"}, "properties": {"scanner": "foundry_dataset", "category": "quality", "severity": "high", "confidence": 0.76, "cwe": "", "owasp": ""}}, {"id": "foundry_bad_chain", "name": "Foundry mined bad chains: shizifan/Analytica", "shortDescription": {"text": "Foundry mined bad chains: shizifan/Analytica"}, "fullDescription": {"text": "Comment chain pattern product: bad_chains\nRepo: shizifan/Analytica\nThread: shizifan/Analytica#9\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: shizifan/Analytica#9\nRepo: shizifan/Analytica\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: 15\nLabels: {'test_ci_gap': 1}\nPolarities: {'bad': 1}\nChanged file labels: {'test_or_ci': 13, 'source_or_other': 2}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-3503274d14e06fe0\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"test_ci_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://git"}, "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: shizifan/Analytica", "shortDescription": {"text": "Foundry mined security auth guardrail gaps: shizifan/Analytica"}, "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: shizifan/Analytica\nThread: shizifan/Analytica#7\nEvidence:\nGraph motif: Security/auth change without enough guardrails\nMotif id: security_auth_without_guardrails\nPolarity: bad\nTraining usage: assumption_check\nSeverity: critical\nRepo: shizifan/Analytica\nThread: shizifan/Analytica#7\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: shizifan/Analytica#7\nRepo: shizifan/Analytica\nIssue/PR number: 7\nGraph consistency label: needs_more_evidence\nNodes: 11\nEdges: 17\nNode types: {'link_quality': 3, 'pr_file': 2, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'chai"}, "properties": {"scanner": "foundry_dataset", "category": "auth", "severity": "critical", "confidence": 0.78, "cwe": "", "owasp": ""}}, {"id": "foundry_fake_real_gap", "name": "Foundry mined mock as real or placeholder: shizifan/Analytica", "shortDescription": {"text": "Foundry mined mock as real or placeholder: shizifan/Analytica"}, "fullDescription": {"text": "Graph query export: Mock, sample, placeholder, or self-attested behavior treated as real\nQuery id: mock_as_real_or_placeholder\nQuery type: motif_query\nIntent: Hard negatives for fake completeness and missing real data paths.\nMotif: mock_as_real_or_placeholder\nTraining usage: hard_negative\nGraph gold label: weak_supervision_needs_review\nRepo: shizifan/Analytica\nThread: shizifan/Analytica#8\nEvidence:\nGraph motif: Mock, sample, placeholder, or self-attested behavior treated as real\nMotif id: mock_as_real_or_placeholder\nPolarity: bad\nTraining usage: hard_negative\nSeverity: critical\nRepo: shizifan/Analytica\nThread: shizifan/Analytica#8\nGraph gold label: weak_supervision_needs_review\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: shizifan/Analytica#8\nRepo: shizifan/Analytica\nIssue/PR number: 8\nGraph consistency label: weak_supervision_needs_review\nNodes: 16\nEdges: 30\nNode types: {'pr_file': 6, 'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'com"}, "properties": {"scanner": "foundry_dataset", "category": "practices", "severity": "critical", "confidence": 0.82, "cwe": "", "owasp": ""}}, {"id": "scanner-4cab6dcd7cd03f87", "name": "Possibly dead Python function: build_monthly_tp_series", "shortDescription": {"text": "Possibly dead Python function: build_monthly_tp_series"}, "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-5dd422266d35f317", "name": "Possibly dead Python function: asset_base", "shortDescription": {"text": "Possibly dead Python function: asset_base"}, "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-5c0b97f1aaf4e4da", "name": "Possibly dead Python function: cmd_status", "shortDescription": {"text": "Possibly dead Python function: cmd_status"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5884f59a01a5cd1f", "name": "Possibly dead Python function: cmd_mark", "shortDescription": {"text": "Possibly dead Python function: cmd_mark"}, "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-68050b4a7e1bd293", "name": "Possibly dead Python function: cmd_show", "shortDescription": {"text": "Possibly dead Python function: cmd_show"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e837362292953978", "name": "Possibly dead Python function: cmd_needs_fix", "shortDescription": {"text": "Possibly dead Python function: cmd_needs_fix"}, "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-0e5fbf06f91ff42f", "name": "Possibly dead Python function: cmd_reset", "shortDescription": {"text": "Possibly dead Python function: cmd_reset"}, "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-e7b57170074816f9", "name": "Possibly dead Python function: replacer", "shortDescription": {"text": "Possibly dead Python function: replacer"}, "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-d432da8a439b64b2", "name": "Possibly dead Python function: emp_perception_node", "shortDescription": {"text": "Possibly dead Python function: emp_perception_node"}, "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-af8ee2ff41b35308", "name": "Possibly dead Python function: emp_planning_node", "shortDescription": {"text": "Possibly dead Python function: emp_planning_node"}, "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-a64b58552f283570", "name": "Possibly dead Python function: emp_execution_node", "shortDescription": {"text": "Possibly dead Python function: emp_execution_node"}, "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-3406f4127d5f304d", "name": "Possibly dead Python function: emp_reflection_node", "shortDescription": {"text": "Possibly dead Python function: emp_reflection_node"}, "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-d7e9ec7593bf1b2d", "name": "Possibly dead Python function: run_employee_stream", "shortDescription": {"text": "Possibly dead Python function: run_employee_stream"}, "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-fb75e48d386465a8", "name": "Possibly dead Python function: is_valid_tool", "shortDescription": {"text": "Possibly dead Python function: is_valid_tool"}, "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-b467a45d52d96ca2", "name": "Possibly dead Python function: execution_node", "shortDescription": {"text": "Possibly dead Python function: execution_node"}, "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-8bcf9c648ed649b0", "name": "Possibly dead Python function: perception_node", "shortDescription": {"text": "Possibly dead Python function: perception_node"}, "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-39a03e9427c6679d", "name": "Possibly dead Python function: execution_node", "shortDescription": {"text": "Possibly dead Python function: execution_node"}, "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-f0178718122bf6b9", "name": "Possibly dead Python function: reflection_node", "shortDescription": {"text": "Possibly dead Python function: reflection_node"}, "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-7fa6e3a1f17f3666", "name": "Possibly dead Python function: route_after_perception", "shortDescription": {"text": "Possibly dead Python function: route_after_perception"}, "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-83b3fac75763ce95", "name": "Possibly dead Python function: route_after_planning", "shortDescription": {"text": "Possibly dead Python function: route_after_planning"}, "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-c202e721d263e582", "name": "Possibly dead Python function: route_after_execution", "shortDescription": {"text": "Possibly dead Python function: route_after_execution"}, "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-5702cacb0da95c6e", "name": "Possibly dead Python function: after_reflection", "shortDescription": {"text": "Possibly dead Python function: after_reflection"}, "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-5f10748666332f35", "name": "Possibly dead Python function: reflection_node", "shortDescription": {"text": "Possibly dead Python function: reflection_node"}, "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-e586f2bacac68a31", "name": "Possibly dead Python function: is_valid_endpoint", "shortDescription": {"text": "Possibly dead Python function: is_valid_endpoint"}, "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-f0cd4f0fa097c3e3", "name": "Possibly dead Python function: list_endpoints", "shortDescription": {"text": "Possibly dead Python function: list_endpoints"}, "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-07d2007fd20cf07f", "name": "Possibly dead Python function: purge_empty_sessions", "shortDescription": {"text": "Possibly dead Python function: purge_empty_sessions"}, "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-e241bf98ef9ac9d9", "name": "Possibly dead Python function: record_api_call", "shortDescription": {"text": "Possibly dead Python function: record_api_call"}, "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-664340ef593e41cc", "name": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/EmployeeCard.tsx:29", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/EmployeeCard.tsx:29"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "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-ce1fec675e91d850", "name": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim-bookworm", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim-bookworm"}, "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-e2f1cddf8cbe14d3", "name": "Dockerfile pipes a remote installer into a shell", "shortDescription": {"text": "Dockerfile pipes a remote installer into a shell"}, "fullDescription": {"text": "Executing downloaded code during image build gives the remote endpoint build-time code execution. Prefer pinned packages or verify downloaded installers by checksum/signature."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "high", "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-9005e487c8a82dfc", "name": "Insecure pattern 'document_write' in frontend/src/components/ui/FileResultCard.tsx:98", "shortDescription": {"text": "Insecure pattern 'document_write' in frontend/src/components/ui/FileResultCard.tsx:98"}, "fullDescription": {"text": "Found a known-risky pattern (document_write). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "low", "confidence": 1.0}}, {"id": "scanner-adcb147fbc1d5e08", "name": "Insecure pattern 'tls_verify_false' in mock_server/prod_mock_align_check.py:114", "shortDescription": {"text": "Insecure pattern 'tls_verify_false' in mock_server/prod_mock_align_check.py:114"}, "fullDescription": {"text": "Found a known-risky pattern (tls_verify_false). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ff7e8fb8d3aca84e", "name": "Insecure pattern 'tls_verify_false' in mock_server/prod_api_validator.py:4375", "shortDescription": {"text": "Insecure pattern 'tls_verify_false' in mock_server/prod_api_validator.py:4375"}, "fullDescription": {"text": "Found a known-risky pattern (tls_verify_false). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-816a9e4ef4c9ade0", "name": "Insecure pattern 'tls_verify_false' in tools/r8_empty_data_audit.py:177", "shortDescription": {"text": "Insecure pattern 'tls_verify_false' in tools/r8_empty_data_audit.py:177"}, "fullDescription": {"text": "Found a known-risky pattern (tls_verify_false). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d556c3044648e670", "name": "Insecure pattern 'tls_verify_false' in tools/probe_question_validator.py:238", "shortDescription": {"text": "Insecure pattern 'tls_verify_false' in tools/probe_question_validator.py:238"}, "fullDescription": {"text": "Found a known-risky pattern (tls_verify_false). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8bdeeec6cd8a1417", "name": "Insecure pattern 'tls_verify_false' in tools/api_recovery_empty_probe.py:560", "shortDescription": {"text": "Insecure pattern 'tls_verify_false' in tools/api_recovery_empty_probe.py:560"}, "fullDescription": {"text": "Found a known-risky pattern (tls_verify_false). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d483c0f9b300eb8c", "name": "Insecure pattern 'tls_verify_false' in tools/api_recovery_check.py:280", "shortDescription": {"text": "Insecure pattern 'tls_verify_false' in tools/api_recovery_check.py:280"}, "fullDescription": {"text": "Found a known-risky pattern (tls_verify_false). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-19d69229d30f98fc", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c7fb097ea9c408d7", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "astral-sh/setup-uv@v3 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-497f452e61757eae", "name": "Very large file: mock_server/prod_api_validator.py (4757 lines)", "shortDescription": {"text": "Very large file: mock_server/prod_api_validator.py (4757 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-9b28a33b955d3315", "name": "Very large file: mock_server/mock_server_all.py (4175 lines)", "shortDescription": {"text": "Very large file: mock_server/mock_server_all.py (4175 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-9d70fec196d3802d", "name": "Very large file: tools/_gen_patches_inline.py (863 lines)", "shortDescription": {"text": "Very large file: tools/_gen_patches_inline.py (863 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-279036b4b1f3e3be", "name": "Very large file: backend/main.py (2404 lines)", "shortDescription": {"text": "Very large file: backend/main.py (2404 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-b997dcb0a934bcde", "name": "Very large file: backend/agent/perception.py (1654 lines)", "shortDescription": {"text": "Very large file: backend/agent/perception.py (1654 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-616e964a39d67cb9", "name": "Very large file: backend/agent/planning.py (4097 lines)", "shortDescription": {"text": "Very large file: backend/agent/planning.py (4097 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-39add01aff9672c2", "name": "Very large file: backend/agent/execution.py (2033 lines)", "shortDescription": {"text": "Very large file: backend/agent/execution.py (2033 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-4d8a37665c94beea", "name": "Very large file: backend/agent/graph.py (1379 lines)", "shortDescription": {"text": "Very large file: backend/agent/graph.py (1379 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-721559ece3ee9e4e", "name": "Very large file: backend/agent/api_registry.py (1226 lines)", "shortDescription": {"text": "Very large file: backend/agent/api_registry.py (1226 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-c5e77a2085ade91b", "name": "Very large file: backend/tools/report/_outline_planner.py (2613 lines)", "shortDescription": {"text": "Very large file: backend/tools/report/_outline_planner.py (2613 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a9b21f6e8885a3a2", "name": "Node manifest has dependencies but no lockfile: backend/tools/report/_pptxgen_bridge/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: backend/tools/report/_pptxgen_bridge/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "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 682 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 223 placeholder/mock markers across 46 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, lockfile. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-da043ea832df9666", "name": "Commented-code block (5 lines) in frontend/src/__tests__/session-management.test.ts:288", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/__tests__/session-management.test.ts:288"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fbfc2267bcdb4a6b", "name": "Commented-code block (5 lines) in frontend/src/components/ui/admin/skillMeta.ts:29", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/components/ui/admin/skillMeta.ts:29"}, "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-2ea722b95ab19be2", "name": "Commented-code block (7 lines) in frontend/src/components/ui/AgentPane/TraceTab.tsx:147", "shortDescription": {"text": "Commented-code block (7 lines) in frontend/src/components/ui/AgentPane/TraceTab.tsx:147"}, "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-4bf96f414156fb94", "name": "Commented-code block (6 lines) in frontend/src/pages/ChatPageV2.tsx:243", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/src/pages/ChatPageV2.tsx:243"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-912f57a623e16ec4", "name": "Commented-code block (5 lines) in frontend/src/hooks/useWebSocket.ts:91", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/hooks/useWebSocket.ts:91"}, "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-0e9780dae5264bea", "name": "Commented-code block (5 lines) in mock_server/prod_mock_align_check.py:306", "shortDescription": {"text": "Commented-code block (5 lines) in mock_server/prod_mock_align_check.py:306"}, "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-a2f9ab5294a3d622", "name": "Legacy-named symbol `prod_vs_mock_comparison_v2` in mock_server/prod_api_validator.py:3738", "shortDescription": {"text": "Legacy-named symbol `prod_vs_mock_comparison_v2` in mock_server/prod_api_validator.py:3738"}, "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-a58af162778632d5", "name": "Commented-code block (10 lines) in mock_server/mock_server_all.py:36", "shortDescription": {"text": "Commented-code block (10 lines) in mock_server/mock_server_all.py:36"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c704b0a5e6d220c6", "name": "Blocking `httpx.post(...)` inside `async def run` \u2014 spec/api-governance/sinan_three_source_alignment/tools/seed_json_to_", "shortDescription": {"text": "Blocking `httpx.post(...)` inside `async def run` \u2014 spec/api-governance/sinan_three_source_alignment/tools/seed_json_to_db.py:246"}, "fullDescription": {"text": "Sync I/O inside an async function blocks the event loop. While `httpx.post(...)` is running, *all* other coroutines on this loop are paused \u2014 silent throughput collapse under concurrency. Use the async equivalent (`httpx.AsyncClient`, `asyncio.sleep`, `aiofiles`) or wrap with `await asyncio.to_thread(...)`."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0983c6525741ea05", "name": "Commented-code block (10 lines) in tests/conftest.py:389", "shortDescription": {"text": "Commented-code block (10 lines) in tests/conftest.py:389"}, "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-d2f5e08e6553b81f", "name": "Commented-code block (7 lines) in tests/integration/test_e2e_browser_flow.py:184", "shortDescription": {"text": "Commented-code block (7 lines) in tests/integration/test_e2e_browser_flow.py:184"}, "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-9441b66bce4389a9", "name": "Commented-code block (6 lines) in tests/integration/test_endpoint_selection_quality.py:28", "shortDescription": {"text": "Commented-code block (6 lines) in tests/integration/test_endpoint_selection_quality.py:28"}, "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-c2ea1fb4b8f2ccd1", "name": "Commented-code block (5 lines) in tests/unit/test_multiturn_history.py:196", "shortDescription": {"text": "Commented-code block (5 lines) in tests/unit/test_multiturn_history.py:196"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ed2ec3e1fff7daee", "name": "Commented-code block (5 lines) in tests/unit/test_session_workspace.py:335", "shortDescription": {"text": "Commented-code block (5 lines) in tests/unit/test_session_workspace.py:335"}, "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-4af3a224acf8d59b", "name": "Commented-code block (6 lines) in tests/contract/test_round11_step4_questions.py:260", "shortDescription": {"text": "Commented-code block (6 lines) in tests/contract/test_round11_step4_questions.py:260"}, "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-8c6fd0002b8e954a", "name": "Legacy-named symbol `test_data_granularity_meaning_byte_equivalent_to_legacy` in tests/contract/test_perception_slot_mea", "shortDescription": {"text": "Legacy-named symbol `test_data_granularity_meaning_byte_equivalent_to_legacy` in tests/contract/test_perception_slot_meanings_registry_derived.py:33"}, "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-587b1c8a0fd6d5c2", "name": "Legacy-named symbol `test_summary_stats_with_singleton_list_falls_back_to_legacy` in tests/contract/test_v2_l22_analysis", "shortDescription": {"text": "Legacy-named symbol `test_summary_stats_with_singleton_list_falls_back_to_legacy` in tests/contract/test_v2_l22_analysis_modules.py:89"}, "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-82246de933849482", "name": "Commented-code block (8 lines) in tests/contract/test_node5_genericity_acceptance.py:66", "shortDescription": {"text": "Commented-code block (8 lines) in tests/contract/test_node5_genericity_acceptance.py:66"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3b11fcdee37076c2", "name": "Commented-code block (8 lines) in tests/probe/runner.py:99", "shortDescription": {"text": "Commented-code block (8 lines) in tests/probe/runner.py:99"}, "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-c35c10c0b917ebbe", "name": "Network/subprocess call without timeout or try/except \u2014 scripts/api_governance_weekly_report.py:28", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/api_governance_weekly_report.py:28"}, "fullDescription": {"text": "`subprocess.check_output(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c8faeb84e2ba9053", "name": "Commented-code block (5 lines) in tools/generate_registry_review.py:64", "shortDescription": {"text": "Commented-code block (5 lines) in tools/generate_registry_review.py:64"}, "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-00ca9a1a2c618601", "name": "Legacy-named symbol `api_deprecated` in tools/api_registry_patches_gen.py:23", "shortDescription": {"text": "Legacy-named symbol `api_deprecated` in tools/api_registry_patches_gen.py:23"}, "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-98832f6024ecfb7b", "name": "Commented-code block (5 lines) in tools/merge_drafts_into_registry.py:120", "shortDescription": {"text": "Commented-code block (5 lines) in tools/merge_drafts_into_registry.py:120"}, "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-2a9c399532f7f8bb", "name": "Commented-code block (7 lines) in tools/gen_e2e_l2_corpus.py:46", "shortDescription": {"text": "Commented-code block (7 lines) in tools/gen_e2e_l2_corpus.py:46"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-900e36df86e783f7", "name": "Blocking `httpx.post(...)` inside `async def run` \u2014 tools/seed_json_to_db.py:452", "shortDescription": {"text": "Blocking `httpx.post(...)` inside `async def run` \u2014 tools/seed_json_to_db.py:452"}, "fullDescription": {"text": "Sync I/O inside an async function blocks the event loop. While `httpx.post(...)` is running, *all* other coroutines on this loop are paused \u2014 silent throughput collapse under concurrency. Use the async equivalent (`httpx.AsyncClient`, `asyncio.sleep`, `aiofiles`) or wrap with `await asyncio.to_thread(...)`."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ed314bf7786c56f2", "name": "Legacy-named symbol `no_backup` in tools/sync_registry.py:248", "shortDescription": {"text": "Legacy-named symbol `no_backup` in tools/sync_registry.py:248"}, "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-bd655d8eeb8a16c6", "name": "Legacy-named symbol `skipped_deprecated` in tools/sync_excel_to_json.py:57", "shortDescription": {"text": "Legacy-named symbol `skipped_deprecated` in tools/sync_excel_to_json.py:57"}, "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-a55da05f4ddb0107", "name": "Legacy-named symbol `load_deprecated` in tools/probe_question_validator.py:58", "shortDescription": {"text": "Legacy-named symbol `load_deprecated` in tools/probe_question_validator.py:58"}, "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-33c8024414a653ea", "name": "Legacy-named symbol `api_deprecated` in tools/api_recovery_check.py:67", "shortDescription": {"text": "Legacy-named symbol `api_deprecated` in tools/api_recovery_check.py:67"}, "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-0ff755b370bcd8a1", "name": "Commented-code block (5 lines) in backend/config.py:27", "shortDescription": {"text": "Commented-code block (5 lines) in backend/config.py:27"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e1bba35111866448", "name": "Legacy-named symbol `model_copy` in backend/main.py:564", "shortDescription": {"text": "Legacy-named symbol `model_copy` in backend/main.py:564"}, "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-65d8ff3c9b24b0dc", "name": "Commented-code block (5 lines) in backend/main.py:109", "shortDescription": {"text": "Commented-code block (5 lines) in backend/main.py:109"}, "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-b5af0653c8e4e300", "name": "Commented-code block (6 lines) in backend/employees/graph_factory.py:154", "shortDescription": {"text": "Commented-code block (6 lines) in backend/employees/graph_factory.py:154"}, "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-59c411d79ef8edc0", "name": "Commented-code block (5 lines) in backend/employees/manager.py:83", "shortDescription": {"text": "Commented-code block (5 lines) in backend/employees/manager.py:83"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6ead6ef7b2088971", "name": "Commented-code block (5 lines) in backend/models/schemas.py:134", "shortDescription": {"text": "Commented-code block (5 lines) in backend/models/schemas.py:134"}, "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-a70a225b1e0a1ff2", "name": "Commented-code block (5 lines) in backend/auth/routes.py:129", "shortDescription": {"text": "Commented-code block (5 lines) in backend/auth/routes.py:129"}, "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-57120931b81294fe", "name": "Commented-code block (6 lines) in backend/agent/perception.py:346", "shortDescription": {"text": "Commented-code block (6 lines) in backend/agent/perception.py:346"}, "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-b71ee8a9510a3360", "name": "Legacy-named symbol `model_copy` in backend/agent/planning.py:3814", "shortDescription": {"text": "Legacy-named symbol `model_copy` in backend/agent/planning.py:3814"}, "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-6c048af9912fd445", "name": "Commented-code block (6 lines) in backend/agent/planning.py:58", "shortDescription": {"text": "Commented-code block (6 lines) in backend/agent/planning.py:58"}, "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-d36fe7b36de64647", "name": "Commented-code block (10 lines) in backend/agent/execution.py:67", "shortDescription": {"text": "Commented-code block (10 lines) in backend/agent/execution.py:67"}, "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-838ae6130fbd3716", "name": "Commented-code block (5 lines) in backend/agent/graph.py:89", "shortDescription": {"text": "Commented-code block (5 lines) in backend/agent/graph.py:89"}, "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-721e8365fe69fb6a", "name": "Commented-code block (5 lines) in backend/agent/_param_display.py:31", "shortDescription": {"text": "Commented-code block (5 lines) in backend/agent/_param_display.py:31"}, "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-53ba58498bbcafb5", "name": "Commented-code block (5 lines) in backend/agent/api_registry.py:25", "shortDescription": {"text": "Commented-code block (5 lines) in backend/agent/api_registry.py:25"}, "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-0c11ae673710dcc6", "name": "Commented-code block (5 lines) in backend/memory/session_workspace.py:52", "shortDescription": {"text": "Commented-code block (5 lines) in backend/memory/session_workspace.py:52"}, "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-3c6e9a3677e30deb", "name": "Commented-code block (5 lines) in backend/memory/artifact_store.py:241", "shortDescription": {"text": "Commented-code block (5 lines) in backend/memory/artifact_store.py:241"}, "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-13cb3884be9352e3", "name": "Commented-code block (7 lines) in backend/tools/_llm.py:196", "shortDescription": {"text": "Commented-code block (7 lines) in backend/tools/_llm.py:196"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5c213b4f6fd4d448", "name": "Commented-code block (5 lines) in backend/tools/visualization/chart_line.py:213", "shortDescription": {"text": "Commented-code block (5 lines) in backend/tools/visualization/chart_line.py:213"}, "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-84c911ebe5f8c605", "name": "Commented-code block (7 lines) in backend/tools/visualization/chart_bar.py:176", "shortDescription": {"text": "Commented-code block (7 lines) in backend/tools/visualization/chart_bar.py:176"}, "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-c1d7fa1ecc5f1edd", "name": "Commented-code block (5 lines) in backend/tools/visualization/chart_waterfall.py:23", "shortDescription": {"text": "Commented-code block (5 lines) in backend/tools/visualization/chart_waterfall.py:23"}, "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-41b596cb8ea95e20", "name": "Commented-code block (5 lines) in backend/tools/visualization/chart_wrapper.py:42", "shortDescription": {"text": "Commented-code block (5 lines) in backend/tools/visualization/chart_wrapper.py:42"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bd49117346bb95c7", "name": "Commented-code block (6 lines) in backend/tools/_recovery/data_fetch/dimension_value.py:69", "shortDescription": {"text": "Commented-code block (6 lines) in backend/tools/_recovery/data_fetch/dimension_value.py:69"}, "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-4112536c983e30bc", "name": "Commented-code block (7 lines) in backend/tools/analysis/descriptive.py:686", "shortDescription": {"text": "Commented-code block (7 lines) in backend/tools/analysis/descriptive.py:686"}, "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-e9e01c4b77484db9", "name": "Commented-code block (5 lines) in backend/tools/analysis/_metric_resolve.py:20", "shortDescription": {"text": "Commented-code block (5 lines) in backend/tools/analysis/_metric_resolve.py:20"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5a95a6bfef340da5", "name": "Commented-code block (5 lines) in backend/tools/analysis/prediction.py:53", "shortDescription": {"text": "Commented-code block (5 lines) in backend/tools/analysis/prediction.py:53"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5034126664b19710", "name": "Commented-code block (5 lines) in backend/tools/analysis/anomaly.py:338", "shortDescription": {"text": "Commented-code block (5 lines) in backend/tools/analysis/anomaly.py:338"}, "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-f8b6fcfc7e0afd08", "name": "Legacy-named symbol `has_v2` in backend/tools/report/_content_collector.py:442", "shortDescription": {"text": "Legacy-named symbol `has_v2` in backend/tools/report/_content_collector.py:442"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-15aca36bf0571fc4", "name": "Commented-code block (5 lines) in backend/tools/report/_content_collector.py:190", "shortDescription": {"text": "Commented-code block (5 lines) in backend/tools/report/_content_collector.py:190"}, "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-88b2d654be6168c8", "name": "Commented-code block (5 lines) in backend/tools/report/_source_attribution.py:128", "shortDescription": {"text": "Commented-code block (5 lines) in backend/tools/report/_source_attribution.py:128"}, "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-42fed9fdcfc1aee1", "name": "Commented-code block (5 lines) in backend/tools/report/_theme.py:48", "shortDescription": {"text": "Commented-code block (5 lines) in backend/tools/report/_theme.py:48"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9b512f900742778e", "name": "Commented-code block (6 lines) in backend/tools/report/_outline.py:85", "shortDescription": {"text": "Commented-code block (6 lines) in backend/tools/report/_outline.py:85"}, "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-ab495f0dd1e83127", "name": "Commented-code block (5 lines) in backend/tools/report/html_gen.py:34", "shortDescription": {"text": "Commented-code block (5 lines) in backend/tools/report/html_gen.py:34"}, "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-b1c905e169aac7dc", "name": "Legacy-named symbol `_outline_legacy` in backend/tools/report/_outline_planner.py:229", "shortDescription": {"text": "Legacy-named symbol `_outline_legacy` in backend/tools/report/_outline_planner.py:229"}, "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-5a0209fe064e336b", "name": "Commented-code block (9 lines) in backend/tools/report/_outline_planner.py:192", "shortDescription": {"text": "Commented-code block (9 lines) in backend/tools/report/_outline_planner.py:192"}, "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-6112055c04561a0d", "name": "Stub function `emit_kpi_strip` (body is just `pass`/`return`) \u2014 backend/tools/report/_block_renderer.py:139", "shortDescription": {"text": "Stub function `emit_kpi_strip` (body is just `pass`/`return`) \u2014 backend/tools/report/_block_renderer.py:139"}, "fullDescription": {"text": "Likely an AI scaffold that was never filled in. Remove or implement."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f4f4cd9e02cb1f03", "name": "Commented-code block (5 lines) in backend/tools/report/_renderers/html.py:443", "shortDescription": {"text": "Commented-code block (5 lines) in backend/tools/report/_renderers/html.py:443"}, "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-661b4e36ea92bfca", "name": "Stub function `emit_kpi_row` (body is just `pass`/`return`) \u2014 backend/tools/report/_renderers/html.py:708", "shortDescription": {"text": "Stub function `emit_kpi_row` (body is just `pass`/`return`) \u2014 backend/tools/report/_renderers/html.py:708"}, "fullDescription": {"text": "Likely an AI scaffold that was never filled in. Remove or implement."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bff3c01f58acfdf6", "name": "Commented-code block (5 lines) in migrations/scripts/seed_employees_from_yaml.py:167", "shortDescription": {"text": "Commented-code block (5 lines) in migrations/scripts/seed_employees_from_yaml.py:167"}, "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-43468593ee099ce4", "name": "Commented-code block (7 lines) in migrations/scripts/update_employee_faqs.py:160", "shortDescription": {"text": "Commented-code block (7 lines) in migrations/scripts/update_employee_faqs.py:160"}, "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-98362fc5b0257367", "name": "Stub function `downgrade` (body is just `pass`/`return`) \u2014 migrations/versions/20260421_0003_sessions_employee_id.py:30", "shortDescription": {"text": "Stub function `downgrade` (body is just `pass`/`return`) \u2014 migrations/versions/20260421_0003_sessions_employee_id.py:30"}, "fullDescription": {"text": "Likely an AI scaffold that was never filled in. Remove or implement."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-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: `ANALYTICA_ADMIN_PASS`, `ANALYTICA_ADMIN_TOKEN`, `ANALYTICA_ADMIN_USER`, `BUILD_TIME`, `DEV`, `GIT_COMMIT`, `INITIAL_ADMIN_PASSWORD`, `INITIAL_ADMIN_USERNAME` + 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:\nspec/api-governance/sinan_three_source_alignment/tools/endpoint_status.py:load_excel, tools/endpoint_status.py:load_excel\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-cf017baa675bf381", "name": "Frontend route `login` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `login` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "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-481976aed5bad5d3", "name": "Frontend route `change-password` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `change-password` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "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-edd06ec9b39fbf15", "name": "Frontend route `employees` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `employees` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "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-c99fd46ac570e13f", "name": "Frontend route `admin` has no Link/navigate to it \u2014 frontend/src/components/auth/ProtectedRoute.tsx", "shortDescription": {"text": "Frontend route `admin` has no Link/navigate to it \u2014 frontend/src/components/auth/ProtectedRoute.tsx"}, "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-8778311d686c09fb", "name": "Frontend route `apis` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `apis` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "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-b343609e9c1339b1", "name": "Frontend route `tools` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `tools` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "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-d50cd9f98effb738", "name": "Frontend route `skills` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `skills` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "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-8ee6d8e14c564284", "name": "Frontend route `domains` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `domains` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "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-4e7cb12763e46cd2", "name": "Frontend route `memories` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `memories` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "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-ed2bc19f149c2b14", "name": "Frontend route `audit` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `audit` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "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-ad96af978bb7b1be", "name": "Frontend route `users` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `users` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "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-862ca3874c5e2d76", "name": "Frontend route `roles` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `roles` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "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-f5e4dbad8159a988", "name": "Frontend route `grant-requests` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `grant-requests` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "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-a8fca01763ccc6af", "name": "Unused endpoint: GET /api/gateway/getWeatherForecast", "shortDescription": {"text": "Unused endpoint: GET /api/gateway/getWeatherForecast"}, "fullDescription": {"text": "`mock_server/mock_server_all.py` declares `GET /api/gateway/getWeatherForecast` 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-70d505f06101f7fe", "name": "Unused endpoint: GET /api/gateway/getRealTimeWeather", "shortDescription": {"text": "Unused endpoint: GET /api/gateway/getRealTimeWeather"}, "fullDescription": {"text": "`mock_server/mock_server_all.py` declares `GET /api/gateway/getRealTimeWeather` 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-d1dd7f9b0a085de8", "name": "Unused endpoint: GET /api/gateway/getTrafficControl", "shortDescription": {"text": "Unused endpoint: GET /api/gateway/getTrafficControl"}, "fullDescription": {"text": "`mock_server/mock_server_all.py` declares `GET /api/gateway/getTrafficControl` 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-e36414fc5d12165f", "name": "Unused endpoint: GET /api/gateway/getKeyVesselList", "shortDescription": {"text": "Unused endpoint: GET /api/gateway/getKeyVesselList"}, "fullDescription": {"text": "`mock_server/mock_server_all.py` declares `GET /api/gateway/getKeyVesselList` 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-98c3da2a9f3dc943", "name": "Unused endpoint: GET /api/gateway/getThroughputAndTargetThroughputTon", "shortDescription": {"text": "Unused endpoint: GET /api/gateway/getThroughputAndTargetThroughputTon"}, "fullDescription": {"text": "`mock_server/mock_server_all.py` declares `GET /api/gateway/getThroughputAndTargetThroughputTon` 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-160eee92d3488ca5", "name": "Unused endpoint: GET /api/gateway/getThroughputAndTargetThroughputTeu", "shortDescription": {"text": "Unused endpoint: GET /api/gateway/getThroughputAndTargetThroughputTeu"}, "fullDescription": {"text": "`mock_server/mock_server_all.py` declares `GET /api/gateway/getThroughputAndTargetThroughputTeu` 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-5be8cbdcb6516208", "name": "Unused endpoint: GET /api/gateway/getSingleShipRate", "shortDescription": {"text": "Unused endpoint: GET /api/gateway/getSingleShipRate"}, "fullDescription": {"text": "`mock_server/mock_server_all.py` declares `GET /api/gateway/getSingleShipRate` 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-6c1dbd85655fb89d", "name": "Unused endpoint: GET /api/gateway/getBerthOccupancyRateByRegion", "shortDescription": {"text": "Unused endpoint: GET /api/gateway/getBerthOccupancyRateByRegion"}, "fullDescription": {"text": "`mock_server/mock_server_all.py` declares `GET /api/gateway/getBerthOccupancyRateByRegion` 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-a06fe0483d654061", "name": "Unused endpoint: GET /api/gateway/getBerthOccupancyRateByBusinessType", "shortDescription": {"text": "Unused endpoint: GET /api/gateway/getBerthOccupancyRateByBusinessType"}, "fullDescription": {"text": "`mock_server/mock_server_all.py` declares `GET /api/gateway/getBerthOccupancyRateByBusinessType` 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-d7e8235a30696368", "name": "Unused endpoint: GET /api/gateway/getImportantCargoPortInventoryByRegion", "shortDescription": {"text": "Unused endpoint: GET /api/gateway/getImportantCargoPortInventoryByRegion"}, "fullDescription": {"text": "`mock_server/mock_server_all.py` declares `GET /api/gateway/getImportantCargoPortInventoryByRegion` 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-2b8af55babdb0bfd", "name": "Unused endpoint: GET /api/gateway/getContainerAndVehicleTrade", "shortDescription": {"text": "Unused endpoint: GET /api/gateway/getContainerAndVehicleTrade"}, "fullDescription": {"text": "`mock_server/mock_server_all.py` declares `GET /api/gateway/getContainerAndVehicleTrade` 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-1eb50a243628402c", "name": "Unused endpoint: GET /api/gateway/getImportantCargoPortInventoryByBusinessType", "shortDescription": {"text": "Unused endpoint: GET /api/gateway/getImportantCargoPortInventoryByBusinessType"}, "fullDescription": {"text": "`mock_server/mock_server_all.py` declares `GET /api/gateway/getImportantCargoPortInventoryByBusinessType` 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-fd33543440a7fe68", "name": "Unused endpoint: GET /api/gateway/getThroughputAnalysisNonContainer", "shortDescription": {"text": "Unused endpoint: GET /api/gateway/getThroughputAnalysisNonContainer"}, "fullDescription": {"text": "`mock_server/mock_server_all.py` declares `GET /api/gateway/getThroughputAnalysisNonContainer` 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-5d7610930fc5e71e", "name": "Unused endpoint: GET /api/gateway/getThroughputAnalysisContainer", "shortDescription": {"text": "Unused endpoint: GET /api/gateway/getThroughputAnalysisContainer"}, "fullDescription": {"text": "`mock_server/mock_server_all.py` declares `GET /api/gateway/getThroughputAnalysisContainer` 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-cb92a41b8f66309e", "name": "Unused endpoint: GET /api/gateway/getThroughputAnalysisByYear", "shortDescription": {"text": "Unused endpoint: GET /api/gateway/getThroughputAnalysisByYear"}, "fullDescription": {"text": "`mock_server/mock_server_all.py` declares `GET /api/gateway/getThroughputAnalysisByYear` 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-d5155166f17008e0", "name": "Unused endpoint: GET /api/gateway/getContainerThroughputAnalysisByYear", "shortDescription": {"text": "Unused endpoint: GET /api/gateway/getContainerThroughputAnalysisByYear"}, "fullDescription": {"text": "`mock_server/mock_server_all.py` declares `GET /api/gateway/getContainerThroughputAnalysisByYear` 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-941731dd14694e69", "name": "Unused endpoint: GET /api/gateway/getOilsChemBreakBulkByBusinessType", "shortDescription": {"text": "Unused endpoint: GET /api/gateway/getOilsChemBreakBulkByBusinessType"}, "fullDescription": {"text": "`mock_server/mock_server_all.py` declares `GET /api/gateway/getOilsChemBreakBulkByBusinessType` 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-d3d23638228fce89", "name": "Unused endpoint: GET /api/gateway/getRoroByBusinessType", "shortDescription": {"text": "Unused endpoint: GET /api/gateway/getRoroByBusinessType"}, "fullDescription": {"text": "`mock_server/mock_server_all.py` declares `GET /api/gateway/getRoroByBusinessType` 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-1cdf805ccbd979e3", "name": "Unused endpoint: GET /api/gateway/getContainerByBusinessType", "shortDescription": {"text": "Unused endpoint: GET /api/gateway/getContainerByBusinessType"}, "fullDescription": {"text": "`mock_server/mock_server_all.py` declares `GET /api/gateway/getContainerByBusinessType` 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-2909a6f5f9e15269", "name": "Unused endpoint: GET /api/gateway/getCompanyStatisticsBusinessType", "shortDescription": {"text": "Unused endpoint: GET /api/gateway/getCompanyStatisticsBusinessType"}, "fullDescription": {"text": "`mock_server/mock_server_all.py` declares `GET /api/gateway/getCompanyStatisticsBusinessType` 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-3a4057b01e5ca85e", "name": "Unused endpoint: GET /api/gateway/getThroughputAnalysisYoyMomByYear", "shortDescription": {"text": "Unused endpoint: GET /api/gateway/getThroughputAnalysisYoyMomByYear"}, "fullDescription": {"text": "`mock_server/mock_server_all.py` declares `GET /api/gateway/getThroughputAnalysisYoyMomByYear` 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-7ee45b1569efdfc2", "name": "Unused endpoint: GET /api/gateway/getContainerAnalysisYoyMomByYear", "shortDescription": {"text": "Unused endpoint: GET /api/gateway/getContainerAnalysisYoyMomByYear"}, "fullDescription": {"text": "`mock_server/mock_server_all.py` declares `GET /api/gateway/getContainerAnalysisYoyMomByYear` 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-3542a926f0ec7eeb", "name": "Unused endpoint: GET /api/gateway/getBusinessTypeThroughputAnalysisYoyMomByYear", "shortDescription": {"text": "Unused endpoint: GET /api/gateway/getBusinessTypeThroughputAnalysisYoyMomByYear"}, "fullDescription": {"text": "`mock_server/mock_server_all.py` declares `GET /api/gateway/getBusinessTypeThroughputAnalysisYoyMomByYear` 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-9a2248b24ee70b62", "name": "Unused endpoint: GET /api/gateway/getThroughputAnalysisYoyMomByMonth", "shortDescription": {"text": "Unused endpoint: GET /api/gateway/getThroughputAnalysisYoyMomByMonth"}, "fullDescription": {"text": "`mock_server/mock_server_all.py` declares `GET /api/gateway/getThroughputAnalysisYoyMomByMonth` 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-e0b3a45ed8228811", "name": "Unused endpoint: GET /api/gateway/getThroughputAnalysisYoyMomByDay", "shortDescription": {"text": "Unused endpoint: GET /api/gateway/getThroughputAnalysisYoyMomByDay"}, "fullDescription": {"text": "`mock_server/mock_server_all.py` declares `GET /api/gateway/getThroughputAnalysisYoyMomByDay` 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-6e68effe9a4c268c", "name": "Unused endpoint: GET /api/gateway/getBusinessTypeThroughputAnalysisYoyMomByMonth", "shortDescription": {"text": "Unused endpoint: GET /api/gateway/getBusinessTypeThroughputAnalysisYoyMomByMonth"}, "fullDescription": {"text": "`mock_server/mock_server_all.py` declares `GET /api/gateway/getBusinessTypeThroughputAnalysisYoyMomByMonth` 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-dabacd8335a4dd49", "name": "Unused endpoint: GET /api/gateway/getBusinessTypeThroughputAnalysisYoyMomByDay", "shortDescription": {"text": "Unused endpoint: GET /api/gateway/getBusinessTypeThroughputAnalysisYoyMomByDay"}, "fullDescription": {"text": "`mock_server/mock_server_all.py` declares `GET /api/gateway/getBusinessTypeThroughputAnalysisYoyMomByDay` 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-9cb2e2db0beb3cfd", "name": "Unused endpoint: GET /api/gateway/getShipStatisticsByRegion", "shortDescription": {"text": "Unused endpoint: GET /api/gateway/getShipStatisticsByRegion"}, "fullDescription": {"text": "`mock_server/mock_server_all.py` declares `GET /api/gateway/getShipStatisticsByRegion` 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-75f535facf82cf7e", "name": "Unused endpoint: GET /api/gateway/getShipStatisticsByBusinessType", "shortDescription": {"text": "Unused endpoint: GET /api/gateway/getShipStatisticsByBusinessType"}, "fullDescription": {"text": "`mock_server/mock_server_all.py` declares `GET /api/gateway/getShipStatisticsByBusinessType` 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-6a7906a37314f8c5", "name": "Unused endpoint: GET /api/gateway/getBusinessSegmentBranch", "shortDescription": {"text": "Unused endpoint: GET /api/gateway/getBusinessSegmentBranch"}, "fullDescription": {"text": "`mock_server/mock_server_all.py` declares `GET /api/gateway/getBusinessSegmentBranch` 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-f18115f5f499807b", "name": "Unused endpoint: GET /api/gateway/getPortCompanyThroughput", "shortDescription": {"text": "Unused endpoint: GET /api/gateway/getPortCompanyThroughput"}, "fullDescription": {"text": "`mock_server/mock_server_all.py` declares `GET /api/gateway/getPortCompanyThroughput` 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-863e8c40df6f3dbc", "name": "Unused endpoint: GET /api/gateway/getThroughputMonthlyTrend", "shortDescription": {"text": "Unused endpoint: GET /api/gateway/getThroughputMonthlyTrend"}, "fullDescription": {"text": "`mock_server/mock_server_all.py` declares `GET /api/gateway/getThroughputMonthlyTrend` 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-ef4bfdcf9ef5fd7c", "name": "Unused endpoint: GET /api/gateway/getDailyPortInventoryData", "shortDescription": {"text": "Unused endpoint: GET /api/gateway/getDailyPortInventoryData"}, "fullDescription": {"text": "`mock_server/mock_server_all.py` declares `GET /api/gateway/getDailyPortInventoryData` 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-792685988b34d290", "name": "Unused endpoint: GET /api/gateway/getPortInventoryTrend", "shortDescription": {"text": "Unused endpoint: GET /api/gateway/getPortInventoryTrend"}, "fullDescription": {"text": "`mock_server/mock_server_all.py` declares `GET /api/gateway/getPortInventoryTrend` 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-8ad58c39495114d2", "name": "Unused endpoint: GET /api/gateway/getVesselOperationEfficiency", "shortDescription": {"text": "Unused endpoint: GET /api/gateway/getVesselOperationEfficiency"}, "fullDescription": {"text": "`mock_server/mock_server_all.py` declares `GET /api/gateway/getVesselOperationEfficiency` 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-8a9cfe531e80e791", "name": "Unused endpoint: GET /api/gateway/getVesselOperationEfficiencyTrend", "shortDescription": {"text": "Unused endpoint: GET /api/gateway/getVesselOperationEfficiencyTrend"}, "fullDescription": {"text": "`mock_server/mock_server_all.py` declares `GET /api/gateway/getVesselOperationEfficiencyTrend` 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-85b602ebf1b08228", "name": "Unused endpoint: GET /api/gateway/getBerthOccupancyRate", "shortDescription": {"text": "Unused endpoint: GET /api/gateway/getBerthOccupancyRate"}, "fullDescription": {"text": "`mock_server/mock_server_all.py` declares `GET /api/gateway/getBerthOccupancyRate` 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-49654ee526ed8443", "name": "Unused endpoint: GET /api/gateway/getTotalBerthDuration", "shortDescription": {"text": "Unused endpoint: GET /api/gateway/getTotalBerthDuration"}, "fullDescription": {"text": "`mock_server/mock_server_all.py` declares `GET /api/gateway/getTotalBerthDuration` 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-1892d8e783ac84e7", "name": "Unused endpoint: GET /api/gateway/getBerthList", "shortDescription": {"text": "Unused endpoint: GET /api/gateway/getBerthList"}, "fullDescription": {"text": "`mock_server/mock_server_all.py` declares `GET /api/gateway/getBerthList` 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-a404795f59fba452", "name": "Unused endpoint: GET /api/gateway/getShipOperationDynamic", "shortDescription": {"text": "Unused endpoint: GET /api/gateway/getShipOperationDynamic"}, "fullDescription": {"text": "`mock_server/mock_server_all.py` declares `GET /api/gateway/getShipOperationDynamic` 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-0c8f18e3b43d3a18", "name": "Unused endpoint: GET /api/gateway/getProductViewShipOperationRateAvg", "shortDescription": {"text": "Unused endpoint: GET /api/gateway/getProductViewShipOperationRateAvg"}, "fullDescription": {"text": "`mock_server/mock_server_all.py` declares `GET /api/gateway/getProductViewShipOperationRateAvg` 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-83608924ab665979", "name": "Unused endpoint: GET /api/gateway/getProductViewShipOperationRateTrend", "shortDescription": {"text": "Unused endpoint: GET /api/gateway/getProductViewShipOperationRateTrend"}, "fullDescription": {"text": "`mock_server/mock_server_all.py` declares `GET /api/gateway/getProductViewShipOperationRateTrend` 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-9e1435e781cb3aab", "name": "Unused endpoint: GET /api/gateway/getPersonalCenterCargoThroughput", "shortDescription": {"text": "Unused endpoint: GET /api/gateway/getPersonalCenterCargoThroughput"}, "fullDescription": {"text": "`mock_server/mock_server_all.py` declares `GET /api/gateway/getPersonalCenterCargoThroughput` 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-ed27bdfba0d914ae", "name": "Unused endpoint: GET /api/gateway/getPersonalCenterMonthCargoThroughput", "shortDescription": {"text": "Unused endpoint: GET /api/gateway/getPersonalCenterMonthCargoThroughput"}, "fullDescription": {"text": "`mock_server/mock_server_all.py` declares `GET /api/gateway/getPersonalCenterMonthCargoThroughput` 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-345a0a33a4c6a51a", "name": "Unused endpoint: GET /api/gateway/getPersonalCenterYearCargoThroughput", "shortDescription": {"text": "Unused endpoint: GET /api/gateway/getPersonalCenterYearCargoThroughput"}, "fullDescription": {"text": "`mock_server/mock_server_all.py` declares `GET /api/gateway/getPersonalCenterYearCargoThroughput` 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-b64024c6305399fe", "name": "Unused endpoint: GET /api/gateway/getPersonalCenterYearCargoThroughputTrend", "shortDescription": {"text": "Unused endpoint: GET /api/gateway/getPersonalCenterYearCargoThroughputTrend"}, "fullDescription": {"text": "`mock_server/mock_server_all.py` declares `GET /api/gateway/getPersonalCenterYearCargoThroughputTrend` 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-180b9d13e42ae70f", "name": "Unused endpoint: GET /api/gateway/getProdShipDynNum", "shortDescription": {"text": "Unused endpoint: GET /api/gateway/getProdShipDynNum"}, "fullDescription": {"text": "`mock_server/mock_server_all.py` declares `GET /api/gateway/getProdShipDynNum` 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-a8531d141cc76761", "name": "Unused endpoint: GET /api/gateway/getProdShipDesc", "shortDescription": {"text": "Unused endpoint: GET /api/gateway/getProdShipDesc"}, "fullDescription": {"text": "`mock_server/mock_server_all.py` declares `GET /api/gateway/getProdShipDesc` 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-9072055f42878025", "name": "Unused endpoint: GET /api/gateway/getMonthlyThroughput", "shortDescription": {"text": "Unused endpoint: GET /api/gateway/getMonthlyThroughput"}, "fullDescription": {"text": "`mock_server/mock_server_all.py` declares `GET /api/gateway/getMonthlyThroughput` 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-0925e2188725dcad", "name": "Unused endpoint: GET /api/gateway/getMonthlyZoneThroughput", "shortDescription": {"text": "Unused endpoint: GET /api/gateway/getMonthlyZoneThroughput"}, "fullDescription": {"text": "`mock_server/mock_server_all.py` declares `GET /api/gateway/getMonthlyZoneThroughput` 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/19572"}, "properties": {"repository": "shizifan/Analytica", "repoUrl": "https://github.com/shizifan/Analytica", "branch": "main"}, "results": [{"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: shizifan/Analytica"}, "properties": {"repobilityId": 467189, "scanner": "foundry_dataset", "fingerprint": "82725fd603d7ae4336765ed00d9b2e1cebdc2cc5e91866a9ee7a539c512b2eb2", "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": {"test_or_ci": 13, "test_ci_gap": 1, "source_or_other": 2, "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": 50, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "thread_touches_file": 15, "chain_has_link_quality": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 1, "comment_chain_touches_file": 12, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 24, "node_types": {"repo": 1, "thread": 1, "comment": 1, "pr_file": 15, "fix_outcome": 1, "issue_chain": 1, "link_quality": 3, "comment_chain": 1}, "query_type": "motif_query", "thread_key": "shizifan/Analytica#9", "issue_number": "9", "quality_tiers": {"unresolved": 3}, "repo_full_name": "shizifan/Analytica", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-5baac970e1ec22e5", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {"test_or_ci": 52, "source_or_other": 8}}, "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: shizifan/Analytica\nThread: shizifan/Analytica#9\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: shizifan/Analytica\nThread: shizifan/Analytica#9\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: shizifan/Analytica#9\nRepo: shizifan/Analytica\nIssue/PR number: 9\nGraph consistency label: needs_more_evidence\nNodes: 24\nEdges: 50\nNode types: {'pr_file': 15, 'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'thread_touches_file': 15, 'comment_chain_touches_file': 12, 'issue_chain_touches_file': 12, '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: {'test_or_ci': 13, 'not_resolved_or_not_observed': 3, 'source_or_other': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'test_ci_gap': 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/shizifan/Analytica", "source_id": "graph-query-motif_query-25a6d35af1f7d4c6", "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": "shizifan/Analytica", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: shizifan/Analytica"}, "properties": {"repobilityId": 467188, "scanner": "foundry_dataset", "fingerprint": "3f988ea9ad02cec53982a5a1b33cef94ca6dc8afdfd353f86d17b1443bf64532", "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": {"ui_or_frontend": 2, "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": 17, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "thread_touches_file": 2, "chain_has_link_quality": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 2, "thread_has_comment_chain": 1, "comment_chain_touches_file": 2, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 11, "node_types": {"repo": 1, "thread": 1, "comment": 1, "pr_file": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 3, "comment_chain": 1}, "query_type": "motif_query", "thread_key": "shizifan/Analytica#7", "issue_number": "7", "quality_tiers": {"unresolved": 3}, "repo_full_name": "shizifan/Analytica", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-ef7955676e31c75c", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {"ui_or_frontend": 8}}, "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: shizifan/Analytica\nThread: shizifan/Analytica#7\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: shizifan/Analytica\nThread: shizifan/Analytica#7\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: shizifan/Analytica#7\nRepo: shizifan/Analytica\nIssue/PR number: 7\nGraph consistency label: needs_more_evidence\nNodes: 11\nEdges: 17\nNode types: {'link_quality': 3, 'pr_file': 2, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'chain_has_link_quality': 3, 'thread_touches_file': 2, 'comment_chain_touches_file': 2, 'issue_chain_touches_file': 2, '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, 'ui_or_frontend': 2, '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/shizifan/Analytica", "source_id": "graph-query-motif_query-26ed7fda6ee4d996", "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": "shizifan/Analytica", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: shizifan/Analytica"}, "properties": {"repobilityId": 467187, "scanner": "foundry_dataset", "fingerprint": "6ad42563f670c06d7eabbe77468da1b4c573eb84338c862085de59684912291a", "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": {"test_or_ci": 3, "api_or_backend": 6, "ui_or_frontend": 3, "agent_instruction_gap": 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": 47, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "thread_touches_file": 12, "chain_has_link_quality": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 1, "comment_chain_touches_file": 12, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 21, "node_types": {"repo": 1, "thread": 1, "comment": 1, "pr_file": 12, "fix_outcome": 1, "issue_chain": 1, "link_quality": 3, "comment_chain": 1}, "query_type": "motif_query", "thread_key": "shizifan/Analytica#4", "issue_number": "4", "quality_tiers": {"unresolved": 3}, "repo_full_name": "shizifan/Analytica", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-0d6d7bc04d179aa9", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {"test_or_ci": 12, "api_or_backend": 24, "ui_or_frontend": 12}}, "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: shizifan/Analytica\nThread: shizifan/Analytica#4\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: shizifan/Analytica\nThread: shizifan/Analytica#4\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: shizifan/Analytica#4\nRepo: shizifan/Analytica\nIssue/PR number: 4\nGraph consistency label: needs_more_evidence\nNodes: 21\nEdges: 47\nNode types: {'pr_file': 12, 'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'thread_touches_file': 12, 'comment_chain_touches_file': 12, 'issue_chain_touches_file': 12, '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: {'api_or_backend': 6, 'ui_or_frontend': 3, 'test_or_ci': 3, 'not_resolved_or_not_observed': 3, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'agent_instruction_gap': 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/shizifan/Analytica", "source_id": "graph-query-motif_query-274371d925d49aea", "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": "shizifan/Analytica", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: shizifan/Analytica"}, "properties": {"repobilityId": 467186, "scanner": "foundry_dataset", "fingerprint": "0064a4e5be6fc3c2959f01d02daf475b5a4f47ee245c971e5c94a6250283f119", "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": {"test_or_ci": 3, "api_or_backend": 2, "schema_or_data": 1, "source_or_other": 1, "agent_instruction_gap": 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": 32, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "thread_touches_file": 7, "chain_has_link_quality": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 7, "thread_has_comment_chain": 1, "comment_chain_touches_file": 7, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 16, "node_types": {"repo": 1, "thread": 1, "comment": 1, "pr_file": 7, "fix_outcome": 1, "issue_chain": 1, "link_quality": 3, "comment_chain": 1}, "query_type": "motif_query", "thread_key": "shizifan/Analytica#3", "issue_number": "3", "quality_tiers": {"unresolved": 3}, "repo_full_name": "shizifan/Analytica", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-fd801fa78cde42a4", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {"test_or_ci": 12, "api_or_backend": 8, "schema_or_data": 4, "source_or_other": 4}}, "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: shizifan/Analytica\nThread: shizifan/Analytica#3\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: shizifan/Analytica\nThread: shizifan/Analytica#3\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: shizifan/Analytica#3\nRepo: shizifan/Analytica\nIssue/PR number: 3\nGraph consistency label: needs_more_evidence\nNodes: 16\nEdges: 32\nNode types: {'pr_file': 7, 'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'thread_touches_file': 7, 'comment_chain_touches_file': 7, 'issue_chain_touches_file': 7, '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: {'test_or_ci': 3, 'not_resolved_or_not_observed': 3, 'api_or_backend': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'agent_instruction_gap': 1, 'source_or_other': 1, 'schema_or_data': 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/shizifan/Analytica", "source_id": "graph-query-motif_query-0a140d4c316678d1", "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": "shizifan/Analytica", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: shizifan/Analytica"}, "properties": {"repobilityId": 467185, "scanner": "foundry_dataset", "fingerprint": "a583cbcd53f2762b6ba5bff58b89ac41fa71efb88b64dd8d298c21f80aa64fea", "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": {"test_or_ci": 2, "test_ci_gap": 1, "api_or_backend": 5, "ui_or_frontend": 10, "dependency_or_build": 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": 53, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "thread_touches_file": 18, "chain_has_link_quality": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 1, "comment_chain_touches_file": 12, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 27, "node_types": {"repo": 1, "thread": 1, "comment": 1, "pr_file": 18, "fix_outcome": 1, "issue_chain": 1, "link_quality": 3, "comment_chain": 1}, "query_type": "motif_query", "thread_key": "shizifan/Analytica#2", "issue_number": "2", "quality_tiers": {"unresolved": 3}, "repo_full_name": "shizifan/Analytica", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-e42e3cb19e6b0d8d", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {"test_or_ci": 8, "api_or_backend": 20, "ui_or_frontend": 40, "dependency_or_build": 4}}, "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: shizifan/Analytica\nThread: shizifan/Analytica#2\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: shizifan/Analytica\nThread: shizifan/Analytica#2\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: shizifan/Analytica#2\nRepo: shizifan/Analytica\nIssue/PR number: 2\nGraph consistency label: needs_more_evidence\nNodes: 27\nEdges: 53\nNode types: {'pr_file': 18, 'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'thread_touches_file': 18, 'comment_chain_touches_file': 12, 'issue_chain_touches_file': 12, '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: {'ui_or_frontend': 10, 'api_or_backend': 5, 'not_resolved_or_not_observed': 3, 'test_or_ci': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'test_ci_gap': 1, 'dependency_or_build': 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/shizifan/Analytica", "source_id": "graph-query-motif_query-7d55cd8a2729c5df", "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": "shizifan/Analytica", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: shizifan/Analytica"}, "properties": {"repobilityId": 467184, "scanner": "foundry_dataset", "fingerprint": "4bdcd125f530a956b49180043e6a9fa5671fe92b0be4bd3def6c5d4b103ef910", "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": {"test_or_ci": 11, "api_or_backend": 10, "schema_or_data": 1, "ui_or_frontend": 6, "source_or_other": 1, "agent_instruction_gap": 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": 64, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "thread_touches_file": 29, "chain_has_link_quality": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 1, "comment_chain_touches_file": 12, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 38, "node_types": {"repo": 1, "thread": 1, "comment": 1, "pr_file": 29, "fix_outcome": 1, "issue_chain": 1, "link_quality": 3, "comment_chain": 1}, "query_type": "motif_query", "thread_key": "shizifan/Analytica#19", "issue_number": "19", "quality_tiers": {"unresolved": 3}, "repo_full_name": "shizifan/Analytica", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-16375eaaa41aef21", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {"test_or_ci": 44, "api_or_backend": 40, "schema_or_data": 4, "ui_or_frontend": 24, "source_or_other": 4}}, "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: shizifan/Analytica\nThread: shizifan/Analytica#19\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: shizifan/Analytica\nThread: shizifan/Analytica#19\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: shizifan/Analytica#19\nRepo: shizifan/Analytica\nIssue/PR number: 19\nGraph consistency label: needs_more_evidence\nNodes: 38\nEdges: 64\nNode types: {'pr_file': 29, 'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'thread_touches_file': 29, 'comment_chain_touches_file': 12, 'issue_chain_touches_file': 12, '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: {'test_or_ci': 11, 'api_or_backend': 10, 'ui_or_frontend': 6, 'not_resolved_or_not_observed': 3, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'agent_instruction_gap': 1, 'schema_or_data': 1, 'source_or_other': 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/shizifan/Analytica", "source_id": "graph-query-motif_query-b263b7ec61fe9459", "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": "shizifan/Analytica", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: shizifan/Analytica"}, "properties": {"repobilityId": 467183, "scanner": "foundry_dataset", "fingerprint": "fb5b52c6c3af5638c69277b264e57cea1b8759e71a9a68687bf6293424b7dd3b", "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": {"test_or_ci": 1, "test_ci_gap": 1, "api_or_backend": 2, "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": 20, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "thread_touches_file": 3, "chain_has_link_quality": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 3, "thread_has_comment_chain": 1, "comment_chain_touches_file": 3, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 12, "node_types": {"repo": 1, "thread": 1, "comment": 1, "pr_file": 3, "fix_outcome": 1, "issue_chain": 1, "link_quality": 3, "comment_chain": 1}, "query_type": "motif_query", "thread_key": "shizifan/Analytica#18", "issue_number": "18", "quality_tiers": {"unresolved": 3}, "repo_full_name": "shizifan/Analytica", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-5de82c7026d8f2bb", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {"test_or_ci": 4, "api_or_backend": 8}}, "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: shizifan/Analytica\nThread: shizifan/Analytica#18\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: shizifan/Analytica\nThread: shizifan/Analytica#18\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: shizifan/Analytica#18\nRepo: shizifan/Analytica\nIssue/PR number: 18\nGraph consistency label: needs_more_evidence\nNodes: 12\nEdges: 20\nNode types: {'pr_file': 3, 'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'thread_touches_file': 3, 'comment_chain_touches_file': 3, 'chain_has_link_quality': 3, 'issue_chain_touches_file': 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, 'api_or_backend': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'test_ci_gap': 1, 'test_or_ci': 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/shizifan/Analytica", "source_id": "graph-query-motif_query-b07c44d40845070d", "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": "shizifan/Analytica", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: shizifan/Analytica"}, "properties": {"repobilityId": 467182, "scanner": "foundry_dataset", "fingerprint": "666f7f4d2f44d87744d08a26ef142b922ff4ee20317c332be9f246b47da4bd95", "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": {"test_or_ci": 1, "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": 14, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "thread_touches_file": 1, "chain_has_link_quality": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 1, "thread_has_comment_chain": 1, "comment_chain_touches_file": 1, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 10, "node_types": {"repo": 1, "thread": 1, "comment": 1, "pr_file": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 3, "comment_chain": 1}, "query_type": "motif_query", "thread_key": "shizifan/Analytica#17", "issue_number": "17", "quality_tiers": {"unresolved": 3}, "repo_full_name": "shizifan/Analytica", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-725bd05470b51142", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {"test_or_ci": 4}}, "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: shizifan/Analytica\nThread: shizifan/Analytica#17\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: shizifan/Analytica\nThread: shizifan/Analytica#17\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: shizifan/Analytica#17\nRepo: shizifan/Analytica\nIssue/PR number: 17\nGraph consistency label: needs_more_evidence\nNodes: 10\nEdges: 14\nNode types: {'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'pr_file': 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_touches_file': 1, 'thread_has_comment_chain': 1, 'comment_has_chain': 1, 'comment_chain_touches_file': 1, 'thread_has_issue_chain': 1, 'issue_chain_has_comment_chain': 1, 'issue_chain_touches_file': 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, 'test_or_ci': 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/shizifan/Analytica", "source_id": "graph-query-motif_query-edb7e720d5924837", "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": "shizifan/Analytica", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: shizifan/Analytica"}, "properties": {"repobilityId": 467181, "scanner": "foundry_dataset", "fingerprint": "b0a8ce72c65037e9a0a55dee426543ab85f5afae558ca7a293c459fb7a5f8ee3", "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": {"test_or_ci": 2, "api_integration_gap": 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": 17, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "thread_touches_file": 2, "chain_has_link_quality": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 2, "thread_has_comment_chain": 1, "comment_chain_touches_file": 2, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 11, "node_types": {"repo": 1, "thread": 1, "comment": 1, "pr_file": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 3, "comment_chain": 1}, "query_type": "motif_query", "thread_key": "shizifan/Analytica#16", "issue_number": "16", "quality_tiers": {"unresolved": 3}, "repo_full_name": "shizifan/Analytica", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-af25465b9f947666", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {"test_or_ci": 8}}, "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: shizifan/Analytica\nThread: shizifan/Analytica#16\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: shizifan/Analytica\nThread: shizifan/Analytica#16\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: shizifan/Analytica#16\nRepo: shizifan/Analytica\nIssue/PR number: 16\nGraph consistency label: needs_more_evidence\nNodes: 11\nEdges: 17\nNode types: {'link_quality': 3, 'pr_file': 2, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'chain_has_link_quality': 3, 'thread_touches_file': 2, 'comment_chain_touches_file': 2, 'issue_chain_touches_file': 2, '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, 'test_or_ci': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'api_integration_gap': 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/shizifan/Analytica", "source_id": "graph-query-motif_query-4a592237cf70b15a", "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": "shizifan/Analytica", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: shizifan/Analytica"}, "properties": {"repobilityId": 467180, "scanner": "foundry_dataset", "fingerprint": "e90ce99034e9c5f7837a18f347b43fae67795bf1702e8136beb3cf221c5ea952", "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": {"test_or_ci": 1, "data_schema_persistence": 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": 14, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "thread_touches_file": 1, "chain_has_link_quality": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 1, "thread_has_comment_chain": 1, "comment_chain_touches_file": 1, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 10, "node_types": {"repo": 1, "thread": 1, "comment": 1, "pr_file": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 3, "comment_chain": 1}, "query_type": "motif_query", "thread_key": "shizifan/Analytica#15", "issue_number": "15", "quality_tiers": {"unresolved": 3}, "repo_full_name": "shizifan/Analytica", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-4d8bbfe74eee0a7b", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {"test_or_ci": 4}}, "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: shizifan/Analytica\nThread: shizifan/Analytica#15\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: shizifan/Analytica\nThread: shizifan/Analytica#15\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: shizifan/Analytica#15\nRepo: shizifan/Analytica\nIssue/PR number: 15\nGraph consistency label: needs_more_evidence\nNodes: 10\nEdges: 14\nNode types: {'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'pr_file': 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_touches_file': 1, 'thread_has_comment_chain': 1, 'comment_has_chain': 1, 'comment_chain_touches_file': 1, 'thread_has_issue_chain': 1, 'issue_chain_has_comment_chain': 1, 'issue_chain_touches_file': 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, 'data_schema_persistence': 1, 'test_or_ci': 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/shizifan/Analytica", "source_id": "graph-query-motif_query-5553905dc65c7e67", "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": "shizifan/Analytica", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: shizifan/Analytica"}, "properties": {"repobilityId": 467179, "scanner": "foundry_dataset", "fingerprint": "55fa7f4ebab4e946f61b74497ca66dc41b362c0857b6e58e16088c6d940d8c82", "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": {"api_or_backend": 1, "agent_instruction_gap": 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": 14, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "thread_touches_file": 1, "chain_has_link_quality": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 1, "thread_has_comment_chain": 1, "comment_chain_touches_file": 1, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 10, "node_types": {"repo": 1, "thread": 1, "comment": 1, "pr_file": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 3, "comment_chain": 1}, "query_type": "motif_query", "thread_key": "shizifan/Analytica#14", "issue_number": "14", "quality_tiers": {"unresolved": 3}, "repo_full_name": "shizifan/Analytica", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-f8e5cd229ece54fd", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {"api_or_backend": 4}}, "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: shizifan/Analytica\nThread: shizifan/Analytica#14\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: shizifan/Analytica\nThread: shizifan/Analytica#14\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: shizifan/Analytica#14\nRepo: shizifan/Analytica\nIssue/PR number: 14\nGraph consistency label: needs_more_evidence\nNodes: 10\nEdges: 14\nNode types: {'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'pr_file': 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_touches_file': 1, 'thread_has_comment_chain': 1, 'comment_has_chain': 1, 'comment_chain_touches_file': 1, 'thread_has_issue_chain': 1, 'issue_chain_has_comment_chain': 1, 'issue_chain_touches_file': 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, 'agent_instruction_gap': 1, 'api_or_backend': 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/shizifan/Analytica", "source_id": "graph-query-motif_query-a8b3e0e2df2eab1d", "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": "shizifan/Analytica", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: shizifan/Analytica"}, "properties": {"repobilityId": 467178, "scanner": "foundry_dataset", "fingerprint": "be1dd93b88edaab95efeb4bb32c0dec64f961b77fbdea72e3f782ab82f77a94f", "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": {"test_or_ci": 1, "agent_instruction_gap": 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": 14, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "thread_touches_file": 1, "chain_has_link_quality": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 1, "thread_has_comment_chain": 1, "comment_chain_touches_file": 1, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 10, "node_types": {"repo": 1, "thread": 1, "comment": 1, "pr_file": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 3, "comment_chain": 1}, "query_type": "motif_query", "thread_key": "shizifan/Analytica#13", "issue_number": "13", "quality_tiers": {"unresolved": 3}, "repo_full_name": "shizifan/Analytica", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-1bfe9041de882612", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {"test_or_ci": 4}}, "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: shizifan/Analytica\nThread: shizifan/Analytica#13\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: shizifan/Analytica\nThread: shizifan/Analytica#13\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: shizifan/Analytica#13\nRepo: shizifan/Analytica\nIssue/PR number: 13\nGraph consistency label: needs_more_evidence\nNodes: 10\nEdges: 14\nNode types: {'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'pr_file': 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_touches_file': 1, 'thread_has_comment_chain': 1, 'comment_has_chain': 1, 'comment_chain_touches_file': 1, 'thread_has_issue_chain': 1, 'issue_chain_has_comment_chain': 1, 'issue_chain_touches_file': 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, 'agent_instruction_gap': 1, 'test_or_ci': 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/shizifan/Analytica", "source_id": "graph-query-motif_query-c171863f19bbc5f4", "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": "shizifan/Analytica", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: shizifan/Analytica"}, "properties": {"repobilityId": 467177, "scanner": "foundry_dataset", "fingerprint": "6bb4dfa8b2c6436c09c9b7a3194fa4d7b355d6b4105503e569a6f112f8349edd", "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": {"test_or_ci": 1, "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": 14, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "thread_touches_file": 1, "chain_has_link_quality": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 1, "thread_has_comment_chain": 1, "comment_chain_touches_file": 1, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 10, "node_types": {"repo": 1, "thread": 1, "comment": 1, "pr_file": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 3, "comment_chain": 1}, "query_type": "motif_query", "thread_key": "shizifan/Analytica#12", "issue_number": "12", "quality_tiers": {"unresolved": 3}, "repo_full_name": "shizifan/Analytica", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-6902fd6feb2f12cb", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {"test_or_ci": 4}}, "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: shizifan/Analytica\nThread: shizifan/Analytica#12\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: shizifan/Analytica\nThread: shizifan/Analytica#12\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: shizifan/Analytica#12\nRepo: shizifan/Analytica\nIssue/PR number: 12\nGraph consistency label: needs_more_evidence\nNodes: 10\nEdges: 14\nNode types: {'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'pr_file': 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_touches_file': 1, 'thread_has_comment_chain': 1, 'comment_has_chain': 1, 'comment_chain_touches_file': 1, 'thread_has_issue_chain': 1, 'issue_chain_has_comment_chain': 1, 'issue_chain_touches_file': 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, 'test_or_ci': 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/shizifan/Analytica", "source_id": "graph-query-motif_query-d1b2047cb6ee7807", "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": "shizifan/Analytica", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: shizifan/Analytica"}, "properties": {"repobilityId": 467176, "scanner": "foundry_dataset", "fingerprint": "ee5daeab5518bdbf7b232ae96596dd8025d23c16437fcb88b787349fc892607b", "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": {"test_or_ci": 1, "agent_instruction_gap": 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": 14, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "thread_touches_file": 1, "chain_has_link_quality": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 1, "thread_has_comment_chain": 1, "comment_chain_touches_file": 1, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 10, "node_types": {"repo": 1, "thread": 1, "comment": 1, "pr_file": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 3, "comment_chain": 1}, "query_type": "motif_query", "thread_key": "shizifan/Analytica#10", "issue_number": "10", "quality_tiers": {"unresolved": 3}, "repo_full_name": "shizifan/Analytica", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-bfcc80e7819309b4", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {"test_or_ci": 4}}, "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: shizifan/Analytica\nThread: shizifan/Analytica#10\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: shizifan/Analytica\nThread: shizifan/Analytica#10\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: shizifan/Analytica#10\nRepo: shizifan/Analytica\nIssue/PR number: 10\nGraph consistency label: needs_more_evidence\nNodes: 10\nEdges: 14\nNode types: {'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'pr_file': 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_touches_file': 1, 'thread_has_comment_chain': 1, 'comment_has_chain': 1, 'comment_chain_touches_file': 1, 'thread_has_issue_chain': 1, 'issue_chain_has_comment_chain': 1, 'issue_chain_touches_file': 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, 'agent_instruction_gap': 1, 'test_or_ci': 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/shizifan/Analytica", "source_id": "graph-query-motif_query-f544a3af06160c06", "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": "shizifan/Analytica", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: shizifan/Analytica"}, "properties": {"repobilityId": 467175, "scanner": "foundry_dataset", "fingerprint": "ceee79cc294212005a3cb65fcba61b912c94413f15fb1f0fd41ed898387ee72b", "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": {"agent_instruction_gap": 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": "shizifan/Analytica#1", "issue_number": "1", "quality_tiers": {"unresolved": 3}, "repo_full_name": "shizifan/Analytica", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-cd7686d80c4270d4", "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: shizifan/Analytica\nThread: shizifan/Analytica#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: shizifan/Analytica\nThread: shizifan/Analytica#1\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: shizifan/Analytica#1\nRepo: shizifan/Analytica\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, 'agent_instruction_gap': 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/shizifan/Analytica", "source_id": "graph-query-motif_query-0673013822d53926", "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": "shizifan/Analytica", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_assumption_check", "level": "warning", "message": {"text": "Foundry mined assumption checks: shizifan/Analytica"}, "properties": {"repobilityId": 439380, "scanner": "foundry_dataset", "fingerprint": "8e7b90ba1b8b10a02e273ab5850f6a4669b80e880e6891a09a35e38a47ca8b74", "category": "practices", "severity": "medium", "confidence": 0.62, "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": "comment_chain_pattern_product", "source": "comment_chain_pattern_miner", "product": "assumption_checks", "synthetic": false, "thread_key": "shizifan/Analytica#21", "human_labels": ["agent_instruction_gap", "api_or_backend", "source_or_other", "test_or_ci"], "issue_number": "21", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "claimed_resolved_unverified", "source_backed": true, "max_confidence": 0.65, "repo_full_name": "shizifan/Analytica", "training_usage": "weak_supervision", "confidence_tier": "weak_supervision", "source_chain_id": "evidence-chain-issue_chain-0f4305f69457fee8", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 2, "docs": 2, "schemas": 2, "routes_api": 2}, "source_chain_kind": "issue_chain", "changed_file_count": 19, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"test_or_ci": 3, "api_or_backend": 15, "source_or_other": 1}, "linked_commit_count": 5, "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_weak_supervision"], "linked_ci_commit_count": 0, "verification_artifact_count": 4, "design_schema_api_artifact_count": 4}, "text": "Comment chain pattern product: assumption_checks\nRepo: shizifan/Analytica\nThread: shizifan/Analytica#21\nOutcome: claimed_resolved_unverified\nThread label: thread_has_human_issue_and_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_weak_supervision\nChain evidence:\nIssue/PR evidence chain: shizifan/Analytica#21\nRepo: shizifan/Analytica\nThread label: thread_has_human_issue_and_fix_context\nOutcome: claimed_resolved_unverified\nComment count: 1\nLinked commit count: 5\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 19\nLabels: {'agent_instruction_gap': 1}\nPolarities: {'bad': 1}\nChanged file labels: {'api_or_backend': 15, 'source_or_other': 1, 'test_or_ci': 3}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-7c1bb08b31b8e43e\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"agent_instruction_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/shizifan/Analytica/pull/21\",\n    \"text\": \"GitHub feedback: agent_instruction_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: shizifan/Analytica\\nAuthor: shizifan (User)\\nURL: https://github.com/shizifan/Analytica/pull/21\\nTitle: round-12: \u5206\u6790\u6df1\u5ea6 (P0 tidy \u91cd\u5851 + P1 \u5bf9\u6bd4\u539f\u8bed + P4 \u53d9\u4e8b\u4e09\u6bb5\u5f0f)\\nBody:\\n## \u80cc\u666f\\nprobe-data 2 \u6df1\u6316\u5b9e\u9524:\u62a5\u544a\u4e2d\\\"\u6240\u6709\u6570\u503c\u5747\u4e3a null\\\"/\\\"\u672a\u627e\u5230\u6570\u503c\u5217\\\"**\u5168\u662f tidy \u957f\u8868\u5047\u9633\u6027**\u2014\u2014\u6570\u636e 100% \u5728\u573a\u5e26\u771f\u503c,\u5904\u7406\u5c42\u4e0d\u4f1a pivot \u957f\u8868(\u4e00\u4e2a\u901a\u7528\u6570\u503c\u5217 `num`/`qty` + \u6307\u6807\u8eab\u4efd\u7f16\u7801\u5728 category \u884c `typeName`/`statType`)\u3002\u7ecf **13-agent \u5bf9\u6297\u8bc4\u5ba1**(31 \u6761 file:line \u6838\u5b9e finding)\u91cd\u5199\u65b9\u6848,\u4fee\u6b63 V1 \u7684\\\"\u5047\u4fee\u590d\\\"\u98ce\u9669(\u53ea\u91cd\u5851\u6570\u636e\u4e0d\u6539 mapper \u2192 \u5bbd\u8868\u4ea4\u56de LLM mapper \u4ecd\u9009\u9519,\u5b9e\u6d4b 18\u00d7 \u865a\u9ad8\u9519\u6570)\u3002\\n\\n## \u6539\u52a8(3 \u6279)\\n**P0 \u786e\u5b9a\u6027\u91cd\u5851 + \u786e\u5b9a\u6027\u6d88\u8d39**(`2abbcc4`)\\n- \u65b0 `backend/tools/_reshape.py`:\u7ed3\u6784\u5224\u636e\u68c0\u6d4b(\u7ec4\u5185\u540c\u5c3a\u5ea6\u00b7\u7ec4\u95f4\u8de8\u5c3a\u5ea6,**\u6846\u67b6\u96f6\u4e1a\u52a1\u8bcd** genericity-clean)+ pivot(reset_index/\u975e\u7a7a\u5b88\u6052/\u7981 `aggfunc=first`/intent \u5207\u7247\u8fc7\u6ee4)\\n- \u547d\u4e2d reshape \u2192 `_mapping_override` \u76f4\u5582\u56fe\u8868\u3001**\u7ed5\u8fc7 LLM mapper**(\u5c01\u6b7b\u5047\u4fee\u590d)\\n- 9 \u5904\u6d88\u8d39\u8fb9\u754c\u63d2\u5165(chart\u00d73 + descriptive/anomaly/prediction + KPI + summarize + \u8868\u683c)\\n- \u673a\u5236 B \u76f4\u4fee:`_ID_KEYWORDS` \u79fb\u9664\u88f8 `num`;census `long_tidy` \u5206\u652f\\n\\n**P1 \u786e\u5b9a\u6027\u5bf9\u6bd4\u539f\u8bed\u5305**(`0321400`):\u8865 `structure_share`/`topn_rank_delta`(+\u539f 3 = 5 \u539f\u8bed)+ `tool_comparison` BaseTool \u63a5\u901a planner(\u6b64\u524d probe \u4ea7\u51fa 0 \u6b21=\u63a5\u7ebf\u65ad\u70b9)\\n\\n**P4 \u53d9\u4e8b\u4e09\u6bb5\u5f0f + \u5957\u8bdd\u6cbb\u7406**(`a8530d9`):outline planner prompt \u52a0\\\"\u6570\u5b57\u2192\u5bf9\u6bd4\u2192\u542b\u4e49\\\" + \u5957\u8bdd\u7981\u4ee4\\n\\n## \u9a8c\u8bc1\\n- **1520 unit passed**(+27 round-12 \u4e13\u6d4b,\u542b 2 \u6761 E2E \u96c6\u6210:\u771f\u5b9e chart_bar \u5582\u957f\u8868\u2192\u51fa\u56fe\u975e ALL_NULL)\\n-\"\n  }\n]\nChanged files:\n[\n  {\n    \"id\": \"github-pr-file-file-ed4d05882820c16e\",\n    \"filename\": \"backend/agent/api_registry.py\",\n    \"label\": \"api_or_backend\",\n    \"status\": \"modified\",\n    \"additions\": 1,\n    \"deletions\": 0,\n    \"changes\": 1,\n    \"blob_url\": \"https://github.com/shizifan/Analytica/blob/a8530d9171b35145c0ef03fc5edb3a607eb3574e/backend%2Fagent%2Fapi_registry.py\"\n  },\n  {\n    \"id\": \"github-pr-file-file-94a04fe24b16b632\",\n    \"filename\": \"backend/tools/_reshape.py\",\n    \"label\": \"api_or_backend\",\n    \"status\": \"added\",\n    \"additions\": 471,\n    \"deletions\": 0,\n    \"changes\": 471,\n    \"blob_url\": \"https://github.com/shizifan/Analytica/blob/a8530d9171b35\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/shizifan/Analytica", "source_id": "comment-chain-pattern-assumption_checks-aa5a3d49ce7db7d8", "synthetic": false, "gold_label": "", "graph_label": "source_backed_multi_signal_graph", "source_path": "/data/distillate/foundry_data/comment_chain_patterns/assumption_checks/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "shizifan/Analytica", "source_dataset": "comment_chain_patterns/assumption_checks", "training_usage": "weak_supervision"}}}, {"ruleId": "foundry_assumption_check", "level": "warning", "message": {"text": "Foundry mined assumption checks: shizifan/Analytica"}, "properties": {"repobilityId": 439379, "scanner": "foundry_dataset", "fingerprint": "dfb847de98ec76bbdf7d02a43ddb7f41008ed4aecb02fec08779492b6f5a032c", "category": "practices", "severity": "medium", "confidence": 0.62, "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": "comment_chain_pattern_product", "source": "comment_chain_pattern_miner", "product": "assumption_checks", "synthetic": false, "thread_key": "shizifan/Analytica#11", "human_labels": ["api_or_backend", "test_ci_gap", "test_or_ci"], "issue_number": "11", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "ambiguous_needs_more_evidence", "source_backed": true, "max_confidence": 0.59, "repo_full_name": "shizifan/Analytica", "training_usage": "weak_supervision", "confidence_tier": "weak_supervision", "source_chain_id": "evidence-chain-issue_chain-2730782d6d8816cd", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 2, "docs": 2, "schemas": 2, "routes_api": 2}, "source_chain_kind": "issue_chain", "changed_file_count": 4, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"test_or_ci": 2, "api_or_backend": 2}, "linked_commit_count": 1, "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_weak_supervision", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 4, "design_schema_api_artifact_count": 4}, "text": "Comment chain pattern product: assumption_checks\nRepo: shizifan/Analytica\nThread: shizifan/Analytica#11\nOutcome: ambiguous_needs_more_evidence\nThread label: thread_has_human_issue_and_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_weak_supervision, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: shizifan/Analytica#11\nRepo: shizifan/Analytica\nThread label: thread_has_human_issue_and_fix_context\nOutcome: ambiguous_needs_more_evidence\nComment count: 1\nLinked commit count: 1\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 4\nLabels: {'test_ci_gap': 1}\nPolarities: {'bad': 1}\nChanged file labels: {'api_or_backend': 2, 'test_or_ci': 2}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-4ccfbaa5bdbffde4\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"test_ci_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/shizifan/Analytica/pull/11\",\n    \"text\": \"GitHub feedback: test_ci_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: shizifan/Analytica\\nAuthor: shizifan (User)\\nURL: https://github.com/shizifan/Analytica/pull/11\\nTitle: feat(report): close LLM planner visual capability gaps (cover + highlights)\\nBody:\\n## Summary\\n\\n\u8865\u9f50\u4e24\u4e2a LLM planner \u8def\u5f84\u7684\u80fd\u529b gap\uff0c\u8ba9\\\"AI \u89c4\u5212\\\"\u548c\\\"\u89c4\u5219\u515c\u5e95\\\"\u4e24\u6761\u8def\u5f84**\u89c6\u89c9\u80fd\u529b\u5bf9\u7b49**\u3002Gap \u662f\u9636\u6bb5 6 \u5199\u9a8c\u6536\u6d4b\u8bd5\u65f6\u53d1\u73b0\u7684\uff0cPR \u5f53\u65f6\u53ea\u7528\u5b88\u536b\u6d4b\u8bd5\u9489\u4f4f\u3002\u672c PR \u771f\u6b63\u4fee\u590d\u3002\\n\\n| Gap | \u4fee\u590d\u65b9\u5f0f |\\n|---|---|\\n| **Gap 1** \u00b7 SectionCoverBlock \u5728 LLM \u8def\u5f84\u91cc\u6574\u5757\u4e0d\u51fa\u73b0\uff08\u6bcf\u7ae0\u9876\u4e0a\u6ca1\u6709\\\"\u6df1\u8272\u5c01\u9762\u9875\\\"\uff09 | `_build_outline_from_response` \u81ea\u52a8\u7ed9\u6bcf\u4e2a**\u975e appendix** \u7ae0\u8282 prepend \u4e00\u4e2a `SectionCoverBlock`\uff0c\u548c rule fallback \u5b8c\u5168\u4e00\u81f4\u3002LLM \u4ecd\u7136**\u4e0d\u5141\u8bb8**\u4e3b\u52a8\u53d1 `section_cover` \u2014\u2014 \u7cfb\u7edf\u62e5\u6709\u7248\u5f0f\uff0cLLM \u53ea\u5173\u5fc3\u5185\u5bb9 |\\n| **Gap 2** \u00b7 LLM JSON \u91cc\u7684 `highlight_rules` \u88ab\u89e3\u6790\u5668\u9759\u9ed8\u4e22\u5f03 | `_block_from_response` \u7684 `table` \u5206\u652f\u8bfb\u53d6\u5e76\u767d\u540d\u5355\u9a8c\u8bc1\uff1a`color` \u2208 {positive, negative, neutral, accent, gold, silver, bronze}\uff1b`col` \u6216 `row` \u4e8c\u9009\u4e00\uff1b`predicate` \u900f\u4f20\uff08renderer \u5bb9\u5fcd\u672a\u77e5\u503c\uff09 |\\n\\n## Prompt \u66f4\u65b0\\n\\n- \u2705 Schema \u52a0 `highlight_rules` \u5b57\u6bb5\u53ca\u5177\u4f53\u4f8b\u5b50\uff08max \u67d3\u7eff\u3001negative \u67d3\u7ea2\uff09\\n- \u2705 \u65b0\u589e\u300c## \u8868\u683c\u9ad8\u4eae\u6307\u5f15\u300d\u8282\uff0c\u660e\u786e\u4ec0\u4e48\u65f6\u5019\u7528\u3001\u989c\u8272\u8bed\u4e49\\n- \u2705 \u5220\u6389\u8fc7\u65f6\u7684 \\\"section_cover \u5f53\u524d\u4e0d\u6e32\u67d3\\\" \u2014\u2014 \u6539\u4e3a\u6b63\u786e\u63cf\u8ff0\uff1a**\u7cfb\u7edf\u81ea\u52a8\u6ce8\u5165\uff0cLLM \u4e0d\u8981\u4e3b\u52a8\u53d1**\\n- \u2705 \\\"8 \u79cd\\\" \u2192 \\\"7 \u79cd\\\"\uff08validator \u4e00\u76f4\u53ea\u63a5\u53d7 7 \u79cd\uff0cprompt \u65e9\u671f\u5199\u9519\uff09\\n\\n## \u6d4b\u8bd5\u6539\u52a8\\n\\n| \u6587\u4ef6 | \u6539\u52a8 |\\n|---|---|\\n| `test_outline_planner_visual.py` | 2 \u4e2a\u539f gap-guard \u6d4b\u8bd5\u7ffb\u8f6c\u4e3a acceptance\uff1b\u65b0\u589e auto-injection \u4e0d\u53d8\u91cf\u3001appendix \u6392\u9664\u3001LLM \"\n  }\n]\nChanged files:\n[\n  {\n    \"id\": \"github-pr-file-file-4e43a53e9816ea62\",\n    \"filename\": \"backend/tools/report/_outline_planner.py\",\n    \"label\": \"api_or_backend\",\n    \"status\": \"modified\",\n    \"additions\": 60,\n    \"deletions\": 0,\n    \"changes\": 60,\n    \"blob_url\": \"https://github.com/shizifan/Analytica/blob/6ebb8bb7b073ed31352e115e7218d978ad87bc24/backend%2Ftools%2Freport%2F_outline_planner.py\"\n  },\n  {\n    \"id\": \"github-pr-file-file-6f1260a9aae02b4c\",\n    \"filename\": \"backend/tools/report/_planner_prompts.py\",\n    \"label\": \"api_or_backend\",\n    \"status\": \"modified\",\n    \"additions\": 26,\n    \"deletions\": 2,\n    \"changes\": 28,\n    \"blob_url\": \"https://github\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/shizifan/Analytica", "source_id": "comment-chain-pattern-assumption_checks-a4b663e1e0597592", "synthetic": false, "gold_label": "", "graph_label": "source_backed_multi_signal_graph", "source_path": "/data/distillate/foundry_data/comment_chain_patterns/assumption_checks/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "shizifan/Analytica", "source_dataset": "comment_chain_patterns/assumption_checks", "training_usage": "weak_supervision"}}}, {"ruleId": "foundry_test_ci_gap", "level": "error", "message": {"text": "Foundry mined test ci gap after feedback: shizifan/Analytica"}, "properties": {"repobilityId": 460389, "scanner": "foundry_dataset", "fingerprint": "53213bd5e82d40fc79a794670b1abb3d360ff6dadef51129dac1466e62b8b774", "category": "testing", "severity": "high", "confidence": 0.78, "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": "graph_query_record", "title": "Feedback exposes missing tests or CI", "intent": "Hard negatives for feedback/fix chains without adequate guardrails.", "labels": {"test_or_ci": 13, "test_ci_gap": 1, "source_or_other": 2, "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": "test_ci_gap_after_feedback", "outcomes": {"not_resolved_or_not_observed": 6}, "polarity": "bad", "query_id": "test_ci_gap_after_feedback", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 50, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "thread_touches_file": 15, "chain_has_link_quality": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 1, "comment_chain_touches_file": 12, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 24, "node_types": {"repo": 1, "thread": 1, "comment": 1, "pr_file": 15, "fix_outcome": 1, "issue_chain": 1, "link_quality": 3, "comment_chain": 1}, "query_type": "motif_query", "thread_key": "shizifan/Analytica#9", "issue_number": "9", "quality_tiers": {"unresolved": 3}, "repo_full_name": "shizifan/Analytica", "training_usage": "hard_negative", "source_motif_id": "graph-pattern-motif-thread-d5d8d0dddd62843a", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {"test_or_ci": 52, "source_or_other": 8}}, "text": "Graph query export: Feedback exposes missing tests or CI\nQuery id: test_ci_gap_after_feedback\nQuery type: motif_query\nIntent: Hard negatives for feedback/fix chains without adequate guardrails.\nMotif: test_ci_gap_after_feedback\nTraining usage: hard_negative\nGraph gold label: needs_more_evidence\nRepo: shizifan/Analytica\nThread: shizifan/Analytica#9\nEvidence:\nGraph motif: Feedback or fix context exposes missing test/CI guardrails\nMotif id: test_ci_gap_after_feedback\nPolarity: bad\nTraining usage: hard_negative\nSeverity: high\nRepo: shizifan/Analytica\nThread: shizifan/Analytica#9\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: shizifan/Analytica#9\nRepo: shizifan/Analytica\nIssue/PR number: 9\nGraph consistency label: needs_more_evidence\nNodes: 24\nEdges: 50\nNode types: {'pr_file': 15, 'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'thread_touches_file': 15, 'comment_chain_touches_file': 12, 'issue_chain_touches_file': 12, '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: {'test_or_ci': 13, 'not_resolved_or_not_observed': 3, 'source_or_other': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'test_ci_gap': 1, 'human_reported_issue_no_linked_fix': 1}\nOutcomes: {'not_resolved_or_not_observed': 6}\nQuality tiers: {'unresolved': 3}\nCI labels: {}\nCurriculum targets:\n- Turn human feedback into regression tests and CI gates.\n- Penalize fixes that do not add or exercise verification for affected workflows.\nAssumption checks:\n- Did the fix add tests for the exact complaint?\n- Does CI run those tests, or is verification only implied?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/shizifan/Analytica", "source_id": "graph-query-motif_query-e11b5a2ebed9603a", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/test_ci_gap_after_feedback/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "shizifan/Analytica", "source_dataset": "graph_queries/test_ci_gap_after_feedback", "training_usage": "hard_negative"}}}, {"ruleId": "foundry_test_ci_gap", "level": "error", "message": {"text": "Foundry mined test ci gap after feedback: shizifan/Analytica"}, "properties": {"repobilityId": 460388, "scanner": "foundry_dataset", "fingerprint": "acae1a6b8926188bc5240bfe611a9b9a8dbcd632ae200167d8e9f732468191a5", "category": "testing", "severity": "high", "confidence": 0.78, "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": "graph_query_record", "title": "Feedback exposes missing tests or CI", "intent": "Hard negatives for feedback/fix chains without adequate guardrails.", "labels": {"test_or_ci": 2, "test_ci_gap": 1, "api_or_backend": 5, "ui_or_frontend": 10, "dependency_or_build": 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": "test_ci_gap_after_feedback", "outcomes": {"not_resolved_or_not_observed": 6}, "polarity": "bad", "query_id": "test_ci_gap_after_feedback", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 53, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "thread_touches_file": 18, "chain_has_link_quality": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 1, "comment_chain_touches_file": 12, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 27, "node_types": {"repo": 1, "thread": 1, "comment": 1, "pr_file": 18, "fix_outcome": 1, "issue_chain": 1, "link_quality": 3, "comment_chain": 1}, "query_type": "motif_query", "thread_key": "shizifan/Analytica#2", "issue_number": "2", "quality_tiers": {"unresolved": 3}, "repo_full_name": "shizifan/Analytica", "training_usage": "hard_negative", "source_motif_id": "graph-pattern-motif-thread-aa813b21c7a65a68", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {"test_or_ci": 8, "api_or_backend": 20, "ui_or_frontend": 40, "dependency_or_build": 4}}, "text": "Graph query export: Feedback exposes missing tests or CI\nQuery id: test_ci_gap_after_feedback\nQuery type: motif_query\nIntent: Hard negatives for feedback/fix chains without adequate guardrails.\nMotif: test_ci_gap_after_feedback\nTraining usage: hard_negative\nGraph gold label: needs_more_evidence\nRepo: shizifan/Analytica\nThread: shizifan/Analytica#2\nEvidence:\nGraph motif: Feedback or fix context exposes missing test/CI guardrails\nMotif id: test_ci_gap_after_feedback\nPolarity: bad\nTraining usage: hard_negative\nSeverity: high\nRepo: shizifan/Analytica\nThread: shizifan/Analytica#2\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: shizifan/Analytica#2\nRepo: shizifan/Analytica\nIssue/PR number: 2\nGraph consistency label: needs_more_evidence\nNodes: 27\nEdges: 53\nNode types: {'pr_file': 18, 'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'thread_touches_file': 18, 'comment_chain_touches_file': 12, 'issue_chain_touches_file': 12, '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: {'ui_or_frontend': 10, 'api_or_backend': 5, 'not_resolved_or_not_observed': 3, 'test_or_ci': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'test_ci_gap': 1, 'dependency_or_build': 1, 'human_reported_issue_no_linked_fix': 1}\nOutcomes: {'not_resolved_or_not_observed': 6}\nQuality tiers: {'unresolved': 3}\nCI labels: {}\nCurriculum targets:\n- Turn human feedback into regression tests and CI gates.\n- Penalize fixes that do not add or exercise verification for affected workflows.\nAssumption checks:\n- Did the fix add tests for the exact complaint?\n- Does CI run those tests, or is verification only implied?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/shizifan/Analytica", "source_id": "graph-query-motif_query-9ae8931616c058fc", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/test_ci_gap_after_feedback/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "shizifan/Analytica", "source_dataset": "graph_queries/test_ci_gap_after_feedback", "training_usage": "hard_negative"}}}, {"ruleId": "foundry_test_ci_gap", "level": "error", "message": {"text": "Foundry mined test ci gap after feedback: shizifan/Analytica"}, "properties": {"repobilityId": 460387, "scanner": "foundry_dataset", "fingerprint": "4db6b3f59c8b33cceb6372f557303d592f179208198e9cf1cef972830caea7bd", "category": "testing", "severity": "high", "confidence": 0.78, "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": "graph_query_record", "title": "Feedback exposes missing tests or CI", "intent": "Hard negatives for feedback/fix chains without adequate guardrails.", "labels": {"test_or_ci": 1, "test_ci_gap": 1, "api_or_backend": 2, "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": "test_ci_gap_after_feedback", "outcomes": {"not_resolved_or_not_observed": 6}, "polarity": "bad", "query_id": "test_ci_gap_after_feedback", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 20, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "thread_touches_file": 3, "chain_has_link_quality": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 3, "thread_has_comment_chain": 1, "comment_chain_touches_file": 3, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 12, "node_types": {"repo": 1, "thread": 1, "comment": 1, "pr_file": 3, "fix_outcome": 1, "issue_chain": 1, "link_quality": 3, "comment_chain": 1}, "query_type": "motif_query", "thread_key": "shizifan/Analytica#18", "issue_number": "18", "quality_tiers": {"unresolved": 3}, "repo_full_name": "shizifan/Analytica", "training_usage": "hard_negative", "source_motif_id": "graph-pattern-motif-thread-bcab34856f4feba9", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {"test_or_ci": 4, "api_or_backend": 8}}, "text": "Graph query export: Feedback exposes missing tests or CI\nQuery id: test_ci_gap_after_feedback\nQuery type: motif_query\nIntent: Hard negatives for feedback/fix chains without adequate guardrails.\nMotif: test_ci_gap_after_feedback\nTraining usage: hard_negative\nGraph gold label: needs_more_evidence\nRepo: shizifan/Analytica\nThread: shizifan/Analytica#18\nEvidence:\nGraph motif: Feedback or fix context exposes missing test/CI guardrails\nMotif id: test_ci_gap_after_feedback\nPolarity: bad\nTraining usage: hard_negative\nSeverity: high\nRepo: shizifan/Analytica\nThread: shizifan/Analytica#18\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: shizifan/Analytica#18\nRepo: shizifan/Analytica\nIssue/PR number: 18\nGraph consistency label: needs_more_evidence\nNodes: 12\nEdges: 20\nNode types: {'pr_file': 3, 'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'thread_touches_file': 3, 'comment_chain_touches_file': 3, 'chain_has_link_quality': 3, 'issue_chain_touches_file': 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, 'api_or_backend': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'test_ci_gap': 1, 'test_or_ci': 1, 'human_reported_issue_no_linked_fix': 1}\nOutcomes: {'not_resolved_or_not_observed': 6}\nQuality tiers: {'unresolved': 3}\nCI labels: {}\nCurriculum targets:\n- Turn human feedback into regression tests and CI gates.\n- Penalize fixes that do not add or exercise verification for affected workflows.\nAssumption checks:\n- Did the fix add tests for the exact complaint?\n- Does CI run those tests, or is verification only implied?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/shizifan/Analytica", "source_id": "graph-query-motif_query-7a838e07fe6c2670", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/test_ci_gap_after_feedback/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "shizifan/Analytica", "source_dataset": "graph_queries/test_ci_gap_after_feedback", "training_usage": "hard_negative"}}}, {"ruleId": "foundry_test_ci_gap", "level": "error", "message": {"text": "Foundry mined test ci gap after feedback: shizifan/Analytica"}, "properties": {"repobilityId": 460386, "scanner": "foundry_dataset", "fingerprint": "d1a00c2bb84c78f2e56f85089c5d3bdc13c8a97cda51ea455ff3018f07b464c5", "category": "testing", "severity": "high", "confidence": 0.78, "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": "graph_query_record", "title": "Feedback exposes missing tests or CI", "intent": "Hard negatives for feedback/fix chains without adequate guardrails.", "labels": {"test_or_ci": 2, "test_ci_gap": 1, "api_or_backend": 2, "verification_or_tests": 1, "issue_or_pull_request_thread": 1, "ambiguous_needs_more_evidence": 3, "comment_has_related_commit_context": 1, "thread_has_human_issue_and_fix_context": 2}, "source": "graph_query_export", "motif_id": "test_ci_gap_after_feedback", "outcomes": {"ambiguous_needs_more_evidence": 6}, "polarity": "bad", "query_id": "test_ci_gap_after_feedback", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 24, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "thread_touches_file": 4, "chain_has_link_quality": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 4, "thread_has_comment_chain": 1, "comment_chain_links_commit": 1, "comment_chain_touches_file": 4, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 14, "node_types": {"repo": 1, "commit": 1, "thread": 1, "comment": 1, "pr_file": 4, "fix_outcome": 1, "issue_chain": 1, "link_quality": 3, "comment_chain": 1}, "query_type": "motif_query", "thread_key": "shizifan/Analytica#11", "issue_number": "11", "quality_tiers": {"weak_supervision": 3}, "repo_full_name": "shizifan/Analytica", "training_usage": "hard_negative", "source_motif_id": "graph-pattern-motif-thread-0b3bcbf9bdff24c0", "graph_gold_label": "weak_supervision_needs_review", "changed_file_labels": {"test_or_ci": 8, "api_or_backend": 8}}, "text": "Graph query export: Feedback exposes missing tests or CI\nQuery id: test_ci_gap_after_feedback\nQuery type: motif_query\nIntent: Hard negatives for feedback/fix chains without adequate guardrails.\nMotif: test_ci_gap_after_feedback\nTraining usage: hard_negative\nGraph gold label: weak_supervision_needs_review\nRepo: shizifan/Analytica\nThread: shizifan/Analytica#11\nEvidence:\nGraph motif: Feedback or fix context exposes missing test/CI guardrails\nMotif id: test_ci_gap_after_feedback\nPolarity: bad\nTraining usage: hard_negative\nSeverity: high\nRepo: shizifan/Analytica\nThread: shizifan/Analytica#11\nGraph gold label: weak_supervision_needs_review\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: shizifan/Analytica#11\nRepo: shizifan/Analytica\nIssue/PR number: 11\nGraph consistency label: weak_supervision_needs_review\nNodes: 14\nEdges: 24\nNode types: {'pr_file': 4, 'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'commit': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'thread_touches_file': 4, 'comment_chain_touches_file': 4, 'issue_chain_touches_file': 4, 'chain_has_link_quality': 3, 'repo_has_thread': 1, 'thread_has_comment': 1, 'thread_has_comment_chain': 1, 'comment_has_chain': 1, 'comment_chain_links_commit': 1, 'thread_has_issue_chain': 1, 'issue_chain_has_comment_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'ambiguous_needs_more_evidence': 3, 'api_or_backend': 2, 'test_or_ci': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'test_ci_gap': 1, 'comment_has_related_commit_context': 1, 'verification_or_tests': 1}\nOutcomes: {'ambiguous_needs_more_evidence': 6}\nQuality tiers: {'weak_supervision': 3}\nCI labels: {}\nCurriculum targets:\n- Turn human feedback into regression tests and CI gates.\n- Penalize fixes that do not add or exercise verification for affected workflows.\nAssumption checks:\n- Did the fix add tests for the exact complaint?\n- Does CI run those tests, or is verification only implied?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/shizifan/Analytica", "source_id": "graph-query-motif_query-c174e17e1601eb05", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/test_ci_gap_after_feedback/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "shizifan/Analytica", "source_dataset": "graph_queries/test_ci_gap_after_feedback", "training_usage": "hard_negative"}}}, {"ruleId": "foundry_schema_ui_api_gap", "level": "error", "message": {"text": "Foundry mined schema ui api mismatch: shizifan/Analytica"}, "properties": {"repobilityId": 453839, "scanner": "foundry_dataset", "fingerprint": "48e47e851fe756502747831992187ffb3e0f259cc487faf43400a4d4279b28ab", "category": "quality", "severity": "high", "confidence": 0.76, "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": "Schema, UI, and API mismatch", "intent": "Assumption-check examples for data-path consistency across layers.", "labels": {"test_or_ci": 1, "data_schema_persistence": 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": "schema_ui_api_mismatch", "outcomes": {"not_resolved_or_not_observed": 6}, "polarity": "bad", "query_id": "schema_ui_api_mismatch", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 14, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "thread_touches_file": 1, "chain_has_link_quality": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 1, "thread_has_comment_chain": 1, "comment_chain_touches_file": 1, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 10, "node_types": {"repo": 1, "thread": 1, "comment": 1, "pr_file": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 3, "comment_chain": 1}, "query_type": "motif_query", "thread_key": "shizifan/Analytica#15", "issue_number": "15", "quality_tiers": {"unresolved": 3}, "repo_full_name": "shizifan/Analytica", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-37f28eb50586af23", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {"test_or_ci": 4}}, "text": "Graph query export: Schema, UI, and API mismatch\nQuery id: schema_ui_api_mismatch\nQuery type: motif_query\nIntent: Assumption-check examples for data-path consistency across layers.\nMotif: schema_ui_api_mismatch\nTraining usage: assumption_check\nGraph gold label: needs_more_evidence\nRepo: shizifan/Analytica\nThread: shizifan/Analytica#15\nEvidence:\nGraph motif: Schema, UI, and API evidence do not line up\nMotif id: schema_ui_api_mismatch\nPolarity: bad\nTraining usage: assumption_check\nSeverity: high\nRepo: shizifan/Analytica\nThread: shizifan/Analytica#15\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: shizifan/Analytica#15\nRepo: shizifan/Analytica\nIssue/PR number: 15\nGraph consistency label: needs_more_evidence\nNodes: 10\nEdges: 14\nNode types: {'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'pr_file': 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_touches_file': 1, 'thread_has_comment_chain': 1, 'comment_has_chain': 1, 'comment_chain_touches_file': 1, 'thread_has_issue_chain': 1, 'issue_chain_has_comment_chain': 1, 'issue_chain_touches_file': 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, 'data_schema_persistence': 1, 'test_or_ci': 1, 'human_reported_issue_no_linked_fix': 1}\nOutcomes: {'not_resolved_or_not_observed': 6}\nQuality tiers: {'unresolved': 3}\nCI labels: {}\nCurriculum targets:\n- Create schema-to-API-to-UI consistency tasks with migrations and tests.\n- Teach models to verify persistence, route contracts, and UI state together.\nAssumption checks:\n- Do schema changes have matching API and UI handling?\n- Are migrations and tests present for the data path?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/shizifan/Analytica", "source_id": "graph-query-motif_query-9a3869da729ed053", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/schema_ui_api_mismatch/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "shizifan/Analytica", "source_dataset": "graph_queries/schema_ui_api_mismatch", "training_usage": "assumption_check"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: shizifan/Analytica"}, "properties": {"repobilityId": 444898, "scanner": "foundry_dataset", "fingerprint": "d8d3b2840012f93d5e91edfff190618622dcd458862af0c1a4715f1f7567ec6d", "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": "shizifan/Analytica#9", "human_labels": ["source_or_other", "test_ci_gap", "test_or_ci"], "issue_number": "9", "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": "shizifan/Analytica", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-9435a509d019cab9", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 2, "docs": 2, "schemas": 2, "routes_api": 2}, "source_chain_kind": "issue_chain", "changed_file_count": 15, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"test_or_ci": 13, "source_or_other": 2}, "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": 4, "design_schema_api_artifact_count": 4}, "text": "Comment chain pattern product: bad_chains\nRepo: shizifan/Analytica\nThread: shizifan/Analytica#9\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: shizifan/Analytica#9\nRepo: shizifan/Analytica\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: 15\nLabels: {'test_ci_gap': 1}\nPolarities: {'bad': 1}\nChanged file labels: {'test_or_ci': 13, 'source_or_other': 2}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-3503274d14e06fe0\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"test_ci_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/shizifan/Analytica/pull/9\",\n    \"text\": \"GitHub feedback: test_ci_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: shizifan/Analytica\\nAuthor: shizifan (User)\\nURL: https://github.com/shizifan/Analytica/pull/9\\nTitle: feat(report): visual_polish_plan \u9636\u6bb5 6 \u2014 \u8d28\u91cf\u4fdd\u969c\u843d\u5730\\nBody:\\n## Summary\\n\\n\u6536\u5c3e [`spec/visual_polish_plan.md`](../blob/master/spec/visual_polish_plan.md) \u9636\u6bb5 6 \u2014 \u628a\\\"\u8fb9\u89c6\u89c9\u8fb9\u8865\u56de\u5f52\\\"\u6c89\u6dc0\u4e3a\u5e38\u9a7b\u8d28\u91cf\u4fdd\u969c\u7f51\u3002\u5b50\u9879 6.1\u20136.6 \u5168\u90e8\u4ea4\u4ed8\u3002\\n\\n## \u5b50\u9879\u660e\u7ec6\\n\\n| \u5b50\u9879 | \u5185\u5bb9 | \u843d\u5730\u7269 |\\n|---|---|---|\\n| 6.1 | Enhanced visual fixture\uff084 \u7aef golden\uff09 | `tests/fixtures/report_baseline/enhanced/` + `tests/contract/test_enhanced_baseline.py`\uff0c\u8986\u76d6 SectionCover / ChartTablePair / \u9ad8\u4eae Table / Callout (warn+info) / ComparisonGrid / GrowthIndicators / \u591a Chart \u7c7b\u578b |\\n| 6.2 | Perceptual hash \u89c6\u89c9\u56de\u5f52 | `tests/visual/test_report_visual.py`\uff08slow\uff0cLibreOffice \u2192 PDF \u2192 pdftoppm \u2192 imagehash phash\uff0chamming \u8ddd\u79bb\u9608\u503c \u2264 5\uff1b\u65b0\u589e `visual` \u53ef\u9009 dep group\uff1bdeps \u7f3a\u5931\u65f6 graceful skip\uff09 |\\n| 6.3 | \u8de8\u5e73\u53f0 spot check \u77e9\u9635 | `spec/visual_compatibility_matrix.md`\uff08Word/PPT mac+win \u00d7 Chrome/Safari/Firefox \u00d7 LibreOffice \u77e9\u9635 + \u5df2\u77e5\u5dee\u5f02\u5217\uff09 |\\n| 6.4 | LLM planner \u89c6\u89c9\u9a8c\u6536 | `tests/contract/test_outline_planner_visual.py` \u2014 10 \u9879 PASSED\uff1b\u542b `section_cover` \u62d2\u7edd + `highlight_rules` \u9759\u9ed8\u4e22\u5f03 gap \u5b88\u536b |\\n| 6.5 | CI \u96c6\u6210 | `.github/workflows/visual_regression.yml`\uff08PR `visual` label + ni\"\n  }\n]\nChanged files:\n[\n  {\n    \"id\": \"github-pr-file-file-640179595c5f16df\",\n    \"filename\": \".github/workflows/visual_regression.yml\",\n    \"label\": \"test_or_ci\",\n    \"status\": \"added\",\n    \"additions\": 97,\n    \"deletions\": 0,\n    \"changes\": 97,\n    \"blob_url\": \"https://github.com/shizifan/Analytica/blob/74d56b2ef2e868a2f4fac95094f00b9a46f966ba/.github%2Fworkflows%2Fvisual_regression.yml\"\n  },\n  {\n    \"id\": \"github-pr-file-file-edd27aaa85671392\",\n    \"filename\": \"pyproject.toml\",\n    \"label\": \"source_or_other\",\n    \"status\": \"modified\",\n    \"additions\": 7,\n    \"deletions\": 0,\n    \"changes\": 7,\n    \"blob_url\": \"https://github.com/shizifan/Analytica/blob/74d56b2ef2e868a2f4fac95094f00b9a46\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/shizifan/Analytica", "source_id": "comment-chain-pattern-bad_chains-6f8ab3c489b82d29", "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": "shizifan/Analytica", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: shizifan/Analytica"}, "properties": {"repobilityId": 444897, "scanner": "foundry_dataset", "fingerprint": "e9cfee852dc4bce661c6ed671d8f7a99a5911927fc06be09e4839f2783274e49", "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": "shizifan/Analytica#8", "human_labels": ["mock_placeholder", "schema_or_data", "source_or_other", "test_or_ci"], "issue_number": "8", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "claimed_resolved_unverified", "source_backed": true, "max_confidence": 0.59, "repo_full_name": "shizifan/Analytica", "training_usage": "weak_supervision", "confidence_tier": "weak_supervision", "source_chain_id": "evidence-chain-issue_chain-d8872d994b9c1832", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 2, "docs": 2, "schemas": 2, "routes_api": 2}, "source_chain_kind": "issue_chain", "changed_file_count": 6, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"test_or_ci": 4, "schema_or_data": 1, "source_or_other": 1}, "linked_commit_count": 1, "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_weak_supervision", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 4, "design_schema_api_artifact_count": 4}, "text": "Comment chain pattern product: bad_chains\nRepo: shizifan/Analytica\nThread: shizifan/Analytica#8\nOutcome: claimed_resolved_unverified\nThread label: thread_has_human_issue_and_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_weak_supervision, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: shizifan/Analytica#8\nRepo: shizifan/Analytica\nThread label: thread_has_human_issue_and_fix_context\nOutcome: claimed_resolved_unverified\nComment count: 1\nLinked commit count: 1\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 6\nLabels: {'mock_placeholder': 1}\nPolarities: {'bad': 1}\nChanged file labels: {'test_or_ci': 4, 'schema_or_data': 1, 'source_or_other': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-4fe251817919ecfa\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"mock_placeholder\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/shizifan/Analytica/pull/8\",\n    \"text\": \"GitHub feedback: mock_placeholder\\nPolarity: bad\\nKind: pull_request_body\\nRepo: shizifan/Analytica\\nAuthor: shizifan (User)\\nURL: https://github.com/shizifan/Analytica/pull/8\\nTitle: fix(ci): unbreak regression \u2014 seed scripts, env, LLM-replay scoping\\nBody:\\n## \u80cc\u666f\\n\\n`regression` job \u5728\u6240\u6709\u8fd1\u671f PR(#1 / #4 / #5 / #6)\u4e0a\u90fd\u662f\u7ea2\u7684, \u8868\u9762\u770b\u662f \\\"Seed employees from YAML\\\" \u6b65\u9aa4\u5931\u8d25\u3002\u6df1\u6316\u4e4b\u540e\u53d1\u73b0\u662f 4 \u5c42\u72ec\u7acb\u95ee\u9898\u53e0\u52a0:\\n\\n1. CI env \u7f3a\u5fc5\u586b Settings \u5b57\u6bb5, seed \u811a\u672c\u7b2c\u4e00\u884c `get_settings()` \u5c31 ValidationError;\\n2. `seed_admin_tables.py` \u5728 workflow \u91cc\u538b\u6839\u6ca1\u88ab\u8c03\u7528 \u2192 `api_endpoints` \u8868\u4e3a\u7a7a;\\n3. `_seed_tools` \u6ca1\u8ddf\u4e0a skill\u2192tool \u91cd\u547d\u540d, \u5bfc\u81f4 `ImportError: cannot import name 'load_all_skills'`;\\n4. `_seed_api_endpoints` \u6ca1\u8ddf\u4e0a `20260429_0001` \u52a0\u7684 4 \u4e2a\u8bed\u4e49\u5217 \u2192 contract \u6d4b\u8bd5 round-trip \u4e0d\u4e00\u81f4 + perception/planning \u7684 prompt \u56e0\u6570\u636e\u6b8b\u7f3a\u751f\u6210\u4e0d\u540c\u7684 LLM cache key \u2192 CacheMiss;\\n5. (\u67b6\u6784\u6027) LLM-replay \u6d4b\u8bd5\u548c prompt \u6a21\u677f\u7d27\u8026\u5408, \u4efb\u4f55 prompt \u7f16\u8f91\u90fd\u4f1a\u8ba9 regression \u7ea2 \u2014 \u8ddf PR \u7ea7 CI \u5b88\u95e8\u7684\u8bed\u4e49\u4e0d\u5339\u914d\u3002\\n\\n## Commits\\n\\n| SHA | \u4fee\u590d\u7684\u95ee\u9898 |\\n|---|---|\\n| `7447089` | workflow \u52a0 dummy `QWEN_API_BASE/KEY`, \u8ba9 pydantic Settings \u6821\u9a8c\u901a\u8fc7(regression \u662f `--llm-mode=replay`, \u4e0d\u4f1a\u771f\u6253 Qwen) |\\n| `1650d1d` | workflow \u5728 `alembic upgrade` \u4e4b\u540e\u52a0\u4e00\u6b65 `Seed admin tables`, \u586b `api_endpoints / tools / domains` |\\n| `ada5a14` | `_seed_tools` \u8ddf\u4e0a\u91cd\u547d\u540d: `load_all_skills\u2192load_all_tools`\u3001`SkillRegistry\u2192To\"\n  }\n]\nChanged files:\n[\n  {\n    \"id\": \"github-pr-file-file-6649f8c621025122\",\n    \"filename\": \".github/workflows/regression.yml\",\n    \"label\": \"test_or_ci\",\n    \"status\": \"modified\",\n    \"additions\": 7,\n    \"deletions\": 0,\n    \"changes\": 7,\n    \"blob_url\": \"https://github.com/shizifan/Analytica/blob/42f42d02c17bc1b12ee6d03c2e91a5de7be32aa7/.github%2Fworkflows%2Fregression.yml\"\n  },\n  {\n    \"id\": \"github-pr-file-file-f49b2277597fdf84\",\n    \"filename\": \"migrations/scripts/seed_admin_tables.py\",\n    \"label\": \"schema_or_data\",\n    \"status\": \"modified\",\n    \"additions\": 19,\n    \"deletions\": 15,\n    \"changes\": 34,\n    \"blob_url\": \"https://github.com/shizifan/Analyt\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/shizifan/Analytica", "source_id": "comment-chain-pattern-bad_chains-6005888b6c91ccbd", "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": "shizifan/Analytica", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "weak_supervision"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: shizifan/Analytica"}, "properties": {"repobilityId": 444896, "scanner": "foundry_dataset", "fingerprint": "157d2523fe29da3c2c41045b53fa20d6cb090a2130861b41feb607d02e8c4a2a", "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": "shizifan/Analytica#7", "human_labels": ["security_auth_secret", "ui_or_frontend"], "issue_number": "7", "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": "shizifan/Analytica", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-c79d9a4f7ec8bdf3", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 2, "docs": 2, "schemas": 2, "routes_api": 2}, "source_chain_kind": "issue_chain", "changed_file_count": 2, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"ui_or_frontend": 2}, "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": 4, "design_schema_api_artifact_count": 4}, "text": "Comment chain pattern product: bad_chains\nRepo: shizifan/Analytica\nThread: shizifan/Analytica#7\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: shizifan/Analytica#7\nRepo: shizifan/Analytica\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: 2\nLabels: {'security_auth_secret': 1}\nPolarities: {'bad': 1}\nChanged file labels: {'ui_or_frontend': 2}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-66a915e0eda3307e\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"security_auth_secret\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/shizifan/Analytica/pull/7\",\n    \"text\": \"GitHub feedback: security_auth_secret\\nPolarity: bad\\nKind: pull_request_body\\nRepo: shizifan/Analytica\\nAuthor: shizifan (User)\\nURL: https://github.com/shizifan/Analytica/pull/7\\nTitle: refactor(employees-drawer): one-row-per-employee layout with direct switch\\nBody:\\n## Summary\\n\\nRedesign the \u6570\u5b57\u5458\u5de5 picker so each employee occupies a single row instead of a card in an auto-fill grid:\\n\\n- **Left column** \u2014 avatar + name + version (e.g. `\u8d44 \u8d44\u4ea7\u8bbe\u5907\u4e13\u5bb6 v1.1`)\\n- **Middle column** \u2014 brief description (clamped to 2 lines)\\n- **Right column** \u2014 domain / Tools / FAQs badges\\n- **Far right** \u2014 small `\u8be6\u60c5` button that opens the read-only detail view (preserves access to version history)\\n\\nClicking anywhere else on a row now **switches the employee directly** and closes the drawer (matches the existing `\u901a\u7528\u6a21\u5f0f` behavior). Previously, clicking a card opened the detail view first and required a second click on `\u4f7f\u7528\u8be5\u5458\u5de5` to switch.\\n\\n## Implementation notes\\n\\n- New CSS rules (`.an-emp-list`, `.an-emp-row`, `.an-emp-row-id`, `.an-emp-row-desc`, `.an-emp-row-stats`, `.an-emp-row-info`) added in `frontend/src/styles/tokens.css`. Existing `.an-emp-card` / `.an-emp-grid` rules are left intact since `.an-emp-avatar` / `.an-e\"\n  }\n]\nChanged files:\n[\n  {\n    \"id\": \"github-pr-file-file-4f048e59da7ffd7f\",\n    \"filename\": \"frontend/src/components/ui/EmployeesDrawer/index.tsx\",\n    \"label\": \"ui_or_frontend\",\n    \"status\": \"modified\",\n    \"additions\": 60,\n    \"deletions\": 19,\n    \"changes\": 79,\n    \"blob_url\": \"https://github.com/shizifan/Analytica/blob/1f647295eaa01b224ad17f496154ca8376f84816/frontend%2Fsrc%2Fcomponents%2Fui%2FEmployeesDrawer%2Findex.tsx\"\n  },\n  {\n    \"id\": \"github-pr-file-file-4ee94311d164c5ec\",\n    \"filename\": \"frontend/src/styles/tokens.css\",\n    \"label\": \"ui_or_frontend\",\n    \"status\": \"modified\",\n    \"additions\": 117,\n    \"deletions\": 0,\n    \"changes\": 117,\n    \"blob_url\": \"https://github.com/sh\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/shizifan/Analytica", "source_id": "comment-chain-pattern-bad_chains-fb874e83ebff8121", "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": "shizifan/Analytica", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: shizifan/Analytica"}, "properties": {"repobilityId": 444895, "scanner": "foundry_dataset", "fingerprint": "c82059c7e014a40a50f55beef446bf1406f528e19c43b32d65e30584665a3ecf", "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": "shizifan/Analytica#4", "human_labels": ["agent_instruction_gap", "api_or_backend", "test_or_ci", "ui_or_frontend"], "issue_number": "4", "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": "shizifan/Analytica", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-c612dcab5e6d4bb4", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 2, "docs": 2, "schemas": 2, "routes_api": 2}, "source_chain_kind": "issue_chain", "changed_file_count": 12, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"test_or_ci": 3, "api_or_backend": 6, "ui_or_frontend": 3}, "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"], "linked_ci_commit_count": 0, "verification_artifact_count": 4, "design_schema_api_artifact_count": 4}, "text": "Comment chain pattern product: bad_chains\nRepo: shizifan/Analytica\nThread: shizifan/Analytica#4\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\nChain evidence:\nIssue/PR evidence chain: shizifan/Analytica#4\nRepo: shizifan/Analytica\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: 12\nLabels: {'agent_instruction_gap': 1}\nPolarities: {'bad': 1}\nChanged file labels: {'api_or_backend': 6, 'ui_or_frontend': 3, 'test_or_ci': 3}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-08d6f9d3d45daafd\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"agent_instruction_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/shizifan/Analytica/pull/4\",\n    \"text\": \"GitHub feedback: agent_instruction_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: shizifan/Analytica\\nAuthor: shizifan (User)\\nURL: https://github.com/shizifan/Analytica/pull/4\\nTitle: Claude/quizzical brown 9de797\\nBody:\\n\"\n  }\n]\nChanged files:\n[\n  {\n    \"id\": \"github-pr-file-file-caba8bf99048fa6c\",\n    \"filename\": \"backend/agent/execution.py\",\n    \"label\": \"api_or_backend\",\n    \"status\": \"modified\",\n    \"additions\": 5,\n    \"deletions\": 1,\n    \"changes\": 6,\n    \"blob_url\": \"https://github.com/shizifan/Analytica/blob/12ccce7b0517b9ba6509f249ab0b9362e3bb858a/backend%2Fagent%2Fexecution.py\"\n  },\n  {\n    \"id\": \"github-pr-file-file-7d0fca1464514340\",\n    \"filename\": \"backend/agent/graph.py\",\n    \"label\": \"api_or_backend\",\n    \"status\": \"modified\",\n    \"additions\": 29,\n    \"deletions\": 1,\n    \"changes\": 30,\n    \"blob_url\": \"https://github.com/shizifan/Analytica/blob/12ccce7b0517b9ba6509f249ab0b9362e3bb858a/backend%2Fagent%2Fgraph.py\"\n  },\n  {\n    \"id\": \"github-pr-file-file-bf58983e55d126e8\",\n    \"filename\": \"backend/agent/perception.py\",\n    \"label\": \"api_or_backend\",\n    \"status\": \"modified\",\n    \"additions\": 76,\n    \"deletions\": 35,\n    \"changes\": 111,\n    \"blob_url\": \"https://github.com/shizifan/Analytica/blob/12ccce7b0517b9ba6509f249ab0b9362e3bb858a/backend%2Fagent%2Fperception.py\"\n  },\n  {\n    \"id\": \"github-pr-file-file-574414767f6f3d1a\",\n    \"filename\": \"backend/agent/planning.py\",\n    \"label\": \"api_or_backend\",\n    \"status\": \"modified\",\n    \"additions\": 191,\n    \"deletions\": 100,\n    \"changes\": 291,\n    \"blob_url\": \"https://github.com/shizifan/Analytica/blob/12ccce7b0517b9ba6509f249ab0b9362e3bb858a/backend%2Fagent%2Fplanning.py\"\n  },\n  {\n    \"id\": \"github-pr-file-file-cd13c81fd66a4c61\",\n    \"filename\": \"backend/main.py\",\n    \"label\": \"api_or_backend\",\n    \"status\": \"modified\",\n    \"additions\": 8,\n    \"deletions\": 2,\n    \"changes\": 10,\n    \"blob_url\": \"https://github.com/shi\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/shizifan/Analytica", "source_id": "comment-chain-pattern-bad_chains-74893fdb5bf7bc7e", "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": "shizifan/Analytica", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: shizifan/Analytica"}, "properties": {"repobilityId": 444894, "scanner": "foundry_dataset", "fingerprint": "734b125315845843353c543989a2b99ca1f7672b43b2715c1e9123e554154b3e", "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": "shizifan/Analytica#3", "human_labels": ["agent_instruction_gap", "api_or_backend", "schema_or_data", "source_or_other", "test_or_ci"], "issue_number": "3", "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": "shizifan/Analytica", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-25b73e94801b2598", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 2, "docs": 2, "schemas": 2, "routes_api": 2}, "source_chain_kind": "issue_chain", "changed_file_count": 7, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"test_or_ci": 3, "api_or_backend": 2, "schema_or_data": 1, "source_or_other": 1}, "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"], "linked_ci_commit_count": 0, "verification_artifact_count": 4, "design_schema_api_artifact_count": 4}, "text": "Comment chain pattern product: bad_chains\nRepo: shizifan/Analytica\nThread: shizifan/Analytica#3\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\nChain evidence:\nIssue/PR evidence chain: shizifan/Analytica#3\nRepo: shizifan/Analytica\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: 7\nLabels: {'agent_instruction_gap': 1}\nPolarities: {'bad': 1}\nChanged file labels: {'source_or_other': 1, 'api_or_backend': 2, 'schema_or_data': 1, 'test_or_ci': 3}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-8b04e65f648b23d9\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"agent_instruction_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/shizifan/Analytica/pull/3\",\n    \"text\": \"GitHub feedback: agent_instruction_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: shizifan/Analytica\\nAuthor: shizifan (User)\\nURL: https://github.com/shizifan/Analytica/pull/3\\nTitle: Claude/quizzical brown 9de797\\nBody:\\n\"\n  }\n]\nChanged files:\n[\n  {\n    \"id\": \"github-pr-file-file-f6dab8bab4aa5ef5\",\n    \"filename\": \".gitignore\",\n    \"label\": \"source_or_other\",\n    \"status\": \"modified\",\n    \"additions\": 3,\n    \"deletions\": 0,\n    \"changes\": 3,\n    \"blob_url\": \"https://github.com/shizifan/Analytica/blob/67061c9a9e076f2a3c4317c10798b0ad45e8e878/.gitignore\"\n  },\n  {\n    \"id\": \"github-pr-file-file-f5c9eef59e1b5764\",\n    \"filename\": \"backend/agent/graph.py\",\n    \"label\": \"api_or_backend\",\n    \"status\": \"modified\",\n    \"additions\": 29,\n    \"deletions\": 2,\n    \"changes\": 31,\n    \"blob_url\": \"https://github.com/shizifan/Analytica/blob/67061c9a9e076f2a3c4317c10798b0ad45e8e878/backend%2Fagent%2Fgraph.py\"\n  },\n  {\n    \"id\": \"github-pr-file-file-292a889d08bf163a\",\n    \"filename\": \"backend/agent/planning.py\",\n    \"label\": \"api_or_backend\",\n    \"status\": \"modified\",\n    \"additions\": 440,\n    \"deletions\": 0,\n    \"changes\": 440,\n    \"blob_url\": \"https://github.com/shizifan/Analytica/blob/67061c9a9e076f2a3c4317c10798b0ad45e8e878/backend%2Fagent%2Fplanning.py\"\n  },\n  {\n    \"id\": \"github-pr-file-file-2dbd2f44c8a04516\",\n    \"filename\": \"backend/models/schemas.py\",\n    \"label\": \"schema_or_data\",\n    \"status\": \"modified\",\n    \"additions\": 24,\n    \"deletions\": 0,\n    \"changes\": 24,\n    \"blob_url\": \"https://github.com/shizifan/Analytica/blob/67061c9a9e076f2a3c4317c10798b0ad45e8e878/backend%2Fmodels%2Fschemas.py\"\n  },\n  {\n    \"id\": \"github-pr-file-file-24726350c6308698\",\n    \"filename\": \"tests/contract/test_planning_multiround.py\",\n    \"label\": \"test_or_ci\",\n    \"status\": \"added\",\n    \"additions\": 227,\n    \"deletions\": 0,\n    \"changes\": 227,\n    \"blob_url\": \"https://github.com/sh\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/shizifan/Analytica", "source_id": "comment-chain-pattern-bad_chains-715147a5c666ec7d", "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": "shizifan/Analytica", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: shizifan/Analytica"}, "properties": {"repobilityId": 444893, "scanner": "foundry_dataset", "fingerprint": "9b26cb41f9b7264df5b6c62e628037b736d46bd0da10fd37d776a961c602727f", "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": "shizifan/Analytica#20", "human_labels": ["api_or_backend", "mock_placeholder", "schema_or_data", "source_or_other", "test_or_ci", "ui_or_frontend"], "issue_number": "20", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "claimed_resolved_unverified", "source_backed": true, "max_confidence": 0.65, "repo_full_name": "shizifan/Analytica", "training_usage": "weak_supervision", "confidence_tier": "weak_supervision", "source_chain_id": "evidence-chain-issue_chain-eeb4e1b3e67b7ed9", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 2, "docs": 2, "schemas": 2, "routes_api": 2}, "source_chain_kind": "issue_chain", "changed_file_count": 36, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"test_or_ci": 13, "api_or_backend": 11, "schema_or_data": 2, "ui_or_frontend": 2, "source_or_other": 8}, "linked_commit_count": 4, "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_weak_supervision", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 4, "design_schema_api_artifact_count": 4}, "text": "Comment chain pattern product: bad_chains\nRepo: shizifan/Analytica\nThread: shizifan/Analytica#20\nOutcome: claimed_resolved_unverified\nThread label: thread_has_human_issue_and_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_weak_supervision, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: shizifan/Analytica#20\nRepo: shizifan/Analytica\nThread label: thread_has_human_issue_and_fix_context\nOutcome: claimed_resolved_unverified\nComment count: 1\nLinked commit count: 4\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 36\nLabels: {'mock_placeholder': 1}\nPolarities: {'bad': 1}\nChanged file labels: {'api_or_backend': 11, 'ui_or_frontend': 2, 'schema_or_data': 2, 'test_or_ci': 13, 'source_or_other': 8}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-5a20fade76ae105f\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"mock_placeholder\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/shizifan/Analytica/pull/20\",\n    \"text\": \"GitHub feedback: mock_placeholder\\nPolarity: bad\\nKind: pull_request_body\\nRepo: shizifan/Analytica\\nAuthor: shizifan (User)\\nURL: https://github.com/shizifan/Analytica/pull/20\\nTitle: refactor: \u5220\u9664 registry returns \u5b57\u6bb5\uff0cfield_schema \u6210\u552f\u4e00\u5b57\u6bb5\u8bed\u4e49\u6e90\\nBody:\\n## \u80cc\u666f\\n\\n\u627f\u63a5\u300c\u6cbb\u7406 registry `returns`\u2194`field_schema` \u5b58\u91cf\u4e0d\u4e00\u81f4\u300d(R2 \u62c6\u51fa\u7684 ~49 \u5904)\u3002\u6838\u9a8c\u5398\u6e05\u56db\u65b9\u771f\u503c\u5173\u7cfb\u540e,\u7ed3\u8bba\u662f**\u6574\u4f53\u5220\u9664 `returns`** \u800c\u975e\u9010\u6761\u5bf9\u9f50 \u2014\u2014 `returns` \u662f\u624b\u7ef4\u62a4\u7684\u5b57\u6bb5\u540d\u901f\u8bb0\u4e32,\u65e0\u6821\u9a8c\u3001\u6613\u6f02,\u5728\u4e09\u6e90 SSOT \u4e2d**\u65e0\u6765\u6e90**(`sync_excel_to_json` \u5199\u6b7b `'TODO'`),\u4e14\u4e0e\u7ed3\u6784\u5316 `field_schema` \u4fe1\u606f\u91cd\u590d\u3002\u4e8c\u8005\u4e00\u8d77\u585e\u8fdb\u540c\u4e00\u6279 LLM prompt,`returns` \u4e00\u6f02\u79fb\u5c31\u8ba9 prompt \u81ea\u76f8\u77db\u76fe(\u56fe\u8868\u300c\u540c\u6bd4\u56fe\u53d6 yoyRate\u300d\u4e4b\u7c7b\u9759\u9ed8\u964d\u7ea7\u7684\u75c5\u7076\u6e90\u5934)\u3002\\n\\n## \u56db\u65b9\u771f\u503c\u6a21\u578b(\u672c\u6b21\u5398\u6e05)\\n\\n| \u5b9e\u4f53 | \u89d2\u8272 |\\n|---|---|\\n| `mock_server/prod_data/*.json` \u7684 `data[]` | **\u771f\u5b9e\u8fd4\u56de**(probe \u6293\u771f\u7f51\u5173),ground truth |\\n| `field_schema` | \u4ece\u6293\u5305\u5b57\u6bb5\u751f\u6210,**\u5df2\u9a8c\u8bc1 == prod**(119 \u7aef\u70b9:79 \u5168\u7b49 / 40 \u7a7a\u5feb\u7167\u8d85\u96c6 / 2 \u4e2a mock\u2260prod \u65f6\u8ddf prod);\u4e2d\u6587\u91ca\u4e49 100% \u8986\u76d6\u3001\u8d28\u91cf\u9ad8\u4e8e Excel |\\n| `returns` | \u672c PR \u5220\u9664 |\\n| mock | \u53ef\u80fd\u591a\u585e\u5b57\u6bb5(\u5982 completionRateYTD),\u2260 prod |\\n\\n## \u6539\u52a8(4 \u4e2a\u539f\u5b50 commit)\\n\\n1. **`refactor(registry)`** \u2014 \u5220 119 \u4e2a `returns` \u952e + \u6b8b\u4f59\u5f62\u6001\u6ce8\u89e3\u5e76\u5165 `analysis_note`;\u9000\u5f79 `audit_returns_field_schema.py`;R2/Round11/Round14 \u5951\u7ea6\u65ad\u8a00\u8f6c\u5411 `field_schema`\\n2. **`refactor(agent)`** \u2014 \u79fb\u9664 `ApiEndpoint.returns`;\u7aef\u70b9\u9009\u62e9 / `_param_resolver` \u914d\u8f74 prompt \u4e0e\u8ffd\u8e2a\u9762\u677f\u51fa\u53c2\u6539\u7528 `field_schema`(\u8fde\u5e26\u6839\u6cbb\u300c\u8ffd\u8e2a\u9762\u677f\u663e\u793a\u9519\u5b57\u6bb5\u300d\u75c5\u7076,\u6539\u7531 `column_labels` \u5448\u73b0\u771f\u5b9e\u5217)\\n3. **`refactor(admin)\"\n  }\n]\nChanged files:\n[\n  {\n    \"id\": \"github-pr-file-file-d5ed2fa84316f450\",\n    \"filename\": \"backend/agent/api_registry.py\",\n    \"label\": \"api_or_backend\",\n    \"status\": \"modified\",\n    \"additions\": 0,\n    \"deletions\": 4,\n    \"changes\": 4,\n    \"blob_url\": \"https://github.com/shizifan/Analytica/blob/86a16e9426fa19f7416b0bdec2ef4131bbe8b6fa/backend%2Fagent%2Fapi_registry.py\"\n  },\n  {\n    \"id\": \"github-pr-file-file-55b5130a29bf13ff\",\n    \"filename\": \"backend/main.py\",\n    \"label\": \"api_or_backend\",\n    \"status\": \"modified\",\n    \"additions\": 0,\n    \"deletions\": 1,\n    \"changes\": 1,\n    \"blob_url\": \"https://github.c\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/shizifan/Analytica", "source_id": "comment-chain-pattern-bad_chains-75ab29aa9782af08", "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": "shizifan/Analytica", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "weak_supervision"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: shizifan/Analytica"}, "properties": {"repobilityId": 444892, "scanner": "foundry_dataset", "fingerprint": "b0c464e805fdb7796e574d36226ee06d4ce2def813ffa2fec126e9e0ae2d4ae5", "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": "shizifan/Analytica#2", "human_labels": ["api_or_backend", "dependency_or_build", "test_ci_gap", "test_or_ci", "ui_or_frontend"], "issue_number": "2", "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": "shizifan/Analytica", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-920266905ec54d89", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 2, "docs": 2, "schemas": 2, "routes_api": 2}, "source_chain_kind": "issue_chain", "changed_file_count": 18, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"test_or_ci": 2, "api_or_backend": 5, "ui_or_frontend": 10, "dependency_or_build": 1}, "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": 4, "design_schema_api_artifact_count": 4}, "text": "Comment chain pattern product: bad_chains\nRepo: shizifan/Analytica\nThread: shizifan/Analytica#2\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: shizifan/Analytica#2\nRepo: shizifan/Analytica\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: 18\nLabels: {'test_ci_gap': 1}\nPolarities: {'bad': 1}\nChanged file labels: {'api_or_backend': 5, 'ui_or_frontend': 10, 'dependency_or_build': 1, 'test_or_ci': 2}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-682710c419756f56\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"test_ci_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/shizifan/Analytica/pull/2\",\n    \"text\": \"GitHub feedback: test_ci_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: shizifan/Analytica\\nAuthor: shizifan (User)\\nURL: https://github.com/shizifan/Analytica/pull/2\\nTitle: fix: propagate 'summary' type to all runtime policy tables\\nBody:\\n## \u95ee\u9898\\n\\nPR #1 \u5408\u5e76\u540e CI regression \u4ecd\u5931\u8d25\uff0c\u56e0\u4e3a `\\\"summary\\\"` \u7c7b\u578b\u53ea\u52a0\u5165\u4e86 `TaskType` \u7684 schema \u5b9a\u4e49\uff0c\u4f46\u6267\u884c\u5c42\u548c\u683c\u5f0f\u5316\u5c42\u7684\u591a\u4e2a\u7b56\u7565\u8868\u672a\u540c\u6b65\u66f4\u65b0\u3002\\n\\n## \u4fee\u590d\\n\\n**`backend/agent/planning.py`**\\n- `TYPE_LABELS` \u2014 \u52a0\u5165 `\\\"summary\\\": \\\"\u6c47\u603b\\\"`\\n- `_LAYER_ORDER` \u2014 \u5728 `\\\"visualization\\\"` \u548c `\\\"report_gen\\\"` \u4e4b\u95f4\u63d2\u5165 `\\\"summary\\\"`\\n\\n**`backend/agent/execution.py`**\\n- `_CONCURRENCY_LIMITS` \u2014 `\\\"summary\\\": 1`\uff08\u4e0e report_gen \u540c\u7ea7\uff0c\u4e32\u884c\u6267\u884c\uff09\\n- `_TIMEOUT_PROFILE` \u2014 `\\\"summary\\\": (30, 120, 2.0)`\uff08LLM \u8c03\u7528\uff0c\u4e0e report_gen \u5bf9\u9f50\uff09\\n- `_RETRY_POLICY` \u2014 `\\\"summary\\\": (2, {TIMEOUT, RATE_LIMIT})`\uff08\u4e0e report_gen \u5bf9\u9f50\uff09\\n- `_DEP_POLICY` \u2014 `\\\"summary\\\": \\\"majority\\\"`\uff08\u4f9d\u8d56\u5206\u6790\u5c42\uff0c\u5bb9\u5fcd\u90e8\u5206\u5931\u8d25\uff0c\u4e0e analysis \u5bf9\u9f50\uff09\\n\\nhttps://claude.ai/code/session_01J6VHQxGNFhGbuw2ExEPK1J\\n\\n---\\n_Generated by [Claude Code](https://claude.ai/code/session_01J6VHQxGNFhGbuw2ExEPK1J)_\"\n  }\n]\nChanged files:\n[\n  {\n    \"id\": \"github-pr-file-file-580f8a1645326deb\",\n    \"filename\": \"backend/agent/execution.py\",\n    \"label\": \"api_or_backend\",\n    \"status\": \"modified\",\n    \"additions\": 4,\n    \"deletions\": 0,\n    \"changes\": 4,\n    \"blob_url\": \"https://github.com/shizifan/Analytica/blob/23801fd175dc1da8e204b84c7a169c6d3ed6c324/backend%2Fagent%2Fexecution.py\"\n  },\n  {\n    \"id\": \"github-pr-file-file-1787c7f868cdab0f\",\n    \"filename\": \"backend/agent/plan_templates/asset_investment_equipment_ops.json\",\n    \"label\": \"api_or_backend\",\n    \"status\": \"modified\",\n    \"additions\": 1,\n    \"deletions\": 1,\n    \"changes\": 2,\n    \"blob_url\": \"https://github.com/shizifan/Analytica/blob/23801fd175dc1da8e204b84c7a169c6d3ed6c324/backend%2Fagent%2Fplan_templates%2Fasset_investment_equipment_ops.json\"\n  },\n  {\n    \"id\": \"github-pr-file-file-18fab5f6cb67c25a\",\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/shizifan/Analytica", "source_id": "comment-chain-pattern-bad_chains-255836994c455729", "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": "shizifan/Analytica", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: shizifan/Analytica"}, "properties": {"repobilityId": 444891, "scanner": "foundry_dataset", "fingerprint": "5f02225ced65e2ba86c8b30f583599f2e513b28aaa806f4ed0b80ca08e129dc9", "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": "shizifan/Analytica#19", "human_labels": ["agent_instruction_gap", "api_or_backend", "schema_or_data", "source_or_other", "test_or_ci", "ui_or_frontend"], "issue_number": "19", "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": "shizifan/Analytica", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-723d4bcde458002a", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 2, "docs": 2, "schemas": 2, "routes_api": 2}, "source_chain_kind": "issue_chain", "changed_file_count": 29, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"test_or_ci": 11, "api_or_backend": 10, "schema_or_data": 1, "ui_or_frontend": 6, "source_or_other": 1}, "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"], "linked_ci_commit_count": 0, "verification_artifact_count": 4, "design_schema_api_artifact_count": 4}, "text": "Comment chain pattern product: bad_chains\nRepo: shizifan/Analytica\nThread: shizifan/Analytica#19\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\nChain evidence:\nIssue/PR evidence chain: shizifan/Analytica#19\nRepo: shizifan/Analytica\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: 29\nLabels: {'agent_instruction_gap': 1}\nPolarities: {'bad': 1}\nChanged file labels: {'api_or_backend': 10, 'test_or_ci': 11, 'ui_or_frontend': 6, 'schema_or_data': 1, 'source_or_other': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-b669a8d89ab58c79\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"agent_instruction_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/shizifan/Analytica/pull/19\",\n    \"text\": \"GitHub feedback: agent_instruction_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: shizifan/Analytica\\nAuthor: shizifan (User)\\nURL: https://github.com/shizifan/Analytica/pull/19\\nTitle: \u56fe\u8868\u6570\u636e\u94fe\u8def\u4fee\u590d:\u5bf9\u6bd4/\u5806\u53e0/\u591a\u6e90\u573a\u666f\u9759\u9ed8\u964d\u7ea7\u6cbb\u7406 (R1\u2013R7)\\nBody:\\n## \u80cc\u666f\\n\\n\u56db\u4e2a\u7ebf\u4e0a\u6848\u4f8b(\u8ffd\u8e2a\u9762\u677f\u622a\u56fe)\u6307\u5411**\u540c\u4e00\u79cd\u7cfb\u7edf\u6027\u5931\u6548**:\u5f53\u7528\u6237\u8981\u300c\u5bf9\u6bd4 / \u540c\u6bd4 / \u5806\u53e0 / \u591a\u6e90\u7ed3\u6784\u300d\u8fd9\u7c7b\u591a\u7ef4\u5ea6\u56fe\u8868\u65f6,\u6570\u636e\u5728\u300c\u53d6\u6570 \u2192 \u88c5\u914d \u2192 \u6e32\u67d3\u300d\u94fe\u8def\u4e0a\u88ab\u591a\u5904**\u53d6\u9996\u5f03\u4f59 / \u8bef\u88c1 / \u65e0\u5b9e\u73b0**,\u6700\u7ec8**\u9759\u9ed8\u9000\u5316\u6210\u5355\u5e8f\u5217\u7edd\u5bf9\u503c**,\u800c\u5361\u7247\u6807\u9898\u4ecd\u6302\u7740\u8bef\u5bfc\u6027\u7684\\\"\u5bf9\u6bd4/\u5806\u53e0\\\"\u5b57\u6837,\u5168\u7a0b\u96f6\u62a5\u9519\u3002\\n\\n\u6536\u655b\u51fa 5 \u6761\u8d2f\u7a7f\u6027\u75c5\u7076:**\u9759\u9ed8\u964d\u7ea7 / \u53d6\u9996\u5f03\u4f59 / \u624b\u7ef4\u62a4\u6e05\u5355\u8131\u8282 / \u4fe1\u53f7\u7a7a\u8f6c / \u58f0\u660e\u4e0e\u5b9e\u73b0\u4e0d\u7b26**\u3002\u5b8c\u6574\u6839\u56e0\u5206\u6790\u89c1 `spec/visual/chart_data_pipeline_remediation.md`\u3002\\n\\n## \u56db\u6848 \u2192 R1\u2013R7\\n\\n| \u6848\u4f8b | \u75c7\u72b6 | \u4fee\u590d |\\n|---|---|---|\\n| \u6848 4 | \u540c\u6bd4\u56fe\u5165\u53c2 2026/2025,\u4f46\u53ea\u5269 2026 | **R1** \u53d6\u6570\u540c\u671f\u4e0d\u8bef\u88c1(\u547d\u540d\u89c4\u5f8b\u6d3e\u751f\u53d6\u4ee3\u624b\u7ef4\u62a4\u767d\u540d\u5355 + \u5e74\u7c92\u5ea6\u611f\u77e5);**R2** registry returns \u4e0e prod \u771f\u503c\u5bf9\u9f50 |\\n| \u6848 3 | \u4e09\u7c7b\u6570\u636e\u5168\u8fd4\u56de,\u56fe\u8868\u53ea\u7528\u5176\u4e00,\u4f59\u8005\u6210\u5b64\u513f\u5361 | **R3** \u591a\u6e90 data_refs \u771f\u6b63\u5408\u5e76(\u53d6\u6570\u5c42);**R6** \u89c4\u5212\u5c42\u81ea\u52a8\u8865\u5168 data_refs + prompt \u81ea\u6d3d;**R5** \u524d\u7aef\u6298\u53e0\u5168\u90e8\u6570\u636e\u4f9d\u8d56 |\\n| \u6848 2 | \\\"\u5806\u53e0\u67f1\u56fe\\\"\u753b\u6210\u5355\u6839\u666e\u901a\u67f1 | **R4** \u5b9e\u73b0\u5806\u53e0\u6e32\u67d3(ECharts stack \u952e)+ \u7edf\u4e00 series_by \u62a4\u680f(nunique<2 \u964d\u7ea7 + \u8ffd\u8e2a\u4fe1\u53f7) |\\n| \u6848 1 | display_hint \u663e\u793a bar,\u5b9e\u9645\u6e32\u67d3\u8868\u683c | **R7** display_hint\u2192chart_field_hint \u53bb\u6b7b\u5b57\u6bb5(type/chart_type),\u952e\u540d\u81ea\u89e3\u91ca |\\n\\n## \u7aef\u5230\u7aef\u534f\u540c\\n\\n\u4e00\u5f20\u300c\u591a\u6e90\u5806\u53e0\u7ed3\u6784\u56fe\u300d\u662f\u540c\u4e00\u5f20\u56fe\u7684\u4e0a\u4e0b\u6e38,\u4efb\u4e00\u672a\u4fee\u4ecd\u574f\u2014\u2014\u672c PR \u5168\u94fe\u8def\u6253\u901a:\\n\\n```\\n\u89c4\u5212\u5c42 \u2500[R6]\u2500 \u6b63\u786e\u4e0b\u53d1 data_refs[T1,T2,T3]\\n\u53d6\u6570\u5c42 \u2500[R1]\u2500 \u540c\u671f/\u591a\u671f\u6570\u636e\u4e0d\u88ab\u8bef\u88c1  \u2500[R2]\u2500 \u5b57\u6bb5\u58f0\u660e\u6b63\u786e\\n\u88c5\u914d\u5c42 \u2500[R3]\u2500 \u5408\u5e76 3 \u6e90 \u2192 businessType nunique=3\\n\u6e32\u67d3\u5c42 \u2500[R4]\u2500 \u8bc6\u522b\u7ed3\u6784\u2192stacked\u3001series_by \u8fc7\u62a4\u680f \u2192 \u771f\u5806\u53e0\u67f1\\n\u524d\u7aef   \"\n  }\n]\nChanged files:\n[\n  {\n    \"id\": \"github-pr-file-file-a90ef9298c0848e2\",\n    \"filename\": \"backend/agent/planning.py\",\n    \"label\": \"api_or_backend\",\n    \"status\": \"modified\",\n    \"additions\": 51,\n    \"deletions\": 4,\n    \"changes\": 55,\n    \"blob_url\": \"https://github.com/shizifan/Analytica/blob/a3e15a78aae2dc0f887278827ddb4ae2decf6fe5/backend%2Fagent%2Fplanning.py\"\n  },\n  {\n    \"id\": \"github-pr-file-file-de33f4c021e8b97d\",\n    \"filename\": \"backend/tools/data/_param_resolver.py\",\n    \"label\": \"api_or_backend\",\n    \"status\": \"modified\",\n    \"additions\": 11,\n    \"deletions\": 7,\n    \"changes\": 18,\n    \"blob_url\": \"https\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/shizifan/Analytica", "source_id": "comment-chain-pattern-bad_chains-92084e093cb3c892", "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": "shizifan/Analytica", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: shizifan/Analytica"}, "properties": {"repobilityId": 444890, "scanner": "foundry_dataset", "fingerprint": "61d438e88be79678ebbf37772851d1ce0b03b5865a4f259272e4cd84d1a38b51", "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": "shizifan/Analytica#18", "human_labels": ["api_or_backend", "test_ci_gap", "test_or_ci"], "issue_number": "18", "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": "shizifan/Analytica", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-f2e89baecdd75244", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 2, "docs": 2, "schemas": 2, "routes_api": 2}, "source_chain_kind": "issue_chain", "changed_file_count": 3, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"test_or_ci": 1, "api_or_backend": 2}, "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": 4, "design_schema_api_artifact_count": 4}, "text": "Comment chain pattern product: bad_chains\nRepo: shizifan/Analytica\nThread: shizifan/Analytica#18\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: shizifan/Analytica#18\nRepo: shizifan/Analytica\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: 3\nLabels: {'test_ci_gap': 1}\nPolarities: {'bad': 1}\nChanged file labels: {'api_or_backend': 2, 'test_or_ci': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-9f4fb88b440afed6\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"test_ci_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/shizifan/Analytica/pull/18\",\n    \"text\": \"GitHub feedback: test_ci_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: shizifan/Analytica\\nAuthor: shizifan (User)\\nURL: https://github.com/shizifan/Analytica/pull/18\\nTitle: fix(report): DOCX builder \u9075\u5faa\u4f20\u5165 theme\uff0c\u4fee\u590d master regression\\nBody:\\n## Summary\\n\\n\u4fee\u590d master regression \u7684\u552f\u4e00\u771f\u5b9e\u5931\u8d25\uff1a`tests/contract/test_font_usage_audit.py::test_docx_table_numeric_cells_reference_font_num`\u3002\\n\\n### \u6839\u56e0\\n\\n`71e617b refactor(report): replace HTML/DOCX agent loop with deterministic rendering` \u628a DOCX \u6e32\u67d3\u4ece\u8bfb\u6a21\u5757\u7ea7\u5e38\u91cf\u5207\u5230\u8bfb `theme` \u5bf9\u8c61\uff0c\u4f46\u9057\u7559\u4e24\u5904 builder \u4ecd\u8c03\u7528 `get_theme()`\uff08\u9ed8\u8ba4 LIANGANG\uff09\uff1a\\n\\n- `_docx_elements.py:build_kpi_row` \u2014 \u5ffd\u7565\u8c03\u7528\u65b9 theme\uff0cKPI \u503c\u59cb\u7ec8\u7528 LIANGANG \u5b57\u4f53\\n- `_docx_elements.py:build_growth_indicators` \u2014 \u540c\u4e0a\\n\\n\u526f\u4f5c\u7528\uff1a\u7528 `CORPORATE_BLUE` \u4e3b\u9898\u6e32\u67d3\u65f6\uff0cKPI / \u589e\u957f\u7387\u4ecd\u663e\u793a JetBrains Mono\uff1b`test_font_usage_audit` \u5728\u65ad\u8a00 `T.FONT_NUM`\uff08= LIANGANG.font_num = \\\"JetBrains Mono\\\"\uff09\u65f6\u5de7\u5408\u901a\u8fc7\uff0c\u4f46\u65ad\u8a00 `T.FONT_CN`\uff08= \\\"Noto Serif SC\\\"\uff09\u5931\u8d25\u2014\u2014\u56e0\u4e3a\u6ca1\u6709\u4efb\u4f55\u8def\u5f84\u8ba9 LIANGANG \u7684 font_cn \u5728 CORPORATE_BLUE \u6e32\u67d3\u4e2d\u51fa\u73b0\u3002\\n\\n### \u4fee\u590d\\n\\n1. `build_kpi_row(doc, kpis, *, theme=None)` \u2014 \u52a0 theme \u53c2\u6570\\n2. `build_growth_indicators(doc, growth_rates, *, theme=None)` \u2014 \u52a0 theme \u53c2\u6570\\n3. `_renderers/docx.py` 3 \u5904\u8c03\u7528\u70b9\u900f\u4f20 `self._theme`\\n4. `test_font_usage_audit.py` \u7684 DOCX \u65ad\u8a00\uff1a`T.FONT_*` \u2192 `theme.font_*`\uff0cdocstring \u540c\u6b65\u66f4\u65b0\\n\\n\u5951\u7ea6\u8bed\u4e49\u4e0d\u53d8\uff08\u6570\u5b57\u7528 mono\u3001CJK \u7528 cn\"\n  }\n]\nChanged files:\n[\n  {\n    \"id\": \"github-pr-file-file-a554e8345cbfcb50\",\n    \"filename\": \"backend/tools/report/_docx_elements.py\",\n    \"label\": \"api_or_backend\",\n    \"status\": \"modified\",\n    \"additions\": 9,\n    \"deletions\": 4,\n    \"changes\": 13,\n    \"blob_url\": \"https://github.com/shizifan/Analytica/blob/c2d642fe8c4a9f3ae5552bc349f0b6b24823c354/backend%2Ftools%2Freport%2F_docx_elements.py\"\n  },\n  {\n    \"id\": \"github-pr-file-file-05f914566ef75960\",\n    \"filename\": \"backend/tools/report/_renderers/docx.py\",\n    \"label\": \"api_or_backend\",\n    \"status\": \"modified\",\n    \"additions\": 3,\n    \"deletions\": 3,\n    \"changes\": 6,\n    \"blob_url\": \"https://github.com/shizifan/Analytica\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/shizifan/Analytica", "source_id": "comment-chain-pattern-bad_chains-4895e846c27c8252", "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": "shizifan/Analytica", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: shizifan/Analytica"}, "properties": {"repobilityId": 444889, "scanner": "foundry_dataset", "fingerprint": "ec26c9b69c7d1e828aac33f91a95c7c1a4eb98a49c3fac7b67d48003af4df0b2", "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": "shizifan/Analytica#17", "human_labels": ["security_auth_secret", "test_or_ci"], "issue_number": "17", "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": "shizifan/Analytica", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-c7f2de8498d4691b", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 2, "docs": 2, "schemas": 2, "routes_api": 2}, "source_chain_kind": "issue_chain", "changed_file_count": 1, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"test_or_ci": 1}, "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": 4, "design_schema_api_artifact_count": 4}, "text": "Comment chain pattern product: bad_chains\nRepo: shizifan/Analytica\nThread: shizifan/Analytica#17\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: shizifan/Analytica#17\nRepo: shizifan/Analytica\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: 1\nLabels: {'security_auth_secret': 1}\nPolarities: {'bad': 1}\nChanged file labels: {'test_or_ci': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-bfa5a7fd5580b3e9\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"security_auth_secret\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/shizifan/Analytica/pull/17\",\n    \"text\": \"GitHub feedback: security_auth_secret\\nPolarity: bad\\nKind: pull_request_body\\nRepo: shizifan/Analytica\\nAuthor: shizifan (User)\\nURL: https://github.com/shizifan/Analytica/pull/17\\nTitle: docs(auth): RBAC \u8bbe\u8ba1\u65b9\u6848 v2 \u2014 \u5ba1\u67e5\u53cd\u9988\u4f18\u5316\\nBody:\\n## \u80cc\u666f\\n\\n\u9488\u5bf9 `spec/auth_rbac_sso_design.md`\uff08v1\uff0c1051 \u884c\uff09\u7684\u8bbe\u8ba1\u5ba1\u67e5\uff0c\u5438\u7eb3\u53cd\u9988\u540e\u4ea7\u51fa v2\uff0c\u4ec5\u4fee\u8ba2\u8bbe\u8ba1\u6587\u6863\uff0c**\u4e0d\u542b\u4ee3\u7801\u6539\u52a8**\u3002\\n\\n## \u4e3b\u8981\u53d8\u66f4\\n\\n### \u6570\u636e\u6a21\u578b\\n- `users` \u8868\u65b0\u589e `token_version` \u5217\uff1a\u89d2\u8272/\u6388\u6743\u53d8\u66f4\u65f6 +1 \u5373\u53ef\u4f7f\u5c1a\u672a\u5230\u671f\u7684 access token \u7acb\u5373\u5931\u6548\\n- \u5408\u5e76 `user_domain_grants` + `user_api_grants` \u4e3a\u7edf\u4e00\u7684 `user_grants` \u8868\uff0cschema \u4e0e `api_grant_requests.grant_type/grant_target` \u5b57\u6bb5\u5bf9\u9f50\\n- \u65b0\u589e \u00a74.4 \u5386\u53f2\u6570\u636e\u8fc1\u79fb\u89c4\u5219\uff1a\u4fdd\u7559 `anonymous` \u5360\u4f4d\u7528\u6237\u3001\u4e0d\u52a0 FK\u300130 \u5929\u517c\u5bb9\u7a97\u53e3\\n\\n### \u8ba4\u8bc1\u6d41\u7a0b\\n- JWT payload \u79fb\u9664 `roles/permissions`\uff0c\u4ec5\u4fdd\u7559 `sub/username/token_version` \u2014\u2014 \u907f\u514d\u64a4\u6743\u5ef6\u8fdf\u4e0e payload \u81a8\u80c0\\n- Refresh Token Rotation \u660e\u786e\u300c\u91cd\u7528\u5373\u706d\u65cf\u300d\uff1a\u68c0\u6d4b\u5230\u5df2 revoked \u7684 token \u51fa\u73b0 \u2192 \u6574 family \u64a4\u9500 + audit \u544a\u8b66\\n\\n### \u6743\u9650\u88c5\u8f7d\\n- \u65b0\u589e \u00a76.3 `UserContext` \u7f13\u5b58\u7b56\u7565\uff1a\u8fdb\u7a0b\u5185 TTL 5min + \u6388\u6743\u53d8\u66f4\u4e3b\u52a8\u5931\u6548\uff1b\u591a\u8fdb\u7a0b\u53ef\u5347\u7ea7 Redis\\n- \u00a79.3 \u7b80\u5316\u4e3a\u5355\u8868\u67e5\u8be2\uff0c\u89c4\u5212\u5c42\u4ece `state[\\\"user_context\\\"]` \u76f4\u8bfb\u5df2\u7f13\u5b58\u7684 `authorized_endpoints`\uff0c\u96f6 SQL \u5f00\u9500\\n\\n### \u4e1a\u52a1\u8bed\u4e49\\n- \u00a77.3 \u660e\u786e\u300c\u5458\u5de5\u53ea\u662f\u7aef\u70b9\u58f0\u660e\u96c6\u5408\uff0c\u4e0d\u662f\u6388\u6743\u300d\uff1a\u4f7f\u7528\u5458\u5de5\u65f6\u6309**\u5f53\u524d\u4f7f\u7528\u8005**\u7684\u6388\u6743\u518d\u6821\u9a8c\u4e00\u6b21\\n- \u5171\u4eab\u5458\u5de5\u88ab\u4ed6\u4eba\u4f7f\u7528\u65f6\u6309\u4f7f\u7528\u8005\u6388\u6743\uff08\u4e0d\u662f\u6240\u6709\u8005\uff09\\n\\n### \u63a5\u5165\u5c42\\n- \u00a712.3 WebSocket \u8ba4\u8bc1\u4ece URL query string \u6539\u4e3a\u300c\u8fde\u63a5 + \u9996\u5e27 auth \u6d88\u606f\u300d\u63e1\u624b\uff1btoken \u8fc7\u671f\u53ef\u5728\u957f\u8fde\u63a5\u5185\u7eed\u8ba4\u8bc1\uff0c\u65e0\u9700\u91cd\u8fde\\n\\n### \u5b89\u5168\u52a0\u56fa\\n- \u00a714 \u66b4\u529b\u7834\u89e3\u6539\u4e3a\u591a\u7ef4\u9650\u901f\uff08username \u6307\u6570\u9000\u907f / `(username,IP)` \u7ec4\u5408 / \u5355 IP\uff09\uff0c\u907f\u514d NAT \u8bef\u4f24\\n- CORS \u5f3a\u5236\u767d\u540d\u5355\uff08\u4e0d\"\n  }\n]\nChanged files:\n[\n  {\n    \"id\": \"github-pr-file-file-02c88f99b7239565\",\n    \"filename\": \"spec/auth_rbac_sso_design.md\",\n    \"label\": \"test_or_ci\",\n    \"status\": \"modified\",\n    \"additions\": 291,\n    \"deletions\": 137,\n    \"changes\": 428,\n    \"blob_url\": \"https://github.com/shizifan/Analytica/blob/98d835f0388de6f31b77163c348e1bae1bb60603/spec%2Fauth_rbac_sso_design.md\"\n  }\n]\nLinked chain ids:\n[\"evidence-chain-comment_to_commit-4e9b5f680dbb4975\"]\nSource graph evidence:\nSource evidence repo graph summary\nRepo: shizifan/Analytica\nGraph label: source_backed_multi_signal_graph\nNodes: 16\nEdges: 24\nNode types: {\"cooccurrence_profile\": 1, \"github_repo_summary\": 1, \"helicopter_re\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/shizifan/Analytica", "source_id": "comment-chain-pattern-bad_chains-933e34fceb7a16ce", "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": "shizifan/Analytica", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: shizifan/Analytica"}, "properties": {"repobilityId": 444888, "scanner": "foundry_dataset", "fingerprint": "0a422f3d9c88abd7eb9f0682bfc884bdaeb04f015ddb6d58d99ac09e5a7e5e1e", "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": "shizifan/Analytica#16", "human_labels": ["api_integration_gap", "test_or_ci"], "issue_number": "16", "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": "shizifan/Analytica", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-d5eaec99c1c82f08", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 2, "docs": 2, "schemas": 2, "routes_api": 2}, "source_chain_kind": "issue_chain", "changed_file_count": 2, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"test_or_ci": 2}, "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": 4, "design_schema_api_artifact_count": 4}, "text": "Comment chain pattern product: bad_chains\nRepo: shizifan/Analytica\nThread: shizifan/Analytica#16\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: shizifan/Analytica#16\nRepo: shizifan/Analytica\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: 2\nLabels: {'api_integration_gap': 1}\nPolarities: {'bad': 1}\nChanged file labels: {'test_or_ci': 2}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-9d5c4410877aaed8\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"api_integration_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/shizifan/Analytica/pull/16\",\n    \"text\": \"GitHub feedback: api_integration_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: shizifan/Analytica\\nAuthor: shizifan (User)\\nURL: https://github.com/shizifan/Analytica/pull/16\\nTitle: docs(spec): V6 \u591a\u8f6e\u5bf9\u8bdd\u65b9\u6848\u8865\u5145\u4e09\u9879\u8bbe\u8ba1\u51b3\u7b56\\nBody:\\n## Summary\\n\\n\u628a\u4e09\u9879\u8bbe\u8ba1\u51b3\u7b56\u843d\u5230 `spec/optimize_multiturn_conversation.md`\uff1a\\n\\n- **\u672c\u5730\u5b58\u50a8\u4f18\u5148**\uff1a\u6cbf\u7528\u539f\u8bbe\u8ba1\uff0c\u4e0d\u9884\u7559\u5206\u5e03\u5f0f\u5b58\u50a8\u62bd\u8c61\u5c42\u3002\\n- **\u4e0d\u517c\u5bb9\u5386\u53f2 session**\uff1a\u5f00\u53d1\u671f\u4e00\u6b21\u6027\u5207\u6362\uff0c\u5220\u9664 `backfill_from_analysis_history` \u903b\u8f91\u3001`schema_version` \u5b57\u6bb5\u3001`status=\\\"backfilled\\\"` \u679a\u4e3e\uff1balembic \u8fc1\u79fb\u4ec5\u52a0\u5217\uff1b\u00a75.2.6 \u91cd\u5199\u4e3a\\\"\u4e0d\u505a\u517c\u5bb9\\\"\u58f0\u660e\uff1b\u00a711 R10 \u5220\u9664\u3002\\n- **\u5931\u8d25\u663e\u5f0f\u5316\uff08\u4e0d\u5141\u8bb8\u9690\u5f0f\u964d\u7ea7\uff09**\uff1a\u00a72 \u52a0\u5165\u8bbe\u8ba1\u539f\u5219\uff1bunserializable / failed / missing \u6761\u76ee\u6539\u4e3a\u7a7f\u900f\u4e3a task \u5931\u8d25\uff0cprompt \u4e2d\u663e\u5f0f\u6e32\u67d3\u800c\u975e\u9759\u9ed8\u8fc7\u6ee4\uff1b\u843d\u76d8\u5f02\u5e38\u5fc5\u987b\u7ffb task \u5931\u8d25\uff1b\u00a76.1.3 \u65b0\u589e new \u6a21\u5f0f\u8de8\u8f6e `data_ref` \u7684 `PlanValidationError` \u786c\u7ea6\u675f\uff1b\u00a712 \u65b0\u589e\\\"\u65e0\u9690\u5f0f\u964d\u7ea7\u5ba1\u8ba1\\\"\u9a8c\u6536\u9879\u3002\\n\\n\u51c0\u6539\u52a8\uff1aspec \u5355\u6587\u4ef6 +81 / \u221274 \u884c\uff08\u51c0\u589e 7 \u884c\uff09\u3002\\n\\n## Test plan\\n\\n\u672c PR \u4ec5\u4fee\u6539 spec \u6587\u6863\uff0c\u4e0d\u542b\u4ee3\u7801\u6539\u52a8\u3002\u540e\u7eed\u5b9e\u65bd V6 \u65f6\u6309 \u00a713.3 \u7684 7 \u4e2a commit \u8fb9\u754c\u843d\u5730\uff0c\u5bf9\u5e94\u6d4b\u8bd5\u5728\u4ee5\u4e0b\u6587\u4ef6\u4e2d\uff1a\\n\\n- [ ] `tests/unit/test_session_workspace.py`\uff08\u542b\u65b0\u589e\u7684\\\"\u5931\u8d25\u6761\u76ee\u663e\u5f0f\u53ef\u89c1\\\"\u6d4b\u8bd5\uff09\\n- [ ] `tests/unit/test_planning_blocks_cross_turn_ref_in_new_topic.py`\uff08new \u6a21\u5f0f\u786c\u7ea6\u675f\uff09\\n- [ ] `tests/integration/test_amend_data_fidelity.py` / `test_continue_data_reuse.py`\\n- [ ] `tests/integration/test_multiturn_clarification_continuity.py`\\n- [ ] \u00a712 \u9a8c\u6536 #11 \u7684 silent fallback \u4eba\u5de5\u5ba1\u8ba1\u6e05\u5355\\n\\nhttps://claude.ai/code/session_01PpsYWHbBih9CSSWynSucpT\\n\\n---\\n_Gener\"\n  }\n]\nChanged files:\n[\n  {\n    \"id\": \"github-pr-file-file-a13a28a7d04adf10\",\n    \"filename\": \"spec/optimize_multiturn_conversation.md\",\n    \"label\": \"test_or_ci\",\n    \"status\": \"modified\",\n    \"additions\": 81,\n    \"deletions\": 74,\n    \"changes\": 155,\n    \"blob_url\": \"https://github.com/shizifan/Analytica/blob/8481dca1f1685d4143c137164c17d496ed65ccab/spec%2Foptimize_multiturn_conversation.md\"\n  },\n  {\n    \"id\": \"github-pr-file-file-f65aa8720b10eed7\",\n    \"filename\": \"spec/optimize_multiturn_conversation_session_plan.md\",\n    \"label\": \"test_or_ci\",\n    \"status\": \"added\",\n    \"additions\": 306,\n    \"deletions\": 0,\n    \"changes\": 306,\n    \"blob_url\": \"https://github.com/shizifan/\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/shizifan/Analytica", "source_id": "comment-chain-pattern-bad_chains-d572c987b1b76030", "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": "shizifan/Analytica", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: shizifan/Analytica"}, "properties": {"repobilityId": 444887, "scanner": "foundry_dataset", "fingerprint": "e3cb03b11a3ebf9ee3cd598a4dcebd262bb9dc2cf2c5ded3a214ac33e9baa4b5", "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": "shizifan/Analytica#15", "human_labels": ["data_schema_persistence", "test_or_ci"], "issue_number": "15", "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": "shizifan/Analytica", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-bcf0c239aba94467", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 2, "docs": 2, "schemas": 2, "routes_api": 2}, "source_chain_kind": "issue_chain", "changed_file_count": 1, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"test_or_ci": 1}, "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": 4, "design_schema_api_artifact_count": 4}, "text": "Comment chain pattern product: bad_chains\nRepo: shizifan/Analytica\nThread: shizifan/Analytica#15\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: shizifan/Analytica#15\nRepo: shizifan/Analytica\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: 1\nLabels: {'data_schema_persistence': 1}\nPolarities: {'bad': 1}\nChanged file labels: {'test_or_ci': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-b706747ab01ba202\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"data_schema_persistence\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/shizifan/Analytica/pull/15\",\n    \"text\": \"GitHub feedback: data_schema_persistence\\nPolarity: bad\\nKind: pull_request_body\\nRepo: shizifan/Analytica\\nAuthor: shizifan (User)\\nURL: https://github.com/shizifan/Analytica/pull/15\\nTitle: docs(spec): \u4e92\u8054\u7f51\u641c\u7d22\u4f18\u5316\u65b9\u6848\uff08\u4fee\u8ba2\u7248\uff09\\nBody:\\n## Summary\\n- \u65b0\u589e `spec/optimize_web_search.md`\uff0c\u6c89\u6dc0\u4e92\u8054\u7f51\u641c\u7d22\u529f\u80fd\u4f18\u5316\u65b9\u6848\uff08\u4fee\u8ba2\u7248\uff09\\n- \u6838\u5fc3\u601d\u8def\uff1a**\u5355\u6bb5 LLM \u89c4\u5212 + \u5206\u5c42\u4e0a\u4e0b\u6587 + \u8131\u654f Gate + \u7528\u6237\u786e\u8ba4 Gate**\\n- \u8986\u76d6\u56db\u4e2a\u95ee\u9898\uff1a\u786c\u7f16\u7801\u3001Query \u8d28\u91cf\u3001\u7a33\u5b9a\u6027\u3001\u5458\u5de5\u4fe1\u606f\u8026\u5408\\n\\n## \u5173\u952e\u51b3\u7b56\\n- **\u4e0d\u62c6\u4e24\u6bb5 LLM**\uff1aquery \u89c4\u5212\u7559\u5728\u5355\u6b21 LLM \u8c03\u7528\u5185\uff0c\u907f\u514d\u8fc7\u91cd\u8bbe\u8ba1\\n- **\u8fbd\u6e2f\u96c6\u56e2\u80cc\u666f\u4f5c\u4e3a\u5fc5\u5907\u5e95\u5ea7**\uff1a\u5458\u5de5 Cookbook \u7f3a\u5931\u4e5f\u80fd\u8dd1\uff0c\u4ec5\u4f5c\u53ef\u9009\u5c42\u589e\u76ca\\n- **Cookbook \u6781\u7b80\u6269\u5c55**\uff1a\u53ea\u65b0\u589e `search_public_hint` \u4e00\u4e2a\u53ef\u9009\u5b57\u6bb5\uff1b\u62e6\u622a\u8d23\u4efb\u4e0b\u6c89\u5230\u8131\u654f gate\\n- **\u591a\u8f6e\u68c0\u7d22\u8c41\u514d\u786e\u8ba4**\uff1a\u7b2c\u4e8c\u8f6e\u8d77\u8df3\u8fc7\u7528\u6237\u786e\u8ba4\uff0c\u4f46\u4ecd\u8fc7\u8131\u654f\uff0c\u9650\u5236\u4eba\u5de5\u4ecb\u5165\u5f00\u9500 \u2264 1 \u6b21\\n- **Provider \u62bd\u8c61 + \u4e3b\u5907 + \u7f13\u5b58**\uff1a\u89e3\u51b3\u7a33\u5b9a\u6027\\n\\n## PR \u62c6\u5206\\nPR-1 \u57fa\u7840\u91cd\u6784\uff08provider \u62bd\u8c61\u3001search \u4e13\u5c5e retry/timeout\u3001stub \u8fc1\u51fa\uff09\\nPR-2 \u63a5\u5165 Tavily + \u5907\u4efd provider + \u7f13\u5b58 + dedupe\\nPR-3 \u5355\u6bb5 LLM Query \u89c4\u5212 + \u8131\u654f Gate\\nPR-4 \u7528\u6237\u786e\u8ba4 Gate\uff08WS \u4e8b\u4ef6 + \u524d\u7aef UI + \u5f00\u5173\uff09\\nPR-5 \u591a\u8f6e\u68c0\u7d22 + \u5408\u6210 summary + citations\\nPR-6 \u79bb\u7ebf\u8bc4\u6d4b\\n\\nPR-1 + PR-3 \u4e3a\u6700\u5c0f\u53ef\u7528\u95ed\u73af\u3002\\n\\n## Test plan\\n- [ ] \u6587\u6863 review\uff1a\u65b9\u6848\u662f\u5426\u8986\u76d6\u4e09\u4e2a\u539f\u59cb\u95ee\u9898 + \u5458\u5de5\u8026\u5408\u8ffd\u52a0\u95ee\u9898\\n- [ ] PR \u62c6\u5206\u7c92\u5ea6\u662f\u5426\u5408\u7406\uff08\u72ec\u7acb\u53ef\u5408\u5165\uff09\\n- [ ] Cookbook schema \u6539\u52a8\uff08`search_public_hint`\uff09\u662f\u5426\u80fd\u7531\u73b0\u6709\u5458\u5de5\u65b9\u63a5\u53d7\\n\\n\\n---\\n_Generated by [Claude Code](https://claude.ai/code/session_015VmQp7qNV5pmGgsY3EeVV1)_\"\n  }\n]\nChanged files:\n[\n  {\n    \"id\": \"github-pr-file-file-1398ac61d422ef15\",\n    \"filename\": \"spec/optimize_web_search.md\",\n    \"label\": \"test_or_ci\",\n    \"status\": \"added\",\n    \"additions\": 287,\n    \"deletions\": 0,\n    \"changes\": 287,\n    \"blob_url\": \"https://github.com/shizifan/Analytica/blob/b3022f1cfcedb35c7aa515eb3a1414001ac03a1b/spec%2Foptimize_web_search.md\"\n  }\n]\nLinked chain ids:\n[\"evidence-chain-comment_to_commit-587e82d4018845e2\"]\nSource graph evidence:\nSource evidence repo graph summary\nRepo: shizifan/Analytica\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\": 2, \"\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/shizifan/Analytica", "source_id": "comment-chain-pattern-bad_chains-84ba3595c1cc561a", "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": "shizifan/Analytica", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: shizifan/Analytica"}, "properties": {"repobilityId": 444886, "scanner": "foundry_dataset", "fingerprint": "ea5d855d37bbd7fd27b298b5d6213907af6a1a34610b8f5b9c6eaf116fa59145", "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": "shizifan/Analytica#14", "human_labels": ["agent_instruction_gap", "api_or_backend"], "issue_number": "14", "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": "shizifan/Analytica", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-d85c3333f59db198", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 2, "docs": 2, "schemas": 2, "routes_api": 2}, "source_chain_kind": "issue_chain", "changed_file_count": 1, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"api_or_backend": 1}, "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"], "linked_ci_commit_count": 0, "verification_artifact_count": 4, "design_schema_api_artifact_count": 4}, "text": "Comment chain pattern product: bad_chains\nRepo: shizifan/Analytica\nThread: shizifan/Analytica#14\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\nChain evidence:\nIssue/PR evidence chain: shizifan/Analytica#14\nRepo: shizifan/Analytica\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: 1\nLabels: {'agent_instruction_gap': 1}\nPolarities: {'bad': 1}\nChanged file labels: {'api_or_backend': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-6fb53d875a3084f1\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"agent_instruction_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/shizifan/Analytica/pull/14\",\n    \"text\": \"GitHub feedback: agent_instruction_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: shizifan/Analytica\\nAuthor: shizifan (User)\\nURL: https://github.com/shizifan/Analytica/pull/14\\nTitle: fix(planning): generic planning_node \u6ce8\u5165\u5458\u5de5\u57df\u8fc7\u6ee4\u4e0e\u89c4\u5212 hints\\nBody:\\n## Summary\\n- `backend/agent/graph.py` \u7684\u901a\u7528 `planning_node` \u6b64\u524d\u4ec5\u5411 `PlanningEngine.generate_plan` \u4f20\u5165 `intent` \u548c `employee_id`\uff0c\u672a\u4f20 `allowed_tools` / `allowed_endpoints` / `prompt_suffix` / `rule_hints`\u3002\\n- \u7ed3\u679c\u662f\uff1a\u5f53\u4f1a\u8bdd\u7ed1\u5b9a\u5458\u5de5\u4f46\u8d70\u901a\u7528\u56fe\u8def\u5f84\u65f6\uff0c\u89c4\u5212\u63d0\u793a\u8bcd\u7f3a\u5c11\u5458\u5de5\u767d\u540d\u5355\u548c\\\"\u8054\u7f51\u641c\u7d22\\\"\u7b49 rule_hints\uff0c\u53ef\u9009\u5de5\u5177 `tool_web_search` \u56e0\u6b64\u4e0d\u4f1a\u51fa\u73b0\u5728\u751f\u6210\u7684\u8ba1\u5212\u4e2d\u3002\\n- \u5bf9\u9f50 `backend/employees/graph_factory.py:55-62` \u7684 `emp_planning_node` \u2014\u2014 \u5728 `employee_id` \u5b58\u5728\u65f6\u901a\u8fc7 `EmployeeManager` \u53d6\u51fa profile\uff0c\u5c06\u767d\u540d\u5355\u4e0e hints \u4e00\u5e76\u4e0b\u53d1\u7ed9 planner\u3002\\n\\n## Test plan\\n- [ ] \u7ed1\u5b9a\u5305\u542b `tool_web_search` \u7684\u5458\u5de5\uff08\u5982 throughput_analyst\uff09\uff0c\u7528\u9700\u8981\u5916\u90e8\u4fe1\u606f\u7684 query \u89e6\u53d1\u89c4\u5212\uff0c\u786e\u8ba4 `tool_web_search` \u4efb\u52a1\u51fa\u73b0\u5728\u8ba1\u5212\u4e2d\\n- [ ] \u4e0d\u7ed1\u5b9a\u5458\u5de5\u7684\u901a\u7528\u8def\u5f84\u56de\u5f52\u4e00\u904d\uff0c\u786e\u8ba4\u65e0 profile \u65f6\u4ecd\u80fd\u6b63\u5e38\u751f\u6210\u8ba1\u5212\uff08fallback \u5230\u9ed8\u8ba4\u5168\u91cf\u5de5\u5177\u96c6\uff09\\n- [ ] \u8dd1\u4e00\u6b21 planning \u76f8\u5173\u5355\u6d4b\\n\\nhttps://claude.ai/code/session_016Nu4SW83k5iEHpFi5ze6XS\\n\\n---\\n_Generated by [Claude Code](https://claude.ai/code/session_016Nu4SW83k5iEHpFi5ze6XS)_\"\n  }\n]\nChanged files:\n[\n  {\n    \"id\": \"github-pr-file-file-205cc12e440db62c\",\n    \"filename\": \"backend/agent/graph.py\",\n    \"label\": \"api_or_backend\",\n    \"status\": \"modified\",\n    \"additions\": 25,\n    \"deletions\": 1,\n    \"changes\": 26,\n    \"blob_url\": \"https://github.com/shizifan/Analytica/blob/4f5cf7e4c35c782bd68c71fdd48a24bdbf718e13/backend%2Fagent%2Fgraph.py\"\n  }\n]\nLinked chain ids:\n[\"evidence-chain-comment_to_commit-079db4534d7265cd\"]\nSource graph evidence:\nSource evidence repo graph summary\nRepo: shizifan/Analytica\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\": 2, \"artifact_supports_design_schema_api\": 2, \"artifact_supports_verification\": 4, \"repo_has_cooccur\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/shizifan/Analytica", "source_id": "comment-chain-pattern-bad_chains-e1557652a9624cad", "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": "shizifan/Analytica", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: shizifan/Analytica"}, "properties": {"repobilityId": 444885, "scanner": "foundry_dataset", "fingerprint": "130e4b92094e8c0490933a0473c9516a4addd0a442d08253175216b34dc8ef35", "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": "shizifan/Analytica#13", "human_labels": ["agent_instruction_gap", "test_or_ci"], "issue_number": "13", "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": "shizifan/Analytica", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-6e1068f58349a728", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 2, "docs": 2, "schemas": 2, "routes_api": 2}, "source_chain_kind": "issue_chain", "changed_file_count": 1, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"test_or_ci": 1}, "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"], "linked_ci_commit_count": 0, "verification_artifact_count": 4, "design_schema_api_artifact_count": 4}, "text": "Comment chain pattern product: bad_chains\nRepo: shizifan/Analytica\nThread: shizifan/Analytica#13\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\nChain evidence:\nIssue/PR evidence chain: shizifan/Analytica#13\nRepo: shizifan/Analytica\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: 1\nLabels: {'agent_instruction_gap': 1}\nPolarities: {'bad': 1}\nChanged file labels: {'test_or_ci': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-b7687f36d28e6bc3\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"agent_instruction_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/shizifan/Analytica/pull/13\",\n    \"text\": \"GitHub feedback: agent_instruction_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: shizifan/Analytica\\nAuthor: shizifan (User)\\nURL: https://github.com/shizifan/Analytica/pull/13\\nTitle: docs(spec): tool_anomaly \u5f02\u5e38\u68c0\u6d4b\u6280\u80fd\u5b9e\u65bd\u65b9\u6848\\nBody:\\n## Summary\\n\\n- \u73b0\u72b6\u76d8\u70b9\uff1a`tool_anomaly` \u7f16\u6392/\u89c4\u5219/\u6743\u9650/\u6d4b\u8bd5\u5df2 100% \u63a5\u5165\uff0c\u4f46\u5b9e\u73b0\u4ec5 22 \u884c stub\uff08`backend/tools/analysis/anomaly.py`\uff09\uff0cLLM \u89c4\u5212\u4efb\u52a1\u65f6\u9759\u9ed8\u8fd4\u56de `anomalies: []`\u3002\\n- \u6570\u636e\u6478\u5e95\uff1a\u57fa\u4e8e `data/api_registry.json` 141 \u7aef\u70b9\u7edf\u8ba1\uff0c\u8bc6\u522b\u51fa 5 \u7c7b\u5178\u578b\u5f62\u6001\uff08\u77ed\u6708\u5ea6\u5e8f\u5217 / \u591a\u5b9e\u4f53\u5e8f\u5217 / \u622a\u9762\u5feb\u7167 / \u9884\u8ba1\u7b97 yoy/mom / KPI \u8fdb\u5ea6\u5dee\uff09\uff0c\u660e\u786e\u5e8f\u5217\u666e\u904d \u226416 \u70b9\uff0c**\u4e0d\u9002\u7528** ARIMA/STL/Isolation Forest\u3002\\n- \u65b9\u6848\u843d\u76d8\uff1a\u65b0\u589e `spec/tool_anomaly_design.md`\uff08677 \u884c\uff09\uff0c\u91c7\u7528 detector \u5f62\u6001\u5206\u6d3e + LLM \u89e3\u91ca\u7684\u8f7b\u91cf\u67b6\u6784\uff0c\u4e0e `tool_desc_analysis` \u540c\u9aa8\u67b6\uff0c\u590d\u7528 `_column_selector` / `_data_summarizer` / `invoke_llm` / `_src_ref` \u591a\u6e90\u62c6\u5206\u3002\\n\\n## \u65b9\u6848\u8981\u70b9\\n\\n- **5 \u4e2a detector**\uff1arolling z-score / \u591a\u5b9e\u4f53\u5206\u7ec4 + \u672b\u70b9\u622a\u9762 / MAD outlier / \u9884\u8ba1\u7b97 yoy-mom \u9608\u503c / KPI \u8fdb\u5ea6\u5dee\\n- **\u9608\u503c\u96c6\u4e2d\u53c2\u6570\u5316**\uff1aZ_MODERATE=2.5\u3001MoM \u00b130/50%\u3001YoY \u00b150/100%\u3001MAD>3.5\u3001progress_gap>10/20pp\\n- **LLM \u9636\u6bb5**\uff1a\u4ec5\u505a likely_cause / narrative / overall_risk_level \u89e3\u91ca\uff0c\u7edf\u8ba1\u5c42\u5931\u8d25\u524d\u7f6e\u8fc7\u6ee4\\n- **\u8f93\u51fa\u5951\u7ea6**\uff1a\u4e0e descriptive/attribution \u5bf9\u9f50\uff08narrative / summary / metadata.rows_analyzed\uff09\\n- **status \u51b3\u7b56\u8868**\uff1aLLM \u5931\u8d25\u65f6 status=partial\uff0c\u7edf\u8ba1\u7ed3\u679c\u7167\u5e38\u8fd4\u56de\uff0c\u907f\u514d\u9759\u9ed8\u541e\u9519\\n- **\u4e0d\u52a8**\uff1a`_complexity_rules.py` / `planning.py` / `employees/*.yaml` / `tests/contract/test_complexity\"\n  }\n]\nChanged files:\n[\n  {\n    \"id\": \"github-pr-file-file-a480d31e53961c44\",\n    \"filename\": \"spec/tool_anomaly_design.md\",\n    \"label\": \"test_or_ci\",\n    \"status\": \"added\",\n    \"additions\": 677,\n    \"deletions\": 0,\n    \"changes\": 677,\n    \"blob_url\": \"https://github.com/shizifan/Analytica/blob/3062e94271e2806fa1775e1506fefe9fffffa2d9/spec%2Ftool_anomaly_design.md\"\n  }\n]\nLinked chain ids:\n[\"evidence-chain-comment_to_commit-b48b69a18a9b132f\"]\nSource graph evidence:\nSource evidence repo graph summary\nRepo: shizifan/Analytica\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_\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/shizifan/Analytica", "source_id": "comment-chain-pattern-bad_chains-7e80cb4ed7444cc4", "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": "shizifan/Analytica", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: shizifan/Analytica"}, "properties": {"repobilityId": 444884, "scanner": "foundry_dataset", "fingerprint": "6d36e2b566f582cf34d40a5f8d2285a5c75c9bbe652c94dc6d14f2fd2d559443", "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": "shizifan/Analytica#12", "human_labels": ["security_auth_secret", "test_or_ci"], "issue_number": "12", "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": "shizifan/Analytica", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-113f77040197220f", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 2, "docs": 2, "schemas": 2, "routes_api": 2}, "source_chain_kind": "issue_chain", "changed_file_count": 1, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"test_or_ci": 1}, "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": 4, "design_schema_api_artifact_count": 4}, "text": "Comment chain pattern product: bad_chains\nRepo: shizifan/Analytica\nThread: shizifan/Analytica#12\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: shizifan/Analytica#12\nRepo: shizifan/Analytica\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: 1\nLabels: {'security_auth_secret': 1}\nPolarities: {'bad': 1}\nChanged file labels: {'test_or_ci': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-fd6527b5fcbf11cb\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"security_auth_secret\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/shizifan/Analytica/pull/12\",\n    \"text\": \"GitHub feedback: security_auth_secret\\nPolarity: bad\\nKind: pull_request_body\\nRepo: shizifan/Analytica\\nAuthor: shizifan (User)\\nURL: https://github.com/shizifan/Analytica/pull/12\\nTitle: docs(spec): \u8fbd\u6e2f\u6570\u636e\u671f\u520a\u8de8\u683c\u5f0f\u8bbe\u8ba1\u5b9e\u65bd\u65b9\u6848\\nBody:\\n## Summary\\n\\n- \u65b0\u589e `spec/liangang_journal_design_plan.md`\uff081131 \u884c\uff09\uff0c\u5b9a\u4e49 HTML / DOCX / PPTX \u4e09\u79cd\u62a5\u544a\u8f93\u51fa\u683c\u5f0f\u7edf\u4e00\u5207\u6362\u5230\\\"\u7f16\u8f91\u578b / \u6570\u636e\u671f\u520a\\\"\u89c6\u89c9\u7cfb\u7edf\u7684\u5b8c\u6574\u5b9e\u65bd\u89c4\u8303\\n- \u89c6\u89c9\u57fa\u8c03\u5bf9\u5e94\u8fbd\u6e2f\u96c6\u56e2 VI \u6807\u51c6\u8272\uff08PANTONE 293 C \u6df1\u84dd + PANTONE 872 U \u53e4\u94dc\uff09\\n- **\u672c PR \u4ec5\u843d\u76d8\u8bbe\u8ba1\u6587\u6863\uff0c\u4e0d\u5305\u542b\u4efb\u4f55\u4ee3\u7801\u6539\u52a8**\\n\\n## \u5df2\u9501\u5b9a\u51b3\u7b56\\n\\n| # | \u51b3\u7b56\u9879 | \u53d6\u503c |\\n|---|---|---|\\n| 1 | \u5f3a\u8c03\u8272 | \u8fbd\u6e2f VI \u6807\u51c6\u8272\uff08\u6df1\u84dd #004889 + \u53e4\u94dc #AC916B\uff09 |\\n| 2 | \u6574\u4f53\u65b9\u5411 | \u7f16\u8f91\u578b / \u6570\u636e\u671f\u520a |\\n| 3 | \u4e3b\u8f74\u5e03\u5c40 | \u7eb5\u5411 |\\n| 4 | \u8868\u683c\u7b56\u7565 | \u51cf\u91cf\u5448\u73b0\uff0c\u4e3b\u6d41\u9ed8\u8ba4\u6298\u53e0 |\\n| 5 | PPTX \u6bd4\u4f8b | 16:9 |\\n| 6 | DOCX \u6298\u53e0\u5c42 | \u7ae0\u672b\u9644\u5f55 |\\n| 7 | PPTX \u9644\u5f55 deck | \u9ed8\u8ba4\u5f00\u542f |\\n| 8 | PR \u62c6\u5206 | \u56db\u6bb5\uff08\u57fa\u7840 \u2192 HTML \u2192 DOCX \u2192 PPTX\uff09 |\\n\\n## \u6587\u6863\u7ae0\u8282\\n\\n- \u00a70 \u51b3\u7b56\u8bb0\u5f55\\n- \u00a71 \u5171\u4eab token\uff08\u989c\u8272 / \u5b57\u4f53 / \u5b57\u53f7 / \u56fe\u8868\u8272\u677f\uff09\\n- \u00a72 \u5b57\u4f53\u7b56\u7565\uff08Dockerfile / \u542f\u52a8\u81ea\u68c0 / \u591a\u7ea7 fallback\uff09\\n- \u00a73 \u8de8\u683c\u5f0f\u5143\u7d20\u6620\u5c04\u603b\u8868\\n- \u00a74 HTML \u5b9e\u65bd\u7ec6\u8282\uff08\u542b\u4fee\u590d chart-table \u91cd\u53e0 bug \u7684 RAF \u5305\u88f9\u65b9\u6848\uff09\\n- \u00a75 DOCX \u5b9e\u65bd\u7ec6\u8282\uff08styles.xml / hairline \u8868 / KPI strip / drop cap / \u7ae0\u672b\u9644\u5f55 buffering \u6a21\u578b\uff09\\n- \u00a76 PPTX \u5b9e\u65bd\u7ec6\u8282\uff0816:9 \u6bcd\u7248 / 10 \u7c7b slide / pptxgenjs \u4e3b\u9898 / \u9644\u5f55 deck\uff09\\n- \u00a77 \u5171\u4eab\u5c42 Python \u6539\u52a8\\n- \u00a78 \u8868\u683c\u7b80\u5316\u7684\u6570\u636e\u5f62\u6001\u5206\u6d41\\n- \u00a79 \u56db\u6bb5 PR \u62c6\u5206\u8ba1\u5212\\n- \u00a710 \u6d4b\u8bd5\u7b56\u7565\\n- \u00a711 \u98ce\u9669\u767b\u8bb0\u518c\uff0812 \u9879\uff09\\n- \u00a712 \u5b9e\u65bd\u524d\u7f6e\u4efb\u52a1\\n- \u00a713 / \u00a714 \u5b8c\u6574 Theme \u5b9a\u4e49 + \u53c2\u8003\u6587\u732e\\n\\n## \u540e\u7eed\u52a8\u4f5c\\n\\n\u5408\u5165\u540e\u6309 \u00a79 \u62c6\u5206\u4f9d\u6b21\u53d1\u8d77 PR-1\uff08\u5171\u4eab\u57fa\u7840\u8bbe\u65bd\uff09\u2192 PR-2\uff08HTML\uff09\u2192 PR-3\uff08DOCX\"\n  }\n]\nChanged files:\n[\n  {\n    \"id\": \"github-pr-file-file-414d10b6729cf443\",\n    \"filename\": \"spec/liangang_journal_design_plan.md\",\n    \"label\": \"test_or_ci\",\n    \"status\": \"added\",\n    \"additions\": 1131,\n    \"deletions\": 0,\n    \"changes\": 1131,\n    \"blob_url\": \"https://github.com/shizifan/Analytica/blob/99311f2b27851a8f396d730766b64ae76d4e089d/spec%2Fliangang_journal_design_plan.md\"\n  }\n]\nLinked chain ids:\n[\"evidence-chain-comment_to_commit-ef37d1d558c0dd4a\"]\nSource graph evidence:\nSource evidence repo graph summary\nRepo: shizifan/Analytica\nGraph label: source_backed_multi_signal_graph\nNodes: 16\nEdges: 24\nNode types: {\"cooccurrence_profile\": 1, \"github_repo_summ\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/shizifan/Analytica", "source_id": "comment-chain-pattern-bad_chains-495827a7c0ca710a", "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": "shizifan/Analytica", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: shizifan/Analytica"}, "properties": {"repobilityId": 444883, "scanner": "foundry_dataset", "fingerprint": "39518411037f853f8bfec0ae742642d4920bf411244a7b768ec7dfa29fde45ec", "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": "shizifan/Analytica#10", "human_labels": ["agent_instruction_gap", "test_or_ci"], "issue_number": "10", "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": "shizifan/Analytica", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-cdf5afeb092e5261", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 2, "docs": 2, "schemas": 2, "routes_api": 2}, "source_chain_kind": "issue_chain", "changed_file_count": 1, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"test_or_ci": 1}, "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"], "linked_ci_commit_count": 0, "verification_artifact_count": 4, "design_schema_api_artifact_count": 4}, "text": "Comment chain pattern product: bad_chains\nRepo: shizifan/Analytica\nThread: shizifan/Analytica#10\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\nChain evidence:\nIssue/PR evidence chain: shizifan/Analytica#10\nRepo: shizifan/Analytica\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: 1\nLabels: {'agent_instruction_gap': 1}\nPolarities: {'bad': 1}\nChanged file labels: {'test_or_ci': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-2247a27788c8b683\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"agent_instruction_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/shizifan/Analytica/pull/10\",\n    \"text\": \"GitHub feedback: agent_instruction_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: shizifan/Analytica\\nAuthor: shizifan (User)\\nURL: https://github.com/shizifan/Analytica/pull/10\\nTitle: docs(spec): mark visual_polish_plan stages 0-6 as delivered\\nBody:\\n## Summary\\n\\n\u7eaf\u6587\u6863\u6574\u7406\u3002\u5f53\u9636\u6bb5 0-6 \u5b9e\u9645\u4ea4\u4ed8\u65f6\uff0c`spec/visual_polish_plan.md` \u51e0\u4e2a\u6536\u5c3e\u5143\u6570\u636e\u6ca1\u8ddf\u4e0a\uff1a\\n\\n- \u7b2c 5 \u884c `\u72b6\u6001` \u8fd8\u5199\u7740 \\\"\u9636\u6bb5 1-6 \u5f85\u5b9e\u65bd\\\"\uff0c\u4e0e\u9996\u90e8\u4ea4\u4ed8\u8868 \u2705 \u77db\u76fe\\n- \u5404\u9636\u6bb5\u300c\u5b8c\u6210\u6807\u5fd7\u300dchecklists\uff08\u00a74.5 / 5.5 / 6.6 / 7.7 / 8.6 / 9.6\uff09\u5168\u90e8\u672a\u52fe\u9009\\n- \u00a714 \u9a8c\u6536\u6807\u51c6 6 \u4e2a \u2610 \u6846\u672a\u52fe\u9009\\n\\n\u672c PR \u628a\u8fd9\u4e9b\u90fd\u5bf9\u9f50\u5230\u4e8b\u5b9e\uff1a\\n\\n- \u9636\u6bb5 0-5 \u6807 2026-04-29 \u2705\uff1b\u9636\u6bb5 6 + \u00a714 \u6807 2026-04-30 \u2705\\n- \u6bcf\u4e2a checklist \u9879\u52a0\u4e86\u4ea4\u4ed8\u7269\u6307\u5411\uff08\u5982 chart \u77e9\u9635\u3001theme dataclass\u3001prefers-color-scheme\uff09\\n\\n\u96f6\u4ee3\u7801\u6539\u52a8\u3002\\n\\n## Test plan\\n\\n- [x] `grep '^- \\\\[ \\\\]'` \u4ec5\u5269\u4e00\u4e2a\u771f\u5b9e\\\"not yet supported\\\"\u683c\u5b50\uff08RADAR/SCATTER chart-type \u77e9\u9635\uff09\uff0c\u975e doc staleness\\n- [x] \u4ea4\u4ed8\u72b6\u6001\u8868\u683c\u3001header \u72b6\u6001\u884c\u3001per-phase checklist\u3001\u00a714 \u9a8c\u6536\u6807\u51c6 \u4e92\u76f8\u4e00\u81f4\\n\\nhttps://claude.ai/code/session_01VbyKr8urPNpe4hEobDxcPa\\n\\n---\\n_Generated by [Claude Code](https://claude.ai/code/session_01VbyKr8urPNpe4hEobDxcPa)_\"\n  }\n]\nChanged files:\n[\n  {\n    \"id\": \"github-pr-file-file-48b812961bf2e42c\",\n    \"filename\": \"spec/visual_polish_plan.md\",\n    \"label\": \"test_or_ci\",\n    \"status\": \"modified\",\n    \"additions\": 43,\n    \"deletions\": 43,\n    \"changes\": 86,\n    \"blob_url\": \"https://github.com/shizifan/Analytica/blob/b242c3face0d39b92619866cb688604d7897f162/spec%2Fvisual_polish_plan.md\"\n  }\n]\nLinked chain ids:\n[\"evidence-chain-comment_to_commit-e3b8282c65542c43\"]\nSource graph evidence:\nSource evidence repo graph summary\nRepo: shizifan/Analytica\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\": 2, \"artifact_supports_design_schema_api\": 2, \"artifact_supports_verification\": 4, \"repo_has_cooccurrence_profile\": 1, \"repo_has_github_evidence_summary\": 1, \"repo_has_graphs_helicopter_view\": 2, \"repo_has_\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/shizifan/Analytica", "source_id": "comment-chain-pattern-bad_chains-b6a3bd9e34a463e0", "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": "shizifan/Analytica", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: shizifan/Analytica"}, "properties": {"repobilityId": 444882, "scanner": "foundry_dataset", "fingerprint": "40439c376ebd3533b103fa02841c3fdf44b967ee2917eb4a730263a50123fbe7", "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": "shizifan/Analytica#1", "human_labels": ["agent_instruction_gap"], "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": "shizifan/Analytica", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-920dbc0c92a4da7e", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 2, "docs": 2, "schemas": 2, "routes_api": 2}, "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"], "linked_ci_commit_count": 0, "verification_artifact_count": 4, "design_schema_api_artifact_count": 4}, "text": "Comment chain pattern product: bad_chains\nRepo: shizifan/Analytica\nThread: shizifan/Analytica#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\nChain evidence:\nIssue/PR evidence chain: shizifan/Analytica#1\nRepo: shizifan/Analytica\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: {'agent_instruction_gap': 1}\nPolarities: {'bad': 1}\nChanged file labels: {}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-d345ca2f1d0dfa30\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"agent_instruction_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/shizifan/Analytica/pull/1\",\n    \"text\": \"GitHub feedback: agent_instruction_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: shizifan/Analytica\\nAuthor: shizifan (User)\\nURL: https://github.com/shizifan/Analytica/pull/1\\nTitle: fix: add 'summary' to TaskType to match planning prompt\\nBody:\\n## \u95ee\u9898\\n\\n\u89c4\u5212\u9636\u6bb5\u6301\u7eed\u62a5\u9519\uff1a\\n\\n```\\nPlanning error: Input should be 'data_fetch', 'search', 'analysis', 'visualization' or 'report_gen'\\n[type=literal_error, input_value='summary', input_type=str]\\n```\\n\\n## \u6839\u56e0\\n\\n`backend/models/schemas.py` \u4e2d `TaskType` \u7f3a\u5c11 `\\\"summary\\\"`\uff0c\u4f46 `backend/agent/planning.py` \u7684 prompt \u660e\u786e\u63cf\u8ff0\u4e86 full_report \u7684\u5178\u578b\u94fe\u8def\u5305\u542b `summary \u00d7 1`\uff0c\u5bfc\u81f4 LLM \u6309 prompt \u8fd4\u56de `\\\"type\\\": \\\"summary\\\"` \u540e Pydantic \u9a8c\u8bc1\u5931\u8d25\uff0c\u89c4\u5212\u91cd\u8bd5 3 \u6b21\u8d85\u65f6\u3002\\n\\n## \u4fee\u590d\\n\\n- `backend/models/schemas.py:69` \u2014 `TaskType` \u52a0\u5165 `\\\"summary\\\"`\\n- `backend/agent/planning.py:147` \u2014 \u8f93\u51fa\u683c\u5f0f\u793a\u4f8b\u4e2d\u540c\u6b65\u52a0\u5165 `\\\"summary\\\"`\\n\\nhttps://claude.ai/code/session_01J6VHQxGNFhGbuw2ExEPK1J\\n\\n---\\n_Generated by [Claude Code](https://claude.ai/code/session_01J6VHQxGNFhGbuw2ExEPK1J)_\"\n  }\n]\nChanged files:\n[]\nLinked chain ids:\n[\"evidence-chain-comment_to_commit-cff471125cacc8fa\"]\nSource graph evidence:\nSource evidence repo graph summary\nRepo: shizifan/Analytica\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\": 2, \"artifact_supports_design_schema_api\": 2, \"artifact_supports_verification\": 4, \"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\": 2, \"routes_api\": 2, \"schemas\": 2}\nHelicopter views: {\"graphs\": 2, \"schemas\": 2}\nBundle labels: {\"source_backed_fake_real_verification_bundle\": 1}\nCo-occurrence labels: {\"fake_real_data_plus_verification_gap\": 1}", "source": "foundry_mined_dataset", "repo_url": "https://github.com/shizifan/Analytica", "source_id": "comment-chain-pattern-bad_chains-29518310f921c0d2", "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": "shizifan/Analytica", "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: shizifan/Analytica"}, "properties": {"repobilityId": 456279, "scanner": "foundry_dataset", "fingerprint": "f185fe53f164b86bd80afcce13b92261da7b84af65367db256840d34397cfc48", "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": {"ui_or_frontend": 2, "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": 17, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "thread_touches_file": 2, "chain_has_link_quality": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 2, "thread_has_comment_chain": 1, "comment_chain_touches_file": 2, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 11, "node_types": {"repo": 1, "thread": 1, "comment": 1, "pr_file": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 3, "comment_chain": 1}, "query_type": "motif_query", "thread_key": "shizifan/Analytica#7", "issue_number": "7", "quality_tiers": {"unresolved": 3}, "repo_full_name": "shizifan/Analytica", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-90cb6ee3707fa4de", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {"ui_or_frontend": 8}}, "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: shizifan/Analytica\nThread: shizifan/Analytica#7\nEvidence:\nGraph motif: Security/auth change without enough guardrails\nMotif id: security_auth_without_guardrails\nPolarity: bad\nTraining usage: assumption_check\nSeverity: critical\nRepo: shizifan/Analytica\nThread: shizifan/Analytica#7\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: shizifan/Analytica#7\nRepo: shizifan/Analytica\nIssue/PR number: 7\nGraph consistency label: needs_more_evidence\nNodes: 11\nEdges: 17\nNode types: {'link_quality': 3, 'pr_file': 2, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'chain_has_link_quality': 3, 'thread_touches_file': 2, 'comment_chain_touches_file': 2, 'issue_chain_touches_file': 2, '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, 'ui_or_frontend': 2, '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/shizifan/Analytica", "source_id": "graph-query-motif_query-721c236b51635982", "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": "shizifan/Analytica", "source_dataset": "graph_queries/security_auth_guardrail_gaps", "training_usage": "assumption_check"}}}, {"ruleId": "foundry_fake_real_gap", "level": "error", "message": {"text": "Foundry mined mock as real or placeholder: shizifan/Analytica"}, "properties": {"repobilityId": 452006, "scanner": "foundry_dataset", "fingerprint": "22c43d7e70e6cd2c2333ef3b971880584c370927d3d6d63b27b94216e4e3930d", "category": "practices", "severity": "critical", "confidence": 0.82, "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": "graph_query_record", "title": "Mock, sample, placeholder, or self-attested behavior treated as real", "intent": "Hard negatives for fake completeness and missing real data paths.", "labels": {"test_or_ci": 4, "data_schema": 1, "schema_or_data": 1, "source_or_other": 1, "mock_placeholder": 1, "claimed_resolved_unverified": 3, "issue_or_pull_request_thread": 1, "human_reported_issue_then_fix_attempt": 1, "thread_has_human_issue_and_fix_context": 2}, "source": "graph_query_export", "motif_id": "mock_as_real_or_placeholder", "outcomes": {"claimed_resolved_unverified": 6}, "polarity": "bad", "query_id": "mock_as_real_or_placeholder", "severity": "critical", "ci_labels": {}, "synthetic": false, "edge_count": 30, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "thread_touches_file": 6, "chain_has_link_quality": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 6, "thread_has_comment_chain": 1, "comment_chain_links_commit": 1, "comment_chain_touches_file": 6, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 16, "node_types": {"repo": 1, "commit": 1, "thread": 1, "comment": 1, "pr_file": 6, "fix_outcome": 1, "issue_chain": 1, "link_quality": 3, "comment_chain": 1}, "query_type": "motif_query", "thread_key": "shizifan/Analytica#8", "issue_number": "8", "quality_tiers": {"weak_supervision": 3}, "repo_full_name": "shizifan/Analytica", "training_usage": "hard_negative", "source_motif_id": "graph-pattern-motif-thread-5e2bce0c85df4ef7", "graph_gold_label": "weak_supervision_needs_review", "changed_file_labels": {"test_or_ci": 16, "schema_or_data": 4, "source_or_other": 4}}, "text": "Graph query export: Mock, sample, placeholder, or self-attested behavior treated as real\nQuery id: mock_as_real_or_placeholder\nQuery type: motif_query\nIntent: Hard negatives for fake completeness and missing real data paths.\nMotif: mock_as_real_or_placeholder\nTraining usage: hard_negative\nGraph gold label: weak_supervision_needs_review\nRepo: shizifan/Analytica\nThread: shizifan/Analytica#8\nEvidence:\nGraph motif: Mock, sample, placeholder, or self-attested behavior treated as real\nMotif id: mock_as_real_or_placeholder\nPolarity: bad\nTraining usage: hard_negative\nSeverity: critical\nRepo: shizifan/Analytica\nThread: shizifan/Analytica#8\nGraph gold label: weak_supervision_needs_review\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: shizifan/Analytica#8\nRepo: shizifan/Analytica\nIssue/PR number: 8\nGraph consistency label: weak_supervision_needs_review\nNodes: 16\nEdges: 30\nNode types: {'pr_file': 6, 'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'commit': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'thread_touches_file': 6, 'comment_chain_touches_file': 6, 'issue_chain_touches_file': 6, 'chain_has_link_quality': 3, 'repo_has_thread': 1, 'thread_has_comment': 1, 'thread_has_comment_chain': 1, 'comment_has_chain': 1, 'comment_chain_links_commit': 1, 'thread_has_issue_chain': 1, 'issue_chain_has_comment_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'test_or_ci': 4, 'claimed_resolved_unverified': 3, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'mock_placeholder': 1, 'schema_or_data': 1, 'source_or_other': 1, 'human_reported_issue_then_fix_attempt': 1, 'data_schema': 1}\nOutcomes: {'claimed_resolved_unverified': 6}\nQuality tiers: {'weak_supervision': 3}\nCI labels: {}\nCurriculum targets:\n- Train real-data plumbing and mock-removal tasks from source to UI.\n- Use as hard negatives for dashboards or apps claiming real runs without provenance.\nAssumption checks:\n- Is user-visible behavior backed by real storage/API/CI artifacts?\n- Are placeholders, sample data, or generated claims still in a production path?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/shizifan/Analytica", "source_id": "graph-query-motif_query-2d9f6a8a9a5b29a3", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/mock_as_real_or_placeholder/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "shizifan/Analytica", "source_dataset": "graph_queries/mock_as_real_or_placeholder", "training_usage": "hard_negative"}}}, {"ruleId": "foundry_fake_real_gap", "level": "error", "message": {"text": "Foundry mined mock as real or placeholder: shizifan/Analytica"}, "properties": {"repobilityId": 452005, "scanner": "foundry_dataset", "fingerprint": "4a806a322609c42517de78a4fb98ef4838b47d962aea152718a16ace0033a7d0", "category": "practices", "severity": "critical", "confidence": 0.82, "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": "graph_query_record", "title": "Mock, sample, placeholder, or self-attested behavior treated as real", "intent": "Hard negatives for fake completeness and missing real data paths.", "labels": {"bug_fix": 2, "test_or_ci": 13, "data_schema": 2, "api_or_backend": 11, "schema_or_data": 2, "ui_or_frontend": 2, "source_or_other": 8, "mock_placeholder": 1, "claimed_resolved_unverified": 3, "issue_or_pull_request_thread": 1, "human_reported_issue_then_fix_attempt": 1, "thread_has_human_issue_and_fix_context": 2}, "source": "graph_query_export", "motif_id": "mock_as_real_or_placeholder", "outcomes": {"claimed_resolved_unverified": 6}, "polarity": "bad", "query_id": "mock_as_real_or_placeholder", "severity": "critical", "ci_labels": {}, "synthetic": false, "edge_count": 75, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "thread_touches_file": 36, "chain_has_link_quality": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 1, "comment_chain_links_commit": 4, "comment_chain_touches_file": 12, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 49, "node_types": {"repo": 1, "commit": 4, "thread": 1, "comment": 1, "pr_file": 36, "fix_outcome": 1, "issue_chain": 1, "link_quality": 3, "comment_chain": 1}, "query_type": "motif_query", "thread_key": "shizifan/Analytica#20", "issue_number": "20", "quality_tiers": {"weak_supervision": 3}, "repo_full_name": "shizifan/Analytica", "training_usage": "hard_negative", "source_motif_id": "graph-pattern-motif-thread-a23eedc07777bf2d", "graph_gold_label": "weak_supervision_needs_review", "changed_file_labels": {"test_or_ci": 52, "api_or_backend": 44, "schema_or_data": 8, "ui_or_frontend": 8, "source_or_other": 32}}, "text": "Graph query export: Mock, sample, placeholder, or self-attested behavior treated as real\nQuery id: mock_as_real_or_placeholder\nQuery type: motif_query\nIntent: Hard negatives for fake completeness and missing real data paths.\nMotif: mock_as_real_or_placeholder\nTraining usage: hard_negative\nGraph gold label: weak_supervision_needs_review\nRepo: shizifan/Analytica\nThread: shizifan/Analytica#20\nEvidence:\nGraph motif: Mock, sample, placeholder, or self-attested behavior treated as real\nMotif id: mock_as_real_or_placeholder\nPolarity: bad\nTraining usage: hard_negative\nSeverity: critical\nRepo: shizifan/Analytica\nThread: shizifan/Analytica#20\nGraph gold label: weak_supervision_needs_review\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: shizifan/Analytica#20\nRepo: shizifan/Analytica\nIssue/PR number: 20\nGraph consistency label: weak_supervision_needs_review\nNodes: 49\nEdges: 75\nNode types: {'pr_file': 36, 'commit': 4, 'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'thread_touches_file': 36, 'comment_chain_touches_file': 12, 'issue_chain_touches_file': 12, 'comment_chain_links_commit': 4, '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: {'test_or_ci': 13, 'api_or_backend': 11, 'source_or_other': 8, 'claimed_resolved_unverified': 3, 'ui_or_frontend': 2, 'schema_or_data': 2, 'data_schema': 2, 'bug_fix': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'mock_placeholder': 1, 'human_reported_issue_then_fix_attempt': 1}\nOutcomes: {'claimed_resolved_unverified': 6}\nQuality tiers: {'weak_supervision': 3}\nCI labels: {}\nCurriculum targets:\n- Train real-data plumbing and mock-removal tasks from source to UI.\n- Use as hard negatives for dashboards or apps claiming real runs without provenance.\nAssumption checks:\n- Is user-visible behavior backed by real storage/API/CI artifacts?\n- Are placeholders, sample data, or generated claims still in a production path?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/shizifan/Analytica", "source_id": "graph-query-motif_query-53cda87ec5164a35", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/mock_as_real_or_placeholder/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "shizifan/Analytica", "source_dataset": "graph_queries/mock_as_real_or_placeholder", "training_usage": "hard_negative"}}}, {"ruleId": "scanner-4cab6dcd7cd03f87", "level": "note", "message": {"text": "Possibly dead Python function: build_monthly_tp_series"}, "properties": {"repobilityId": "75f731553161d0ed", "scanner": "scanner-primary", "fingerprint": "4cab6dcd7cd03f87", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "mock_server/mock_server_all.py:803"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5dd422266d35f317", "level": "note", "message": {"text": "Possibly dead Python function: asset_base"}, "properties": {"repobilityId": "2cd23a9cdc85bd0b", "scanner": "scanner-primary", "fingerprint": "5dd422266d35f317", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "mock_server/mock_server_all.py:2139"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5c0b97f1aaf4e4da", "level": "note", "message": {"text": "Possibly dead Python function: cmd_status"}, "properties": {"repobilityId": "244b91f3ae7622bf", "scanner": "scanner-primary", "fingerprint": "5c0b97f1aaf4e4da", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/registry_review_status.py:84"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5884f59a01a5cd1f", "level": "note", "message": {"text": "Possibly dead Python function: cmd_mark"}, "properties": {"repobilityId": "2de72ba57d6786e1", "scanner": "scanner-primary", "fingerprint": "5884f59a01a5cd1f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/registry_review_status.py:120"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-68050b4a7e1bd293", "level": "note", "message": {"text": "Possibly dead Python function: cmd_show"}, "properties": {"repobilityId": "a65c825fe9b6238d", "scanner": "scanner-primary", "fingerprint": "68050b4a7e1bd293", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/registry_review_status.py:153"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e837362292953978", "level": "note", "message": {"text": "Possibly dead Python function: cmd_needs_fix"}, "properties": {"repobilityId": "acc6c5eca8b487c4", "scanner": "scanner-primary", "fingerprint": "e837362292953978", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/registry_review_status.py:211"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0e5fbf06f91ff42f", "level": "note", "message": {"text": "Possibly dead Python function: cmd_reset"}, "properties": {"repobilityId": "f37e308714abeb66", "scanner": "scanner-primary", "fingerprint": "0e5fbf06f91ff42f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/registry_review_status.py:233"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e7b57170074816f9", "level": "note", "message": {"text": "Possibly dead Python function: replacer"}, "properties": {"repobilityId": "4c6d041d83cc4187", "scanner": "scanner-primary", "fingerprint": "e7b57170074816f9", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/patch_semantics.py:202"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d432da8a439b64b2", "level": "note", "message": {"text": "Possibly dead Python function: emp_perception_node"}, "properties": {"repobilityId": "f58dfee8a6fe7dfc", "scanner": "scanner-primary", "fingerprint": "d432da8a439b64b2", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/employees/graph_factory.py:105"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-af8ee2ff41b35308", "level": "note", "message": {"text": "Possibly dead Python function: emp_planning_node"}, "properties": {"repobilityId": "ab1c808f5d28405a", "scanner": "scanner-primary", "fingerprint": "af8ee2ff41b35308", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/employees/graph_factory.py:109"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a64b58552f283570", "level": "note", "message": {"text": "Possibly dead Python function: emp_execution_node"}, "properties": {"repobilityId": "79cbd507bf9b805e", "scanner": "scanner-primary", "fingerprint": "a64b58552f283570", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/employees/graph_factory.py:243"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3406f4127d5f304d", "level": "note", "message": {"text": "Possibly dead Python function: emp_reflection_node"}, "properties": {"repobilityId": "4221c0b9a6660c51", "scanner": "scanner-primary", "fingerprint": "3406f4127d5f304d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/employees/graph_factory.py:278"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d7e9ec7593bf1b2d", "level": "note", "message": {"text": "Possibly dead Python function: run_employee_stream"}, "properties": {"repobilityId": "c30f41f5c3d6c87d", "scanner": "scanner-primary", "fingerprint": "d7e9ec7593bf1b2d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/employees/manager.py:115"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-fb75e48d386465a8", "level": "note", "message": {"text": "Possibly dead Python function: is_valid_tool"}, "properties": {"repobilityId": "0e647a15d80bb588", "scanner": "scanner-primary", "fingerprint": "fb75e48d386465a8", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/agent/tools.py:39"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b467a45d52d96ca2", "level": "note", "message": {"text": "Possibly dead Python function: execution_node"}, "properties": {"repobilityId": "105be7503afba913", "scanner": "scanner-primary", "fingerprint": "b467a45d52d96ca2", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/agent/execution.py:1702"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8bcf9c648ed649b0", "level": "note", "message": {"text": "Possibly dead Python function: perception_node"}, "properties": {"repobilityId": "df49dc6aef829d88", "scanner": "scanner-primary", "fingerprint": "8bcf9c648ed649b0", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/agent/graph.py:454"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-39a03e9427c6679d", "level": "note", "message": {"text": "Possibly dead Python function: execution_node"}, "properties": {"repobilityId": "105be7503afba913", "scanner": "scanner-primary", "fingerprint": "39a03e9427c6679d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/agent/graph.py:701"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f0178718122bf6b9", "level": "note", "message": {"text": "Possibly dead Python function: reflection_node"}, "properties": {"repobilityId": "b6e58e463083e40e", "scanner": "scanner-primary", "fingerprint": "f0178718122bf6b9", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/agent/graph.py:707"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7fa6e3a1f17f3666", "level": "note", "message": {"text": "Possibly dead Python function: route_after_perception"}, "properties": {"repobilityId": "26b1fa888ecf57b9", "scanner": "scanner-primary", "fingerprint": "7fa6e3a1f17f3666", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/agent/graph.py:715"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-83b3fac75763ce95", "level": "note", "message": {"text": "Possibly dead Python function: route_after_planning"}, "properties": {"repobilityId": "726f32d94b0c8a1b", "scanner": "scanner-primary", "fingerprint": "83b3fac75763ce95", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/agent/graph.py:722"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c202e721d263e582", "level": "note", "message": {"text": "Possibly dead Python function: route_after_execution"}, "properties": {"repobilityId": "074cf3ac7c6e5e99", "scanner": "scanner-primary", "fingerprint": "c202e721d263e582", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/agent/graph.py:733"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5702cacb0da95c6e", "level": "note", "message": {"text": "Possibly dead Python function: after_reflection"}, "properties": {"repobilityId": "20c0e00311fb6f95", "scanner": "scanner-primary", "fingerprint": "5702cacb0da95c6e", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/agent/graph.py:754"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5f10748666332f35", "level": "note", "message": {"text": "Possibly dead Python function: reflection_node"}, "properties": {"repobilityId": "b6e58e463083e40e", "scanner": "scanner-primary", "fingerprint": "5f10748666332f35", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/agent/reflection.py:431"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e586f2bacac68a31", "level": "note", "message": {"text": "Possibly dead Python function: is_valid_endpoint"}, "properties": {"repobilityId": "1e77d79f97200ed5", "scanner": "scanner-primary", "fingerprint": "e586f2bacac68a31", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/agent/api_registry.py:721"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f0cd4f0fa097c3e3", "level": "note", "message": {"text": "Possibly dead Python function: list_endpoints"}, "properties": {"repobilityId": "59cb665cb07013bf", "scanner": "scanner-primary", "fingerprint": "f0cd4f0fa097c3e3", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/agent/api_registry.py:726"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-07d2007fd20cf07f", "level": "note", "message": {"text": "Possibly dead Python function: purge_empty_sessions"}, "properties": {"repobilityId": "f00e3a8e4260bb17", "scanner": "scanner-primary", "fingerprint": "07d2007fd20cf07f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/memory/session_log.py:258"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e241bf98ef9ac9d9", "level": "note", "message": {"text": "Possibly dead Python function: record_api_call"}, "properties": {"repobilityId": "1508b34b8254406d", "scanner": "scanner-primary", "fingerprint": "e241bf98ef9ac9d9", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/memory/admin_store.py:385"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-664340ef593e41cc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 frontend/src/components/EmployeeCard.tsx:29"}, "properties": {"repobilityId": "168cee31579001c5", "scanner": "scanner-primary", "fingerprint": "664340ef593e41cc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"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-ce1fec675e91d850", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim-bookworm"}, "properties": {"repobilityId": "b670476427eddbca", "scanner": "scanner-primary", "fingerprint": "ce1fec675e91d850", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Dockerfile"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e2f1cddf8cbe14d3", "level": "error", "message": {"text": "Dockerfile pipes a remote installer into a shell"}, "properties": {"repobilityId": "a2a189dd57d366a2", "scanner": "scanner-primary", "fingerprint": "e2f1cddf8cbe14d3", "layer": "hardware", "severity": "high", "confidence": 1.0, "tags": ["supply-chain", "docker", "remote-installer"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Dockerfile"}, "region": {"startLine": 28}}}]}, {"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-9005e487c8a82dfc", "level": "note", "message": {"text": "Insecure pattern 'document_write' in frontend/src/components/ui/FileResultCard.tsx:98"}, "properties": {"repobilityId": "4db2f7bfab64b43c", "scanner": "scanner-primary", "fingerprint": "9005e487c8a82dfc", "layer": "security", "severity": "low", "confidence": 1.0, "tags": ["owasp", "document_write"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/src/components/ui/FileResultCard.tsx"}, "region": {"startLine": 98}}}]}, {"ruleId": "scanner-adcb147fbc1d5e08", "level": "error", "message": {"text": "Insecure pattern 'tls_verify_false' in mock_server/prod_mock_align_check.py:114"}, "properties": {"repobilityId": "c27a40e1228f659d", "scanner": "scanner-primary", "fingerprint": "adcb147fbc1d5e08", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "tls_verify_false"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "mock_server/prod_mock_align_check.py"}, "region": {"startLine": 114}}}]}, {"ruleId": "scanner-ff7e8fb8d3aca84e", "level": "error", "message": {"text": "Insecure pattern 'tls_verify_false' in mock_server/prod_api_validator.py:4375"}, "properties": {"repobilityId": "a437c9141ba966b3", "scanner": "scanner-primary", "fingerprint": "ff7e8fb8d3aca84e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "tls_verify_false"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "mock_server/prod_api_validator.py"}, "region": {"startLine": 4375}}}]}, {"ruleId": "scanner-816a9e4ef4c9ade0", "level": "error", "message": {"text": "Insecure pattern 'tls_verify_false' in tools/r8_empty_data_audit.py:177"}, "properties": {"repobilityId": "6f530679d4bee775", "scanner": "scanner-primary", "fingerprint": "816a9e4ef4c9ade0", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "tls_verify_false"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/r8_empty_data_audit.py"}, "region": {"startLine": 177}}}]}, {"ruleId": "scanner-d556c3044648e670", "level": "error", "message": {"text": "Insecure pattern 'tls_verify_false' in tools/probe_question_validator.py:238"}, "properties": {"repobilityId": "df71cc47ae2c1d09", "scanner": "scanner-primary", "fingerprint": "d556c3044648e670", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "tls_verify_false"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/probe_question_validator.py"}, "region": {"startLine": 238}}}]}, {"ruleId": "scanner-8bdeeec6cd8a1417", "level": "error", "message": {"text": "Insecure pattern 'tls_verify_false' in tools/api_recovery_empty_probe.py:560"}, "properties": {"repobilityId": "a6bb35f22286d4f7", "scanner": "scanner-primary", "fingerprint": "8bdeeec6cd8a1417", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "tls_verify_false"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/api_recovery_empty_probe.py"}, "region": {"startLine": 560}}}]}, {"ruleId": "scanner-d483c0f9b300eb8c", "level": "error", "message": {"text": "Insecure pattern 'tls_verify_false' in tools/api_recovery_check.py:280"}, "properties": {"repobilityId": "2fb5eee0f035ad23", "scanner": "scanner-primary", "fingerprint": "d483c0f9b300eb8c", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "tls_verify_false"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/api_recovery_check.py"}, "region": {"startLine": 280}}}]}, {"ruleId": "scanner-19d69229d30f98fc", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "8e7efbf76ebe8cfc", "scanner": "scanner-primary", "fingerprint": "19d69229d30f98fc", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/api-governance-check.yml"}, "region": {"startLine": 21}}}]}, {"ruleId": "scanner-19d69229d30f98fc", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "32bb22323cd1f830", "scanner": "scanner-primary", "fingerprint": "19d69229d30f98fc", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/api-governance-check.yml"}, "region": {"startLine": 24}}}]}, {"ruleId": "scanner-c7fb097ea9c408d7", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "f9c53d800271b2df", "scanner": "scanner-primary", "fingerprint": "c7fb097ea9c408d7", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/regression.yml"}, "region": {"startLine": 42}}}]}, {"ruleId": "scanner-c7fb097ea9c408d7", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "1b36fd1aaf29b656", "scanner": "scanner-primary", "fingerprint": "c7fb097ea9c408d7", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/regression.yml"}, "region": {"startLine": 65}}}]}, {"ruleId": "scanner-497f452e61757eae", "level": "note", "message": {"text": "Very large file: mock_server/prod_api_validator.py (4757 lines)"}, "properties": {"repobilityId": "67a6ddadf4a718ef", "scanner": "scanner-primary", "fingerprint": "497f452e61757eae", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-9b28a33b955d3315", "level": "note", "message": {"text": "Very large file: mock_server/mock_server_all.py (4175 lines)"}, "properties": {"repobilityId": "a9c9bcd151733668", "scanner": "scanner-primary", "fingerprint": "9b28a33b955d3315", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-9d70fec196d3802d", "level": "note", "message": {"text": "Very large file: tools/_gen_patches_inline.py (863 lines)"}, "properties": {"repobilityId": "2474b96e7808c10b", "scanner": "scanner-primary", "fingerprint": "9d70fec196d3802d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-279036b4b1f3e3be", "level": "note", "message": {"text": "Very large file: backend/main.py (2404 lines)"}, "properties": {"repobilityId": "fb764a5c13811891", "scanner": "scanner-primary", "fingerprint": "279036b4b1f3e3be", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b997dcb0a934bcde", "level": "note", "message": {"text": "Very large file: backend/agent/perception.py (1654 lines)"}, "properties": {"repobilityId": "3ee0ef41a03cba73", "scanner": "scanner-primary", "fingerprint": "b997dcb0a934bcde", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-616e964a39d67cb9", "level": "note", "message": {"text": "Very large file: backend/agent/planning.py (4097 lines)"}, "properties": {"repobilityId": "8517ab38383e33f0", "scanner": "scanner-primary", "fingerprint": "616e964a39d67cb9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-39add01aff9672c2", "level": "note", "message": {"text": "Very large file: backend/agent/execution.py (2033 lines)"}, "properties": {"repobilityId": "7ba684d97d3fefd6", "scanner": "scanner-primary", "fingerprint": "39add01aff9672c2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-4d8a37665c94beea", "level": "note", "message": {"text": "Very large file: backend/agent/graph.py (1379 lines)"}, "properties": {"repobilityId": "d5d6869dbcebec3f", "scanner": "scanner-primary", "fingerprint": "4d8a37665c94beea", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-721559ece3ee9e4e", "level": "note", "message": {"text": "Very large file: backend/agent/api_registry.py (1226 lines)"}, "properties": {"repobilityId": "d57b48c9c22575f7", "scanner": "scanner-primary", "fingerprint": "721559ece3ee9e4e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c5e77a2085ade91b", "level": "note", "message": {"text": "Very large file: backend/tools/report/_outline_planner.py (2613 lines)"}, "properties": {"repobilityId": "0c4abe66b365f7da", "scanner": "scanner-primary", "fingerprint": "c5e77a2085ade91b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "e75d3765ab61c949", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-a9b21f6e8885a3a2", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: backend/tools/report/_pptxgen_bridge/package.json"}, "properties": {"repobilityId": "3027986e29adf790", "scanner": "scanner-primary", "fingerprint": "a9b21f6e8885a3a2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/tools/report/_pptxgen_bridge/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "43ff0899509d619c", "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": "ad682d40a5fce0e7", "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": "f960cf0a9fa6bfd2", "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": "c81d40a0c0c8b9f5", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "99f18f8815322db1", "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": "8ada6c8499329ada", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-da043ea832df9666", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/__tests__/session-management.test.ts:288"}, "properties": {"repobilityId": "967985b17a11e00d", "scanner": "scanner-primary", "fingerprint": "da043ea832df9666", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fbfc2267bcdb4a6b", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/components/ui/admin/skillMeta.ts:29"}, "properties": {"repobilityId": "bc2af252c4cb1745", "scanner": "scanner-primary", "fingerprint": "fbfc2267bcdb4a6b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2ea722b95ab19be2", "level": "none", "message": {"text": "Commented-code block (7 lines) in frontend/src/components/ui/AgentPane/TraceTab.tsx:147"}, "properties": {"repobilityId": "28da6e977e34e4b5", "scanner": "scanner-primary", "fingerprint": "2ea722b95ab19be2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4bf96f414156fb94", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/src/pages/ChatPageV2.tsx:243"}, "properties": {"repobilityId": "1ad39891612b6e05", "scanner": "scanner-primary", "fingerprint": "4bf96f414156fb94", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-912f57a623e16ec4", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/hooks/useWebSocket.ts:91"}, "properties": {"repobilityId": "7b42083f5a21a58f", "scanner": "scanner-primary", "fingerprint": "912f57a623e16ec4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0e9780dae5264bea", "level": "none", "message": {"text": "Commented-code block (5 lines) in mock_server/prod_mock_align_check.py:306"}, "properties": {"repobilityId": "4e8fe4bfbee4e247", "scanner": "scanner-primary", "fingerprint": "0e9780dae5264bea", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a2f9ab5294a3d622", "level": "note", "message": {"text": "Legacy-named symbol `prod_vs_mock_comparison_v2` in mock_server/prod_api_validator.py:3738"}, "properties": {"repobilityId": "7d6a3eae8c63a35c", "scanner": "scanner-primary", "fingerprint": "a2f9ab5294a3d622", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-a58af162778632d5", "level": "none", "message": {"text": "Commented-code block (10 lines) in mock_server/mock_server_all.py:36"}, "properties": {"repobilityId": "f6f24b7a5c1727f6", "scanner": "scanner-primary", "fingerprint": "a58af162778632d5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c704b0a5e6d220c6", "level": "error", "message": {"text": "Blocking `httpx.post(...)` inside `async def run` \u2014 spec/api-governance/sinan_three_source_alignment/tools/seed_json_to_db.py:246"}, "properties": {"repobilityId": "137a627195a3e17c", "scanner": "scanner-primary", "fingerprint": "c704b0a5e6d220c6", "layer": "quality", "severity": "high", "confidence": 1.0, "tags": ["integrity", "sync-io-in-async", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "spec/api-governance/sinan_three_source_alignment/tools/seed_json_to_db.py"}, "region": {"startLine": 246}}}]}, {"ruleId": "scanner-0983c6525741ea05", "level": "none", "message": {"text": "Commented-code block (10 lines) in tests/conftest.py:389"}, "properties": {"repobilityId": "85bf66743d7d08de", "scanner": "scanner-primary", "fingerprint": "0983c6525741ea05", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d2f5e08e6553b81f", "level": "none", "message": {"text": "Commented-code block (7 lines) in tests/integration/test_e2e_browser_flow.py:184"}, "properties": {"repobilityId": "f4a7684af177398f", "scanner": "scanner-primary", "fingerprint": "d2f5e08e6553b81f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9441b66bce4389a9", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/integration/test_endpoint_selection_quality.py:28"}, "properties": {"repobilityId": "75173a6241f7ae75", "scanner": "scanner-primary", "fingerprint": "9441b66bce4389a9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c2ea1fb4b8f2ccd1", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/unit/test_multiturn_history.py:196"}, "properties": {"repobilityId": "c371504a6f933fe4", "scanner": "scanner-primary", "fingerprint": "c2ea1fb4b8f2ccd1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ed2ec3e1fff7daee", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/unit/test_session_workspace.py:335"}, "properties": {"repobilityId": "c74d5583949b9412", "scanner": "scanner-primary", "fingerprint": "ed2ec3e1fff7daee", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4af3a224acf8d59b", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/contract/test_round11_step4_questions.py:260"}, "properties": {"repobilityId": "f833a8d655eaa643", "scanner": "scanner-primary", "fingerprint": "4af3a224acf8d59b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8c6fd0002b8e954a", "level": "note", "message": {"text": "Legacy-named symbol `test_data_granularity_meaning_byte_equivalent_to_legacy` in tests/contract/test_perception_slot_meanings_registry_derived.py:33"}, "properties": {"repobilityId": "2e5c74a7342ff261", "scanner": "scanner-primary", "fingerprint": "8c6fd0002b8e954a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-587b1c8a0fd6d5c2", "level": "note", "message": {"text": "Legacy-named symbol `test_summary_stats_with_singleton_list_falls_back_to_legacy` in tests/contract/test_v2_l22_analysis_modules.py:89"}, "properties": {"repobilityId": "1c0a1bfc32a43754", "scanner": "scanner-primary", "fingerprint": "587b1c8a0fd6d5c2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-82246de933849482", "level": "none", "message": {"text": "Commented-code block (8 lines) in tests/contract/test_node5_genericity_acceptance.py:66"}, "properties": {"repobilityId": "99405d8f61760bad", "scanner": "scanner-primary", "fingerprint": "82246de933849482", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3b11fcdee37076c2", "level": "none", "message": {"text": "Commented-code block (8 lines) in tests/probe/runner.py:99"}, "properties": {"repobilityId": "d13caa69dfaa05b1", "scanner": "scanner-primary", "fingerprint": "3b11fcdee37076c2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c35c10c0b917ebbe", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/api_governance_weekly_report.py:28"}, "properties": {"repobilityId": "cbaca983b4d40582", "scanner": "scanner-primary", "fingerprint": "c35c10c0b917ebbe", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c8faeb84e2ba9053", "level": "none", "message": {"text": "Commented-code block (5 lines) in tools/generate_registry_review.py:64"}, "properties": {"repobilityId": "2c78a743a5cc0d22", "scanner": "scanner-primary", "fingerprint": "c8faeb84e2ba9053", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-00ca9a1a2c618601", "level": "note", "message": {"text": "Legacy-named symbol `api_deprecated` in tools/api_registry_patches_gen.py:23"}, "properties": {"repobilityId": "cda0d61131da7df2", "scanner": "scanner-primary", "fingerprint": "00ca9a1a2c618601", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-98832f6024ecfb7b", "level": "none", "message": {"text": "Commented-code block (5 lines) in tools/merge_drafts_into_registry.py:120"}, "properties": {"repobilityId": "6861684e9948f9a2", "scanner": "scanner-primary", "fingerprint": "98832f6024ecfb7b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2a9c399532f7f8bb", "level": "none", "message": {"text": "Commented-code block (7 lines) in tools/gen_e2e_l2_corpus.py:46"}, "properties": {"repobilityId": "0150977ff10c4c2a", "scanner": "scanner-primary", "fingerprint": "2a9c399532f7f8bb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-900e36df86e783f7", "level": "error", "message": {"text": "Blocking `httpx.post(...)` inside `async def run` \u2014 tools/seed_json_to_db.py:452"}, "properties": {"repobilityId": "aed13946cf0a6c3a", "scanner": "scanner-primary", "fingerprint": "900e36df86e783f7", "layer": "quality", "severity": "high", "confidence": 1.0, "tags": ["integrity", "sync-io-in-async", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/seed_json_to_db.py"}, "region": {"startLine": 452}}}]}, {"ruleId": "scanner-ed314bf7786c56f2", "level": "note", "message": {"text": "Legacy-named symbol `no_backup` in tools/sync_registry.py:248"}, "properties": {"repobilityId": "a98632c59ffba21e", "scanner": "scanner-primary", "fingerprint": "ed314bf7786c56f2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-bd655d8eeb8a16c6", "level": "note", "message": {"text": "Legacy-named symbol `skipped_deprecated` in tools/sync_excel_to_json.py:57"}, "properties": {"repobilityId": "49c57e02f224f673", "scanner": "scanner-primary", "fingerprint": "bd655d8eeb8a16c6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-a55da05f4ddb0107", "level": "note", "message": {"text": "Legacy-named symbol `load_deprecated` in tools/probe_question_validator.py:58"}, "properties": {"repobilityId": "47512086f9ffcdb7", "scanner": "scanner-primary", "fingerprint": "a55da05f4ddb0107", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-33c8024414a653ea", "level": "note", "message": {"text": "Legacy-named symbol `api_deprecated` in tools/api_recovery_check.py:67"}, "properties": {"repobilityId": "8ed2135f43b7c755", "scanner": "scanner-primary", "fingerprint": "33c8024414a653ea", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-0ff755b370bcd8a1", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/config.py:27"}, "properties": {"repobilityId": "c6b5a699d0c9cde9", "scanner": "scanner-primary", "fingerprint": "0ff755b370bcd8a1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e1bba35111866448", "level": "note", "message": {"text": "Legacy-named symbol `model_copy` in backend/main.py:564"}, "properties": {"repobilityId": "b45f2da74d3b5156", "scanner": "scanner-primary", "fingerprint": "e1bba35111866448", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-65d8ff3c9b24b0dc", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/main.py:109"}, "properties": {"repobilityId": "b93ca8513f6016e8", "scanner": "scanner-primary", "fingerprint": "65d8ff3c9b24b0dc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b5af0653c8e4e300", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/employees/graph_factory.py:154"}, "properties": {"repobilityId": "b2b1213b28b4daa0", "scanner": "scanner-primary", "fingerprint": "b5af0653c8e4e300", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-59c411d79ef8edc0", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/employees/manager.py:83"}, "properties": {"repobilityId": "e79f05198d4d615c", "scanner": "scanner-primary", "fingerprint": "59c411d79ef8edc0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6ead6ef7b2088971", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/models/schemas.py:134"}, "properties": {"repobilityId": "dc17789187ff7746", "scanner": "scanner-primary", "fingerprint": "6ead6ef7b2088971", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a70a225b1e0a1ff2", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/auth/routes.py:129"}, "properties": {"repobilityId": "74045a65b7dd81cd", "scanner": "scanner-primary", "fingerprint": "a70a225b1e0a1ff2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-57120931b81294fe", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/agent/perception.py:346"}, "properties": {"repobilityId": "d4b770c3d11d4243", "scanner": "scanner-primary", "fingerprint": "57120931b81294fe", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b71ee8a9510a3360", "level": "note", "message": {"text": "Legacy-named symbol `model_copy` in backend/agent/planning.py:3814"}, "properties": {"repobilityId": "6cb496e67e08fc6a", "scanner": "scanner-primary", "fingerprint": "b71ee8a9510a3360", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-6c048af9912fd445", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/agent/planning.py:58"}, "properties": {"repobilityId": "069ce32061590bde", "scanner": "scanner-primary", "fingerprint": "6c048af9912fd445", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d36fe7b36de64647", "level": "none", "message": {"text": "Commented-code block (10 lines) in backend/agent/execution.py:67"}, "properties": {"repobilityId": "75c0bf4f8783be2f", "scanner": "scanner-primary", "fingerprint": "d36fe7b36de64647", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-838ae6130fbd3716", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/agent/graph.py:89"}, "properties": {"repobilityId": "8bccbcac06d95326", "scanner": "scanner-primary", "fingerprint": "838ae6130fbd3716", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-721e8365fe69fb6a", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/agent/_param_display.py:31"}, "properties": {"repobilityId": "576a3918c3a46b54", "scanner": "scanner-primary", "fingerprint": "721e8365fe69fb6a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-53ba58498bbcafb5", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/agent/api_registry.py:25"}, "properties": {"repobilityId": "9ddcaccbb98bf011", "scanner": "scanner-primary", "fingerprint": "53ba58498bbcafb5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0c11ae673710dcc6", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/memory/session_workspace.py:52"}, "properties": {"repobilityId": "8f9bf1be20ee75ae", "scanner": "scanner-primary", "fingerprint": "0c11ae673710dcc6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3c6e9a3677e30deb", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/memory/artifact_store.py:241"}, "properties": {"repobilityId": "e760de81647d171a", "scanner": "scanner-primary", "fingerprint": "3c6e9a3677e30deb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-13cb3884be9352e3", "level": "none", "message": {"text": "Commented-code block (7 lines) in backend/tools/_llm.py:196"}, "properties": {"repobilityId": "ff7b13660c53d152", "scanner": "scanner-primary", "fingerprint": "13cb3884be9352e3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5c213b4f6fd4d448", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/tools/visualization/chart_line.py:213"}, "properties": {"repobilityId": "3a2e7d3136849279", "scanner": "scanner-primary", "fingerprint": "5c213b4f6fd4d448", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-84c911ebe5f8c605", "level": "none", "message": {"text": "Commented-code block (7 lines) in backend/tools/visualization/chart_bar.py:176"}, "properties": {"repobilityId": "5e15841f8816cbe4", "scanner": "scanner-primary", "fingerprint": "84c911ebe5f8c605", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c1d7fa1ecc5f1edd", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/tools/visualization/chart_waterfall.py:23"}, "properties": {"repobilityId": "d2b42b49860a9eeb", "scanner": "scanner-primary", "fingerprint": "c1d7fa1ecc5f1edd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-41b596cb8ea95e20", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/tools/visualization/chart_wrapper.py:42"}, "properties": {"repobilityId": "dc359341c9afebbb", "scanner": "scanner-primary", "fingerprint": "41b596cb8ea95e20", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bd49117346bb95c7", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/tools/_recovery/data_fetch/dimension_value.py:69"}, "properties": {"repobilityId": "ef06e3c19b3b245a", "scanner": "scanner-primary", "fingerprint": "bd49117346bb95c7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4112536c983e30bc", "level": "none", "message": {"text": "Commented-code block (7 lines) in backend/tools/analysis/descriptive.py:686"}, "properties": {"repobilityId": "54085f3b80a3341d", "scanner": "scanner-primary", "fingerprint": "4112536c983e30bc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e9e01c4b77484db9", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/tools/analysis/_metric_resolve.py:20"}, "properties": {"repobilityId": "d834874f3cc3b9a7", "scanner": "scanner-primary", "fingerprint": "e9e01c4b77484db9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5a95a6bfef340da5", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/tools/analysis/prediction.py:53"}, "properties": {"repobilityId": "db7c439a8a9119e9", "scanner": "scanner-primary", "fingerprint": "5a95a6bfef340da5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5034126664b19710", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/tools/analysis/anomaly.py:338"}, "properties": {"repobilityId": "715c9775d6a78ec4", "scanner": "scanner-primary", "fingerprint": "5034126664b19710", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f8b6fcfc7e0afd08", "level": "note", "message": {"text": "Legacy-named symbol `has_v2` in backend/tools/report/_content_collector.py:442"}, "properties": {"repobilityId": "2c08de3241bdf0c1", "scanner": "scanner-primary", "fingerprint": "f8b6fcfc7e0afd08", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-15aca36bf0571fc4", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/tools/report/_content_collector.py:190"}, "properties": {"repobilityId": "c78e7e8ed0981ae7", "scanner": "scanner-primary", "fingerprint": "15aca36bf0571fc4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-88b2d654be6168c8", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/tools/report/_source_attribution.py:128"}, "properties": {"repobilityId": "f7f9f4c68764f555", "scanner": "scanner-primary", "fingerprint": "88b2d654be6168c8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-42fed9fdcfc1aee1", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/tools/report/_theme.py:48"}, "properties": {"repobilityId": "db939836789e28d3", "scanner": "scanner-primary", "fingerprint": "42fed9fdcfc1aee1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9b512f900742778e", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/tools/report/_outline.py:85"}, "properties": {"repobilityId": "0dcae704aa776c32", "scanner": "scanner-primary", "fingerprint": "9b512f900742778e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ab495f0dd1e83127", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/tools/report/html_gen.py:34"}, "properties": {"repobilityId": "b39af04bc62f99c2", "scanner": "scanner-primary", "fingerprint": "ab495f0dd1e83127", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b1c905e169aac7dc", "level": "note", "message": {"text": "Legacy-named symbol `_outline_legacy` in backend/tools/report/_outline_planner.py:229"}, "properties": {"repobilityId": "80222fb150662219", "scanner": "scanner-primary", "fingerprint": "b1c905e169aac7dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-5a0209fe064e336b", "level": "none", "message": {"text": "Commented-code block (9 lines) in backend/tools/report/_outline_planner.py:192"}, "properties": {"repobilityId": "48227838e08dc85e", "scanner": "scanner-primary", "fingerprint": "5a0209fe064e336b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6112055c04561a0d", "level": "note", "message": {"text": "Stub function `emit_kpi_strip` (body is just `pass`/`return`) \u2014 backend/tools/report/_block_renderer.py:139"}, "properties": {"repobilityId": "355f851aec0cc94b", "scanner": "scanner-primary", "fingerprint": "6112055c04561a0d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "empty-handler", "dead-code"]}}, {"ruleId": "scanner-f4f4cd9e02cb1f03", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/tools/report/_renderers/html.py:443"}, "properties": {"repobilityId": "35c73d88f2309619", "scanner": "scanner-primary", "fingerprint": "f4f4cd9e02cb1f03", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-661b4e36ea92bfca", "level": "note", "message": {"text": "Stub function `emit_kpi_row` (body is just `pass`/`return`) \u2014 backend/tools/report/_renderers/html.py:708"}, "properties": {"repobilityId": "dacd8941e0069f8c", "scanner": "scanner-primary", "fingerprint": "661b4e36ea92bfca", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "empty-handler", "dead-code"]}}, {"ruleId": "scanner-bff3c01f58acfdf6", "level": "none", "message": {"text": "Commented-code block (5 lines) in migrations/scripts/seed_employees_from_yaml.py:167"}, "properties": {"repobilityId": "95fac0212704e355", "scanner": "scanner-primary", "fingerprint": "bff3c01f58acfdf6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-43468593ee099ce4", "level": "none", "message": {"text": "Commented-code block (7 lines) in migrations/scripts/update_employee_faqs.py:160"}, "properties": {"repobilityId": "5e110c09e6eb85c8", "scanner": "scanner-primary", "fingerprint": "43468593ee099ce4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-98362fc5b0257367", "level": "note", "message": {"text": "Stub function `downgrade` (body is just `pass`/`return`) \u2014 migrations/versions/20260421_0003_sessions_employee_id.py:30"}, "properties": {"repobilityId": "baf53cc2b0b9100f", "scanner": "scanner-primary", "fingerprint": "98362fc5b0257367", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "empty-handler", "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": "9946eb5f73079166", "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": "9b29527f25020195", "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": "e1d02e57152d56dc", "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": "f21489c51f6a6df2", "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": "4ea0db4dac19d7a3", "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": "3eed34a953145fb4", "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": "fdb5a83ab5c49472", "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": "85ce33083f8bf3fe", "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": "ce364cab170ea034", "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": "13b81a7154b7dabe", "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": "758ec54fa36caa2f", "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": "485260102a30860a", "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": "96aa1e353aaf64b5", "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": "c72deddf8fa50fdb", "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": "727aa9eefb345677", "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": "9470f8733658f654", "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": "340fdd7e8227615f", "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": "6b2fd29b3f8d22fb", "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": "1169770c92844205", "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": "f5863868e94324dc", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-cf017baa675bf381", "level": "warning", "message": {"text": "Frontend route `login` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "6685d5623a4eec39", "scanner": "scanner-primary", "fingerprint": "cf017baa675bf381", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-481976aed5bad5d3", "level": "warning", "message": {"text": "Frontend route `change-password` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "319ba9f2a4c6245d", "scanner": "scanner-primary", "fingerprint": "481976aed5bad5d3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-edd06ec9b39fbf15", "level": "warning", "message": {"text": "Frontend route `employees` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "4ba13486c9890929", "scanner": "scanner-primary", "fingerprint": "edd06ec9b39fbf15", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-c99fd46ac570e13f", "level": "warning", "message": {"text": "Frontend route `admin` has no Link/navigate to it \u2014 frontend/src/components/auth/ProtectedRoute.tsx"}, "properties": {"repobilityId": "0eae4d8b1c6f9f56", "scanner": "scanner-primary", "fingerprint": "c99fd46ac570e13f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-8778311d686c09fb", "level": "warning", "message": {"text": "Frontend route `apis` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "bb17424ab359da2e", "scanner": "scanner-primary", "fingerprint": "8778311d686c09fb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-b343609e9c1339b1", "level": "warning", "message": {"text": "Frontend route `tools` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "ad79fe5b21ec193a", "scanner": "scanner-primary", "fingerprint": "b343609e9c1339b1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-d50cd9f98effb738", "level": "warning", "message": {"text": "Frontend route `skills` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "a452897726544c1d", "scanner": "scanner-primary", "fingerprint": "d50cd9f98effb738", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-8ee6d8e14c564284", "level": "warning", "message": {"text": "Frontend route `domains` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "0d16d8db78020b6e", "scanner": "scanner-primary", "fingerprint": "8ee6d8e14c564284", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-4e7cb12763e46cd2", "level": "warning", "message": {"text": "Frontend route `memories` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "7251a560657d4fb5", "scanner": "scanner-primary", "fingerprint": "4e7cb12763e46cd2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-ed2bc19f149c2b14", "level": "warning", "message": {"text": "Frontend route `audit` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "95c3314d171ddfe5", "scanner": "scanner-primary", "fingerprint": "ed2bc19f149c2b14", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-ad96af978bb7b1be", "level": "warning", "message": {"text": "Frontend route `users` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "98134b48586e30c9", "scanner": "scanner-primary", "fingerprint": "ad96af978bb7b1be", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-862ca3874c5e2d76", "level": "warning", "message": {"text": "Frontend route `roles` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "fa83494c17f82e0d", "scanner": "scanner-primary", "fingerprint": "862ca3874c5e2d76", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-f5e4dbad8159a988", "level": "warning", "message": {"text": "Frontend route `grant-requests` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "5cdf429001ffee1a", "scanner": "scanner-primary", "fingerprint": "f5e4dbad8159a988", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-a8fca01763ccc6af", "level": "note", "message": {"text": "Unused endpoint: GET /api/gateway/getWeatherForecast"}, "properties": {"repobilityId": "2ccbc101fe185777", "scanner": "scanner-primary", "fingerprint": "a8fca01763ccc6af", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-70d505f06101f7fe", "level": "note", "message": {"text": "Unused endpoint: GET /api/gateway/getRealTimeWeather"}, "properties": {"repobilityId": "f85a62a622a3e09e", "scanner": "scanner-primary", "fingerprint": "70d505f06101f7fe", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d1dd7f9b0a085de8", "level": "note", "message": {"text": "Unused endpoint: GET /api/gateway/getTrafficControl"}, "properties": {"repobilityId": "72d490676aa0f3cc", "scanner": "scanner-primary", "fingerprint": "d1dd7f9b0a085de8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e36414fc5d12165f", "level": "note", "message": {"text": "Unused endpoint: GET /api/gateway/getKeyVesselList"}, "properties": {"repobilityId": "63c1b544fe1d47f3", "scanner": "scanner-primary", "fingerprint": "e36414fc5d12165f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-98c3da2a9f3dc943", "level": "note", "message": {"text": "Unused endpoint: GET /api/gateway/getThroughputAndTargetThroughputTon"}, "properties": {"repobilityId": "1ee46a73a50f5245", "scanner": "scanner-primary", "fingerprint": "98c3da2a9f3dc943", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-160eee92d3488ca5", "level": "note", "message": {"text": "Unused endpoint: GET /api/gateway/getThroughputAndTargetThroughputTeu"}, "properties": {"repobilityId": "dd15a52802163c4a", "scanner": "scanner-primary", "fingerprint": "160eee92d3488ca5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5be8cbdcb6516208", "level": "note", "message": {"text": "Unused endpoint: GET /api/gateway/getSingleShipRate"}, "properties": {"repobilityId": "97105fc253fe5558", "scanner": "scanner-primary", "fingerprint": "5be8cbdcb6516208", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6c1dbd85655fb89d", "level": "note", "message": {"text": "Unused endpoint: GET /api/gateway/getBerthOccupancyRateByRegion"}, "properties": {"repobilityId": "81276091ff985428", "scanner": "scanner-primary", "fingerprint": "6c1dbd85655fb89d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a06fe0483d654061", "level": "note", "message": {"text": "Unused endpoint: GET /api/gateway/getBerthOccupancyRateByBusinessType"}, "properties": {"repobilityId": "d331e8116ec67b34", "scanner": "scanner-primary", "fingerprint": "a06fe0483d654061", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d7e8235a30696368", "level": "note", "message": {"text": "Unused endpoint: GET /api/gateway/getImportantCargoPortInventoryByRegion"}, "properties": {"repobilityId": "24e2789517b8731a", "scanner": "scanner-primary", "fingerprint": "d7e8235a30696368", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2b8af55babdb0bfd", "level": "note", "message": {"text": "Unused endpoint: GET /api/gateway/getContainerAndVehicleTrade"}, "properties": {"repobilityId": "dacd8d9645016a12", "scanner": "scanner-primary", "fingerprint": "2b8af55babdb0bfd", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1eb50a243628402c", "level": "note", "message": {"text": "Unused endpoint: GET /api/gateway/getImportantCargoPortInventoryByBusinessType"}, "properties": {"repobilityId": "8412679916499bc1", "scanner": "scanner-primary", "fingerprint": "1eb50a243628402c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fd33543440a7fe68", "level": "note", "message": {"text": "Unused endpoint: GET /api/gateway/getThroughputAnalysisNonContainer"}, "properties": {"repobilityId": "374a486b55450a5d", "scanner": "scanner-primary", "fingerprint": "fd33543440a7fe68", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5d7610930fc5e71e", "level": "note", "message": {"text": "Unused endpoint: GET /api/gateway/getThroughputAnalysisContainer"}, "properties": {"repobilityId": "ccf8487439058d49", "scanner": "scanner-primary", "fingerprint": "5d7610930fc5e71e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cb92a41b8f66309e", "level": "note", "message": {"text": "Unused endpoint: GET /api/gateway/getThroughputAnalysisByYear"}, "properties": {"repobilityId": "2e59ccd9e115286a", "scanner": "scanner-primary", "fingerprint": "cb92a41b8f66309e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d5155166f17008e0", "level": "note", "message": {"text": "Unused endpoint: GET /api/gateway/getContainerThroughputAnalysisByYear"}, "properties": {"repobilityId": "bbbb587aa6fc0750", "scanner": "scanner-primary", "fingerprint": "d5155166f17008e0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-941731dd14694e69", "level": "note", "message": {"text": "Unused endpoint: GET /api/gateway/getOilsChemBreakBulkByBusinessType"}, "properties": {"repobilityId": "61fb6a78b36e70dc", "scanner": "scanner-primary", "fingerprint": "941731dd14694e69", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d3d23638228fce89", "level": "note", "message": {"text": "Unused endpoint: GET /api/gateway/getRoroByBusinessType"}, "properties": {"repobilityId": "e149a2dba999c8d9", "scanner": "scanner-primary", "fingerprint": "d3d23638228fce89", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1cdf805ccbd979e3", "level": "note", "message": {"text": "Unused endpoint: GET /api/gateway/getContainerByBusinessType"}, "properties": {"repobilityId": "fc6520c3ba0521d1", "scanner": "scanner-primary", "fingerprint": "1cdf805ccbd979e3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2909a6f5f9e15269", "level": "note", "message": {"text": "Unused endpoint: GET /api/gateway/getCompanyStatisticsBusinessType"}, "properties": {"repobilityId": "28d524c4c0dc6cf3", "scanner": "scanner-primary", "fingerprint": "2909a6f5f9e15269", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3a4057b01e5ca85e", "level": "note", "message": {"text": "Unused endpoint: GET /api/gateway/getThroughputAnalysisYoyMomByYear"}, "properties": {"repobilityId": "661f37f0cba8f343", "scanner": "scanner-primary", "fingerprint": "3a4057b01e5ca85e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7ee45b1569efdfc2", "level": "note", "message": {"text": "Unused endpoint: GET /api/gateway/getContainerAnalysisYoyMomByYear"}, "properties": {"repobilityId": "6a71761eac0f47a2", "scanner": "scanner-primary", "fingerprint": "7ee45b1569efdfc2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3542a926f0ec7eeb", "level": "note", "message": {"text": "Unused endpoint: GET /api/gateway/getBusinessTypeThroughputAnalysisYoyMomByYear"}, "properties": {"repobilityId": "43980b33650db8e4", "scanner": "scanner-primary", "fingerprint": "3542a926f0ec7eeb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9a2248b24ee70b62", "level": "note", "message": {"text": "Unused endpoint: GET /api/gateway/getThroughputAnalysisYoyMomByMonth"}, "properties": {"repobilityId": "f542cb794cc5295f", "scanner": "scanner-primary", "fingerprint": "9a2248b24ee70b62", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e0b3a45ed8228811", "level": "note", "message": {"text": "Unused endpoint: GET /api/gateway/getThroughputAnalysisYoyMomByDay"}, "properties": {"repobilityId": "484de37e6a8c4513", "scanner": "scanner-primary", "fingerprint": "e0b3a45ed8228811", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6e68effe9a4c268c", "level": "note", "message": {"text": "Unused endpoint: GET /api/gateway/getBusinessTypeThroughputAnalysisYoyMomByMonth"}, "properties": {"repobilityId": "78c5a8bf7e167d57", "scanner": "scanner-primary", "fingerprint": "6e68effe9a4c268c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-dabacd8335a4dd49", "level": "note", "message": {"text": "Unused endpoint: GET /api/gateway/getBusinessTypeThroughputAnalysisYoyMomByDay"}, "properties": {"repobilityId": "4777eb17d465f92c", "scanner": "scanner-primary", "fingerprint": "dabacd8335a4dd49", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9cb2e2db0beb3cfd", "level": "note", "message": {"text": "Unused endpoint: GET /api/gateway/getShipStatisticsByRegion"}, "properties": {"repobilityId": "9949b51bc18fbba4", "scanner": "scanner-primary", "fingerprint": "9cb2e2db0beb3cfd", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-75f535facf82cf7e", "level": "note", "message": {"text": "Unused endpoint: GET /api/gateway/getShipStatisticsByBusinessType"}, "properties": {"repobilityId": "841a44599c77e771", "scanner": "scanner-primary", "fingerprint": "75f535facf82cf7e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6a7906a37314f8c5", "level": "note", "message": {"text": "Unused endpoint: GET /api/gateway/getBusinessSegmentBranch"}, "properties": {"repobilityId": "2420e8cfcdf6cbcc", "scanner": "scanner-primary", "fingerprint": "6a7906a37314f8c5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f18115f5f499807b", "level": "note", "message": {"text": "Unused endpoint: GET /api/gateway/getPortCompanyThroughput"}, "properties": {"repobilityId": "7f2dc629f83f93b4", "scanner": "scanner-primary", "fingerprint": "f18115f5f499807b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-863e8c40df6f3dbc", "level": "note", "message": {"text": "Unused endpoint: GET /api/gateway/getThroughputMonthlyTrend"}, "properties": {"repobilityId": "0294831b9c1197bb", "scanner": "scanner-primary", "fingerprint": "863e8c40df6f3dbc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ef4bfdcf9ef5fd7c", "level": "note", "message": {"text": "Unused endpoint: GET /api/gateway/getDailyPortInventoryData"}, "properties": {"repobilityId": "1e5d57ccb8912e48", "scanner": "scanner-primary", "fingerprint": "ef4bfdcf9ef5fd7c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-792685988b34d290", "level": "note", "message": {"text": "Unused endpoint: GET /api/gateway/getPortInventoryTrend"}, "properties": {"repobilityId": "05d39c6616b13dd3", "scanner": "scanner-primary", "fingerprint": "792685988b34d290", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8ad58c39495114d2", "level": "note", "message": {"text": "Unused endpoint: GET /api/gateway/getVesselOperationEfficiency"}, "properties": {"repobilityId": "13a1584c3fff2af8", "scanner": "scanner-primary", "fingerprint": "8ad58c39495114d2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8a9cfe531e80e791", "level": "note", "message": {"text": "Unused endpoint: GET /api/gateway/getVesselOperationEfficiencyTrend"}, "properties": {"repobilityId": "6a8d6b18c2679376", "scanner": "scanner-primary", "fingerprint": "8a9cfe531e80e791", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-85b602ebf1b08228", "level": "note", "message": {"text": "Unused endpoint: GET /api/gateway/getBerthOccupancyRate"}, "properties": {"repobilityId": "71a76036dafb7dbb", "scanner": "scanner-primary", "fingerprint": "85b602ebf1b08228", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-49654ee526ed8443", "level": "note", "message": {"text": "Unused endpoint: GET /api/gateway/getTotalBerthDuration"}, "properties": {"repobilityId": "30e11431dc078caa", "scanner": "scanner-primary", "fingerprint": "49654ee526ed8443", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1892d8e783ac84e7", "level": "note", "message": {"text": "Unused endpoint: GET /api/gateway/getBerthList"}, "properties": {"repobilityId": "eea4fe8b189ad6a5", "scanner": "scanner-primary", "fingerprint": "1892d8e783ac84e7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a404795f59fba452", "level": "note", "message": {"text": "Unused endpoint: GET /api/gateway/getShipOperationDynamic"}, "properties": {"repobilityId": "e024a13ea2cda59d", "scanner": "scanner-primary", "fingerprint": "a404795f59fba452", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0c8f18e3b43d3a18", "level": "note", "message": {"text": "Unused endpoint: GET /api/gateway/getProductViewShipOperationRateAvg"}, "properties": {"repobilityId": "87f949e7b3472333", "scanner": "scanner-primary", "fingerprint": "0c8f18e3b43d3a18", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-83608924ab665979", "level": "note", "message": {"text": "Unused endpoint: GET /api/gateway/getProductViewShipOperationRateTrend"}, "properties": {"repobilityId": "1594531b8c3e58cf", "scanner": "scanner-primary", "fingerprint": "83608924ab665979", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9e1435e781cb3aab", "level": "note", "message": {"text": "Unused endpoint: GET /api/gateway/getPersonalCenterCargoThroughput"}, "properties": {"repobilityId": "6358af0b1d8e8614", "scanner": "scanner-primary", "fingerprint": "9e1435e781cb3aab", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ed27bdfba0d914ae", "level": "note", "message": {"text": "Unused endpoint: GET /api/gateway/getPersonalCenterMonthCargoThroughput"}, "properties": {"repobilityId": "f3257ce1784f263f", "scanner": "scanner-primary", "fingerprint": "ed27bdfba0d914ae", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-345a0a33a4c6a51a", "level": "note", "message": {"text": "Unused endpoint: GET /api/gateway/getPersonalCenterYearCargoThroughput"}, "properties": {"repobilityId": "b9841763b56eef42", "scanner": "scanner-primary", "fingerprint": "345a0a33a4c6a51a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b64024c6305399fe", "level": "note", "message": {"text": "Unused endpoint: GET /api/gateway/getPersonalCenterYearCargoThroughputTrend"}, "properties": {"repobilityId": "e1bfd9bea9efd850", "scanner": "scanner-primary", "fingerprint": "b64024c6305399fe", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-180b9d13e42ae70f", "level": "note", "message": {"text": "Unused endpoint: GET /api/gateway/getProdShipDynNum"}, "properties": {"repobilityId": "df481c53e8ed3f2a", "scanner": "scanner-primary", "fingerprint": "180b9d13e42ae70f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a8531d141cc76761", "level": "note", "message": {"text": "Unused endpoint: GET /api/gateway/getProdShipDesc"}, "properties": {"repobilityId": "76f60b1103a75a04", "scanner": "scanner-primary", "fingerprint": "a8531d141cc76761", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9072055f42878025", "level": "note", "message": {"text": "Unused endpoint: GET /api/gateway/getMonthlyThroughput"}, "properties": {"repobilityId": "58ebb08496ee1365", "scanner": "scanner-primary", "fingerprint": "9072055f42878025", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0925e2188725dcad", "level": "note", "message": {"text": "Unused endpoint: GET /api/gateway/getMonthlyZoneThroughput"}, "properties": {"repobilityId": "08e108ae49ef468b", "scanner": "scanner-primary", "fingerprint": "0925e2188725dcad", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}