533db535f1
build / build (push) Successful in 1m12s
按已确认需求提供独立安全模型配置、真实探测、正式字典字段评估与原问题译中,持久批次支持只补空白、暂停恢复、有限重试、幂等和逐字段依据。覆盖固定规则、本地语言、组织关联与主表有效看板共用治理侧读模型,保留源生产和冻结历史。 验证:完整 make verify 退出0,702项Go与329项前端通过;默认118项外部/隔离集成明确跳过,另跑完整镜像及组织隔离PG竞态。12并发、输入漂移、过期租约、暂停/恢复及有限重试通过。用户授权的百炼 deepseek-v4.1-flash 完成真实后台与浏览器评估/翻译;552行、16列、11块看板及完整PNG、独立配置页测试/保存、重开恢复和零JS异常通过。仅非业务样本外发,自动处理关闭,原payload不变。 上线前治理库已做导出快照原生备份并真实恢复,60表行数与17个QA表内容哈希一致;不修改DobotAI生产或隧道。本提交时尚未部署,线上验收须独立完成。
43 lines
1.7 KiB
Go
43 lines
1.7 KiB
Go
package qaopsmirror
|
||
|
||
import (
|
||
"context"
|
||
"encoding/json"
|
||
"knowledge-governance/internal/dobotaiops"
|
||
pg "knowledge-governance/internal/platform/postgres"
|
||
"testing"
|
||
)
|
||
|
||
func TestMasterReadsDeriveLanguageAndCoverageWithoutChangingSourceOrStoredFields(t *testing.T) {
|
||
pool := mirrorFixture(t)
|
||
ctx := context.Background()
|
||
s := NewStore(pool, "fixture-local-fields")
|
||
queue := pg.NewStore(pool)
|
||
entry := fixtureEntry("local-language", "已有资料")
|
||
var wire map[string]any
|
||
_ = json.Unmarshal(entry.Payload, &wire)
|
||
wire["question"] = "MG400 怎么连接 PLC?"
|
||
entry.Payload, _ = json.Marshal(wire)
|
||
job := claimMirrorJob(t, s, queue, "local-field-seed")
|
||
if err := s.HandleSync(ctx, *job, func(context.Context) (Source, error) {
|
||
return &fixtureSource{rows: []dobotaiops.MirrorRecord{entry}}, nil
|
||
}); err != nil {
|
||
t.Fatal(err)
|
||
}
|
||
got, err := s.GetMasterRecord(ctx, s.tenant, "local-language")
|
||
if err != nil {
|
||
t.Fatal(err)
|
||
}
|
||
if got.MasterFields["language"] != "中文" || got.MasterFields["question_chinese"] != got.Question || got.Coverage.Verdict != "covered" {
|
||
t.Fatalf("master derivation not served: language=%q translation=%q coverage=%q", got.MasterFields["language"], got.MasterFields["question_chinese"], got.Coverage.Verdict)
|
||
}
|
||
var changed bool
|
||
if err = pool.QueryRow(ctx, `SELECT payload?'master_fields' FROM qa_ops_master_records WHERE tenant_key=$1 AND id=$2`, s.tenant, got.ID).Scan(&changed); err != nil || changed {
|
||
t.Fatal("read projection mutated stored master input", err)
|
||
}
|
||
source, err := s.GetRecord(ctx, s.tenant, got.ID)
|
||
if err != nil || source.Coverage.Verdict != "" || source.MasterFields != nil {
|
||
t.Fatal("master rule silently changed legacy/source projection", err)
|
||
}
|
||
}
|