{"record":{"id":"d572540a3a7c7a5c","repo":"vxcontrol/pentagi","slug":"center-node-uuid-must-be-a-valid-uuid-copied-verba","errorCode":null,"errorMessage":"center_node_uuid must be a valid UUID copied verbatim from the 'UUID:' field of a prior graphiti_search result, got %q","messagePattern":"center_node_uuid must be a valid UUID copied verbatim from the 'UUID:' field of a prior graphiti_search result, got %q","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"backend/pkg/tools/graphiti_search.go","lineNumber":393,"sourceCode":"\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"temporal window search failed: %w\", err)\n\t}\n\n\treturn FormatGraphitiTemporalResults(resp, args.Query), nil\n}\n\n// handleEntityRelationshipsSearch finds relationships from a center node\nfunc (t *graphitiSearchTool) handleEntityRelationshipsSearch(\n\tctx context.Context,\n\tgroupID string,\n\targs GraphitiSearchAction,\n\tobservationObject *graphiti.Observation,\n) (string, error) {\n\tif args.CenterNodeUUID == \"\" {\n\t\treturn \"\", fmt.Errorf(\"center_node_uuid is required for entity_relationships search\")\n\t}\n\tif _, err := uuid.Parse(args.CenterNodeUUID); err != nil {\n\t\treturn \"\", fmt.Errorf(\n\t\t\t\"center_node_uuid must be a valid UUID copied verbatim from the 'UUID:' field of a prior \"+\n\t\t\t\t\"graphiti_search result, got %q\", args.CenterNodeUUID,\n\t\t)\n\t}\n\n\tmaxResults := args.MaxResults.Int()\n\tif maxResults <= 0 {\n\t\tmaxResults = DefaultRelationshipMaxResults\n\t}\n\n\tmaxDepth := args.MaxDepth.Int()\n\tif maxDepth <= 0 {\n\t\tmaxDepth = DefaultMaxDepth\n\t}\n\tif maxDepth > 3 {\n\t\tmaxDepth = 3\n\t}\n","sourceCodeStart":375,"sourceCodeEnd":411,"githubUrl":"https://github.com/vxcontrol/pentagi/blob/ea665308baaff015b226f308438a68d929d0f29b/backend/pkg/tools/graphiti_search.go#L375-L411","documentation":"After presence-checking center_node_uuid, entity_relationships validates it with uuid.Parse. Any non-UUID string (invented IDs, names, truncated UUIDs) produces this error quoting the received value, instructing the caller that the UUID must be copied verbatim from a prior graphiti_search result's 'UUID:' field.","triggerScenarios":"Passing a node name, hostname, partial UUID, or an ID from a different system as center_node_uuid for entity_relationships search.","commonSituations":"LLM agents hallucinating plausible-looking UUIDs; copying an 'ID' column that is not the UUID field; whitespace or quotes around the value breaking the parse.","solutions":["Copy the exact UUID string from the 'UUID:' field of a prior graphiti_search result","Re-run a nodes search to obtain a valid UUID if the original is lost","Trim whitespace/quotes from the value before passing it"],"exampleFix":"// before\n{\"center_node_uuid\": \"vpn-server-node\"}\n// after\n{\"center_node_uuid\": \"3f2a9c1e-8b47-4d20-9c11-2f6a5b7e1234\"}","handlingStrategy":"validation","validationCode":"if _, err := uuid.Parse(args.CenterNodeUUID); err != nil {\n    return fmt.Errorf(\"center_node_uuid is not a valid UUID: %q\", args.CenterNodeUUID)\n}","typeGuard":"func isValidUUID(s string) bool {\n    _, err := uuid.Parse(s)\n    return err == nil\n}","tryCatchPattern":null,"preventionTips":["Copy UUIDs verbatim from the 'UUID:' field of graphiti_search output","Trim whitespace and quotes from IDs extracted by the LLM","Never let the model invent IDs; require them to come from prior tool output"],"tags":["validation","uuid","graphiti","format"],"backgroundTag":"invalid-uuid-format","analyzedSha":"ea665308baaff015b226f308438a68d929d0f29b","analyzedAt":"2026-09-01T14:16:31.421Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}