9470a127f7
build / build (push) Successful in 1m11s
统一AI分析入口及双任务安全确认,采用全量载入的可见行渲染,保留完整原文。 右侧非模态详情固定五项质量字段,清理冗余展示并对齐查询和同步按钮。 默认4并发由数据库准入与逐任务租约保护,保留共享限流冷却、截断归因和有界重试。 兼容真实引用标题字段,不伪造证据或准确率,不修改源生产问答与公司区域规则。 验证:完整make verify退出0,710项Go通过、124项已声明可选跳过且必需0跳过; 另全量mirror隔离PostgreSQL race退出0,AI单元race退出0。 真实本地浏览器通过六项交互、390px内滚动及显式AI部分失败/零缺口故障夹具。 治理原生备份已真实恢复,schema57、72表计数与29张QA内容哈希一致。 候选镜像、精确提交CI与正式上线验收待本次提交后执行,不宣称已部署。
33 lines
1.1 KiB
Go
33 lines
1.1 KiB
Go
package qaopsai
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"knowledge-governance/internal/dobotaiops"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestRunWithUnavailableStoreFailsClosed(t *testing.T) {
|
|
ctx, cancel := context.WithTimeout(context.Background(), 20*time.Millisecond)
|
|
defer cancel()
|
|
defer func() {
|
|
if recover() != nil {
|
|
t.Fatal("unavailable worker panicked")
|
|
}
|
|
}()
|
|
called := false
|
|
(&Store{}).Run(ctx, func(err error) { called = err == ErrUnavailable })
|
|
if !called {
|
|
t.Fatal("unavailable worker failed silently")
|
|
}
|
|
}
|
|
|
|
func TestReferencesPreserveSourceKnowledgeTitleWithoutInventingEvidence(t *testing.T) {
|
|
r := dobotaiops.Record{References: json.RawMessage(`[{"knowledge_title":"MG400官方连接说明","id":"only-title"},{"title":"原始标题","knowledge_title":"不能覆盖","content":"逐字证据"}]`)}
|
|
refs := referencesFor(r)
|
|
if len(refs) != 2 || refs[0].Title != "MG400官方连接说明" || refs[0].Excerpt != "" || refs[1].Title != "原始标题" || refs[1].Excerpt != "逐字证据" {
|
|
t.Fatalf("source citation titles lost or title-only treated as evidence: %+v", refs)
|
|
}
|
|
}
|