{
  "id": "go/grpc-failed-precondition-required-field",
  "signature": "rpc error: code = InvalidArgument desc = proto: User: field \"email\" is required",
  "signature_zh": "rpc 错误：code = InvalidArgument desc = proto: User: 字段 \"email\" 为必填",
  "regex": "rpc\\ error:\\ code\\ =\\ InvalidArgument\\ desc\\ =\\ proto:\\ User:\\ field\\ \"email\"\\ is\\ required",
  "domain": "go",
  "category": "data_error",
  "subcategory": null,
  "root_cause": "protoc-gen-validate (PGV) or the newer protovalidate rules rejected the message because a required field was empty. The server returns InvalidArgument with the validation message.",
  "root_cause_type": "generic",
  "root_cause_zh": "protoc-gen-validate（PGV）或较新的 protovalidate 规则因必填字段为空而拒绝该消息。服务端返回带验证消息的 InvalidArgument。",
  "versions": [
    {
      "version": "github.com/envoyproxy/protoc-gen-validate 1.x",
      "introduced": null,
      "deprecated": null,
      "removed": null,
      "behavior_change": null,
      "status": "active"
    }
  ],
  "os_specific": {},
  "dead_ends": [
    {
      "action": "",
      "why_fails": "Removes all input safety checks and allows malformed data into downstream systems.",
      "fail_rate": 0.9,
      "condition": "",
      "sources": []
    },
    {
      "action": "",
      "why_fails": "PGV rules like min_len:1 still reject empty strings; only non-empty values pass.",
      "fail_rate": 0.85,
      "condition": "",
      "sources": []
    }
  ],
  "workarounds": [
    {
      "action": "",
      "success_rate": 0.9,
      "how": "if err := user.Validate(); err != nil {\n    return fmt.Errorf(\"invalid user: %w\", err)\n}\nresp, err := client.Create(ctx, user)",
      "condition": "",
      "sources": []
    },
    {
      "action": "",
      "success_rate": 0.85,
      "how": "st := status.New(codes.InvalidArgument, \"validation failed\")\nbr := &errdetails.BadRequest{FieldViolations: []*errdetails.BadRequest_FieldViolation{\n    {Field: \"email\", Description: \"required\"},\n}}\nst, _ = st.WithDetails(br)\nreturn nil, st.Err()",
      "condition": "",
      "sources": []
    }
  ],
  "workarounds_zh": [],
  "transition_graph": {
    "leads_to": [],
    "preceded_by": [],
    "frequently_confused_with": []
  },
  "official_doc_url": null,
  "official_doc_section": null,
  "error_code": null,
  "verification_tier": "ai_generated",
  "confidence": 0.84,
  "fix_success_rate": 0.8,
  "resolvable": "true",
  "first_seen": "2024-12-02",
  "last_confirmed": "2025-01-01",
  "last_updated": "2025-01-01",
  "evidence_count": 0,
  "tags": [],
  "locale": "en",
  "aliases": []
}