diff --git a/internal/store/pg/knowledge_graph_embedding.go b/internal/store/pg/knowledge_graph_embedding.go index 72f56824..6fec08bb 100644 --- a/internal/store/pg/knowledge_graph_embedding.go +++ b/internal/store/pg/knowledge_graph_embedding.go @@ -113,6 +113,14 @@ func (s *PGKnowledgeGraphStore) EmbedEntity(ctx context.Context, entityID, name, if s.embProvider == nil { return } + // Fail fast on a bad entity UUID so the UPDATE never degrades into a + // silent no-op WHERE id = uuid.Nil. Callers today pass a freshly minted + // UUID, but the error path guards against future drift. + eid, err := parseUUID(entityID) + if err != nil { + slog.Warn("kg entity embedding: invalid UUID", "entity_id", entityID, "error", err) + return + } text := name + " " + description embeddings, err := s.embProvider.Embed(ctx, []string{text}) if err != nil || len(embeddings) == 0 || len(embeddings[0]) == 0 { @@ -121,7 +129,7 @@ func (s *PGKnowledgeGraphStore) EmbedEntity(ctx context.Context, entityID, name, vecStr := vectorToString(embeddings[0]) if _, err := s.db.ExecContext(ctx, `UPDATE kg_entities SET embedding = $1::vector WHERE id = $2`, - vecStr, parseUUIDOrNil(entityID), + vecStr, eid, ); err != nil { slog.Warn("kg entity embedding failed", "entity_id", entityID, "error", err) }