Files
memoryweave/go/internal/pattern/writegate_test.go
T
hermes-prof-dev 99cb22ba93 fix(pattern): 二轮判据收紧——白名单唯一来源+通用词黑名单+hash/数值/目录碎片过滤+conf≥0.5写入门槛+组合≥2成员 (t_639c5a03)
小怡 2026-10-30 二轮裁定 5 条全落:
1. ExtractTools 移除'命令式标识'兜底(hash/uuid/目录/文件名碎片的进入路径),成员=knownTools 白名单唯一来源
2. genericTools 黑名单(git/go/curl/grep/bot-chat/mcp/api 等)即使形态合格也拒
3. isValidTool 新增 isHashFragment/isNumericUnitFragment/isNumberedDirName 形态闸
4. UpsertPatterns conf<0.5 一律不写(MinWriteConfidence)
5. tool_combo 需≥2成员(组合语义);IsValidPatternName 同步收紧
单测:junk 类别逐项回归 + 写入门槛 + 幂等/门限值钉死
2026-10-30 20:59:04 +08:00

43 lines
1.5 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package pattern
import "testing"
// TestStore_WriteConfidenceGate —— 二轮裁定 #5:conf<MinWriteConfidence(0.5) 一律不落库。
// 命名键合法(白名单、≥2 成员)也不行——弱信号只出现在 dry-run 观测里。
func TestStore_WriteConfidenceGate(t *testing.T) {
s := newTestStore(t)
low := Pattern{
ID: "pat_tool_combo:jq+rsync", Type: "tool_combo",
Name: "tool_combo:jq+rsync", Data: "jq+rsync",
Confidence: 0.2, // freq=2 ⇒ 0.2,正是被点名的弱信号档
Tools: []string{"jq", "rsync"},
SourceTasks: []string{"m_1", "m_2"},
}
created, updated, err := s.UpsertPatterns([]Pattern{low})
if err != nil {
t.Fatalf("upsert 报错: %v", err)
}
if created != 0 || updated != 0 {
t.Fatalf("conf=0.2 < 门槛 0.5 应拒写,实际 created=%d updated=%d", created, updated)
}
ok := low
ok.Name = "tool_combo:jq+sqlite3"
ok.ID = "pat_tool_combo:jq+sqlite3"
ok.Data = "jq+sqlite3"
ok.Confidence = 0.5 // 恰好达门槛:允许写
created, _, err = s.UpsertPatterns([]Pattern{ok})
if err != nil {
t.Fatalf("upsert 报错: %v", err)
}
if created != 1 {
t.Fatalf("conf=0.5 恰达门槛应写入 1 条,实际 created=%d", created)
}
}
// TestMinWriteConfidenceValue —— 门槛值与卡面(小怡裁定 ≥0.5)钉死,防手滑改低。
func TestMinWriteConfidenceValue(t *testing.T) {
if MinWriteConfidence != 0.5 {
t.Fatalf("MinWriteConfidence 应为 0.5(小怡 2026-10-30 裁定 #5),实际 %v", MinWriteConfidence)
}
}