fix(candidate): 夹具用产品探针证空并复用真实索引 mapping
build / build (push) Successful in 1m55s

首轮试跑暴露三处夹具缺陷(都在 test-only 文件里,产品代码未动):
- 目标骨架只核 knowledge_bases:最小夹具 schema 没有 tenants 表,改为按 KB 行数与
  产品 ScopeContentEmpty 的十表计数证空;
- 运行期索引曾把 GET _mapping 的结果再包一层 mappings,ES 400;
  现在直接回放原 mapping 文档(properties 层级与封存时完全一致);
- 目标指纹改在夹具分配桶名之后用同一份 env 计算,运行器再把桶名写进 API/worker env。

试跑两次均按 cleanup_empty_target_ui.py 精确清理并读回(resources 全不存在)。
This commit is contained in:
姚章浩
2026-11-02 11:11:08 +08:00
parent c31a7df4ca
commit 6827fa922f
@@ -91,15 +91,12 @@ UPDATE knowledge_bases SET embedding_model_id='candidate-model',vector_store_id=
t.Fatalf("candidate target %s has %d rows in scope; the target must be empty before delivery", table, n)
}
}
var kbRows, tenantRows int64
var kbRows int64
if err := fx.pool.QueryRow(ctx, `SELECT count(*) FROM knowledge_bases WHERE id=$1 AND tenant_id=$2`, wsTargetKB, wsTargetTenant).Scan(&kbRows); err != nil {
t.Fatal(err)
}
if err := fx.pool.QueryRow(ctx, `SELECT count(*) FROM tenants WHERE id=$1`, wsTargetTenant).Scan(&tenantRows); err != nil {
t.Fatal(err)
}
if kbRows != 1 || tenantRows < 1 {
t.Fatalf("empty target still needs its KB/tenant skeleton: kb=%d tenants=%d", kbRows, tenantRows)
if kbRows != 1 {
t.Fatalf("empty target still needs its KB skeleton: knowledge_bases rows=%d", kbRows)
}
mapping, err := fx.target(t).Search().MappingSHA256(ctx)
@@ -211,8 +208,8 @@ UPDATE knowledge_bases SET embedding_model_id='candidate-model',vector_store_id=
"target_fingerprint": fingerprint,
"target": map[string]any{"tenant_id": wsTargetTenant, "knowledge_base_id": wsTargetKB,
"database": os.Getenv("KG_LIBRARY_TEST_DATABASE_URL") != "", "empty_probe_counts": counts,
"knowledge_bases_rows": kbRows, "tenants_rows": tenantRows,
"note": "KB/tenant 骨架存在、十表内容为 0:这是首次发布的空目标,不是'没有目标'"},
"knowledge_bases_rows": kbRows,
"note": "KB 骨架存在、十表内容为 0:这是首次发布的空目标,不是'没有目标'"},
"runtime_index": runtimeIndex,
"mapping_sha256": mapping,
"runtime_mapping_sha256": runtimeMapping,
@@ -347,7 +344,7 @@ func candidateCreateIndex(ctx context.Context, base, index string, body map[stri
return fmt.Errorf("runtime index %s already exists: refusing to reuse an unknown index", index)
}
}
payload, err := json.Marshal(map[string]any{"mappings": body})
payload, err := json.Marshal(body)
if err != nil {
return err
}