diff --git a/tests/authority-vector-primary.mjs b/tests/authority-vector-primary.mjs index 68a14ed..b6b4f67 100644 --- a/tests/authority-vector-primary.mjs +++ b/tests/authority-vector-primary.mjs @@ -169,6 +169,10 @@ function createMockTriviumClient({ path: "/bme/vector-apply", }); } + const itemWithTopLevelId = payload.items?.find((item) => item?.id !== undefined); + if (itemWithTopLevelId) { + throw new Error("bmeVectorApply items must not send top-level Trivium id"); + } return { ok: true, database: payload.database || "st_bme_vectors", @@ -266,6 +270,11 @@ assert.equal(isAuthorityVectorConfig(config), true); assert.equal(applyCall.items.every((item) => item.payload?.vectorSpaceId === applyCall.vectorSpaceId), true); assert.equal(applyCall.items.every((item) => item.payload?.observedDim === 2), true); assert.equal(applyCall.items.every((item) => Array.isArray(item.vector) && item.vector.length > 0), true); + assert.equal(applyCall.items[0].id, undefined); + assert.equal(applyCall.items[0].externalId, "node-a"); + assert.equal(applyCall.items[0].nodeId, "node-a"); + assert.equal(applyCall.items[0].payload.nodeId, "node-a"); + assert.equal(applyCall.items[0].payload.externalId, "node-a"); assert.equal(result.timings.authorityDiagnostics.upsert.operation, "bmeVectorApply"); } diff --git a/vector/authority-vector-primary-adapter.js b/vector/authority-vector-primary-adapter.js index 3ff18b9..7f0ec6d 100644 --- a/vector/authority-vector-primary-adapter.js +++ b/vector/authority-vector-primary-adapter.js @@ -261,6 +261,7 @@ function buildAuthorityNodePayload(node = {}, entry = {}, { chatId = "", modelSc return { chatId, nodeId: normalizeRecordId(node?.id || entry?.nodeId), + externalId: normalizeRecordId(node?.id || entry?.nodeId), type: String(node?.type || ""), archived: Boolean(node?.archived), seqStart: Number(seqRange[0] ?? node?.seq ?? 0) || 0, @@ -295,7 +296,6 @@ function buildAuthorityVectorItems(graph, entries = [], options = {}) { if (!node) return null; const payload = buildAuthorityNodePayload(node, entry, options); return { - id: nodeId, externalId: nodeId, nodeId, text: String(entry?.text || ""),