Id-aware record resolution for shared graphs
Record ingestion (type: "json") now resolves entities by the caller’s record identity, not by name alone. Two members who share a name keep two separate nodes. A record re-sent with the same source_description stamp finds its existing node, even after a display-name change.
Three pieces work together. A stable id field on the record (for example tieUserId) lands on the subject’s node as external_id. The source_description stamp carries the same id and drives resolution on corrections. Field values that equal another node’s external_id become real edges — an event’s hostTieUserId produces a HOST edge to that member.
{
"data": "{\"tieUserId\": \"0f4b9c21-...\", \"name\": \"Dana Ferreira\", \"city\": \"Kuala Lumpur\"}",
"type": "json",
"graph_id": "acme__members",
"source_description": "acme-member-profile:0f4b9c21-..."
}Extraction also improved for records: every field produces a fact, including list fields such as languages (a new SPEAKS relationship) and free-text intent fields (WANTS_TO_MEET now applies to Person subjects, not only the conversation user).
Callers that ingest third-party records should follow the new conventions: Ingesting Records and Records About People.