feat(graph): node gloss→base embeddable entry 橋——Arcrun#7 A1
修「打標≠讀標」:node gloss+embed 標在 entity record、但 base embed 只掃 entries.metadata.embed → persistNodes 另落一筆 content=canonical:gloss、metadata.embed=true 的 base entry(走 API/零SQL)。 - gloss-entry.ts: upsertGlossEntry 冪等(確定性 page_name + list-then-write) - backfill-gloss-entries.ts + route: 對既有 entity record 補 gloss entry - triplet-ingest 帶 source.uri 進 metadata;kbdb-client 暴露 metadata_json(base 早支援) - vitest 30/30(+7);[→arcrun] base 缺 upsert entry 端點,暫以 list-then-write 冪等
This commit is contained in:
@@ -4,6 +4,7 @@
|
||||
|
||||
import type { KbdbClient } from '../lib/kbdb-client';
|
||||
import { TPL_ENTITY, ensurePluginTemplates } from '../lib/templates';
|
||||
import { upsertGlossEntry } from './gloss-entry';
|
||||
|
||||
export type IngestNode = {
|
||||
name: string;
|
||||
@@ -23,6 +24,7 @@ export async function persistNodes(
|
||||
client: KbdbClient,
|
||||
nodes: IngestNode[],
|
||||
owner_id?: string,
|
||||
source?: string, // envelope source.uri,帶進 gloss entry 的 metadata.source(供 base backfill 依 source 過濾)
|
||||
): Promise<void> {
|
||||
if (!nodes || nodes.length === 0) return;
|
||||
await ensurePluginTemplates(client);
|
||||
@@ -46,5 +48,12 @@ export async function persistNodes(
|
||||
},
|
||||
owner_id,
|
||||
);
|
||||
|
||||
// 另落一筆 embeddable base entry(metadata.embed=true)——record 的 gloss 標 base embed 讀不到,
|
||||
// 必須也落成 entry base embed 模組才掃得到(打標≠讀標的修補)。只在要 embed(embed !== false)時落;
|
||||
// 空 gloss 由 upsertGlossEntry 自行跳過。冪等:同 node 重複 ingest 不造重複 entry。
|
||||
if (n.embed !== false) {
|
||||
await upsertGlossEntry(client, { canonical: n.name, node_id: n.id, gloss: n.gloss, source }, owner_id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user