{
  "id": "communication/grpc-unimplemented-method",
  "signature": "grpc::UNIMPLEMENTED: Method not found: /service/MethodName",
  "signature_zh": "grpc::UNIMPLEMENTED: 未找到方法: /service/MethodName",
  "regex": "UNIMPLEMENTED: Method not found: /[a-zA-Z0-9_]+/[a-zA-Z0-9_]+",
  "domain": "communication",
  "category": "protocol_error",
  "subcategory": null,
  "root_cause": "gRPC client calls a method that the server does not register in its service definition, often due to mismatched proto files or server binary not rebuilt after proto change.",
  "root_cause_type": "generic",
  "root_cause_zh": "gRPC客户端调用了服务器在其服务定义中未注册的方法，通常因proto文件不匹配或服务器二进制文件在proto更改后未重新构建。",
  "versions": [
    {
      "version": "gRPC 1.62",
      "introduced": null,
      "deprecated": null,
      "removed": null,
      "behavior_change": null,
      "status": "active"
    },
    {
      "version": "protobuf 3.25",
      "introduced": null,
      "deprecated": null,
      "removed": null,
      "behavior_change": null,
      "status": "active"
    },
    {
      "version": "Go 1.22",
      "introduced": null,
      "deprecated": null,
      "removed": null,
      "behavior_change": null,
      "status": "active"
    },
    {
      "version": "C++ gRPC 1.60",
      "introduced": null,
      "deprecated": null,
      "removed": null,
      "behavior_change": null,
      "status": "active"
    }
  ],
  "os_specific": {},
  "dead_ends": [
    {
      "action": "Restart the gRPC server without recompiling",
      "why_fails": "The server binary still contains the old service definition; a restart does not add the missing method",
      "fail_rate": 0.95,
      "condition": "",
      "sources": []
    },
    {
      "action": "Change the client to use a different method name with the same payload",
      "why_fails": "The method name must match the server's registered service exactly; arbitrary renaming causes a different UNIMPLEMENTED error",
      "fail_rate": 0.9,
      "condition": "",
      "sources": []
    },
    {
      "action": "Increase the gRPC timeout on the client",
      "why_fails": "Timeout does not affect method availability; the error is immediate at the server's method lookup stage",
      "fail_rate": 1.0,
      "condition": "",
      "sources": []
    }
  ],
  "workarounds": [
    {
      "action": "Regenerate both client and server stubs from the same .proto file, then rebuild and redeploy the server. Verify the server logs show the registered service at startup.",
      "success_rate": 0.9,
      "how": "Regenerate both client and server stubs from the same .proto file, then rebuild and redeploy the server. Verify the server logs show the registered service at startup.",
      "condition": "",
      "sources": []
    },
    {
      "action": "Use gRPC reflection to list available methods on the server and compare with the client call. If the method is missing, the proto file on the server side is outdated.",
      "success_rate": 0.85,
      "how": "Use gRPC reflection to list available methods on the server and compare with the client call. If the method is missing, the proto file on the server side is outdated.",
      "condition": "",
      "sources": []
    }
  ],
  "workarounds_zh": [
    "Regenerate both client and server stubs from the same .proto file, then rebuild and redeploy the server. Verify the server logs show the registered service at startup.",
    "Use gRPC reflection to list available methods on the server and compare with the client call. If the method is missing, the proto file on the server side is outdated."
  ],
  "transition_graph": {
    "leads_to": [],
    "preceded_by": [],
    "frequently_confused_with": []
  },
  "official_doc_url": "https://grpc.github.io/grpc/core/md_doc_statuscodes.html",
  "official_doc_section": null,
  "error_code": "12",
  "verification_tier": "ai_generated",
  "confidence": 0.88,
  "fix_success_rate": 0.85,
  "resolvable": "true",
  "first_seen": "2024-06-01",
  "last_confirmed": "2024-06-01",
  "last_updated": "2024-06-01",
  "evidence_count": 1,
  "tags": [],
  "locale": "en",
  "aliases": []
}