fix(core): preserve external_id during entity upsert on re-index#724
fix(core): preserve external_id during entity upsert on re-index#724
Conversation
Force full re-index was generating new external_id UUIDs for every entity, breaking public share links that reference entities by their stable external_id. The upsert logic now preserves the existing external_id when resolving file_path conflicts. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> Signed-off-by: Drew Cain <groksrc@gmail.com>
|
Claude finished @groksrc's task in 1m 1s —— View job PR Review:
|
Summary
external_idUUIDs for every entity, breaking public share links in Basic Memory Cloudupsert_entity()merged a freshly-created entity model (with a new UUID) over the existing database record, overwriting the stableexternal_idexisting_entity.external_idbeforesession.merge()in the file_path conflict resolution pathDetails
Reproduction path:
note_external_idinpublic_sharetable)POST /admin/tenants/{id}/index?force_full=true)external_idCode flow:
entity_indexercallscreate_entity_from_markdown()without an existing entityentity_model_from_markdown()createsEntity()withexternal_id = uuid4()upsert_entity()detects file_path conflict, setsentity.id = existing.idsession.merge()overwrites all fields includingexternal_id← bugFix: One line —
entity.external_id = existing_entity.external_idbefore merge.Test plan
test_upsert_entity_preserves_external_id— creates entity, upserts with different external_id, asserts original is preserved🤖 Generated with Claude Code