fix(channelbridge): 冷避优先于「@她必回」——群成员也能让她少说话
M18(主人 2026-10-14 裁决「给」)。病灶是**顺序**:`shouldRespond` 把 `ruleLightJudge`(指向她本人 / 高价值关键词)排在参与度引擎之前,@她的消息 在规则层就 return true,永远走不到 `engageDecision` 的冷避判定——群成员说 「少说点」只换来一句口头答应,行为零变化(2026-10-14 00:27 群 531082168 报障)。 - light.go:新增冷避闸位次 —— 非主人**群**消息在廉价规则之前先过 `coldShoulderGate`,命中负面态度即进 COOLDOWN、冷却期内一律静默(仍登记)。 边界:私聊不受影响(冷避是群机制)、owner 车道更早分岔不受影响、 与是否装配参与度引擎无关。shouldRespond 的判定顺序写进函数注释。 - engage.go:把冷避判据抽成唯一实现 `coldShoulderLocked`(engageDecision 仍调用 它,作纵深防御),命中时补一条带 source 的 INFO(群 / 发送者 / 冷却到何时)。 - engage.go 词表:依真机原话补「减少文本输出」(覆盖「减少文本输出量」)与 「文本输出调到最少」;刻意不取「减少 / 输出 / 最少」等短泛词(子串匹配会误伤)。 - 测试:新增 engage_coldshoulder_test.go(主断言修前红/修后绿、登记进上下文的 端到端守卫、私聊与 owner 边界护栏、词表误伤护栏、INFO 可见性); engage_test.go 更新旧口径「@ 打断冷却」为「@ 不得作废冷避」。 验收:go build ./... + go vet ./... + go test -count=1 ./... 全绿(windows 本机 与 darwin/arm64 交叉编译均通过);channelbridge / channel / cmd/cyrene 单独跑亦绿。
This commit is contained in:
1 parent
6432088586
commit
fe53e029ea
4 files changed
+499
-24
No files matched your search
@@ -269,11 +269,15 @@ func TestEngageColdAvoidCooldownSuppressesThenExpires(t *testing.T) {
|
||||
t.Fatalf("during cooldown: calls=%d session=%q, want 0/\"\" (suppressed)", judge.calls, chat.sessionID)
|
||||
}
|
||||
|
||||
// 直接 @ 仍会打断冷却(design/18 §5:除非 @ 她)。
|
||||
// M18(主人 2026-10-14 裁决「给」):冷却期内**连 @ 也不回** ——
|
||||
// 冷避优先于「@她必回」,群成员的一句「少说点」不被随后的 @ 作废。
|
||||
// (旧口径「@ 打断冷却」正是本片修掉的偏离;见 design/18 §5 与
|
||||
// engage_coldshoulder_test.go 的端到端用例。)
|
||||
chat.sessionID = ""
|
||||
b.process(context.Background(), nonOwnerGroupMsg("在吗", adapter.Mention{UserID: "bot"}))
|
||||
if chat.sessionID != "sess-g" {
|
||||
t.Fatalf("mention during cooldown: session=%q, want sess-g (@ always replies)", chat.sessionID)
|
||||
if chat.sessionID != "" || judge.calls != 0 {
|
||||
t.Fatalf("mention during cooldown: session=%q calls=%d, want \"\"/0 (@ no longer breaks the cold shoulder)",
|
||||
chat.sessionID, judge.calls)
|
||||
}
|
||||
|
||||
// 冷却计时结束后,角色名提及会重新触发参与(PROBING → ACTIVE)。
|
||||
|
||||
Reference in new issue
Block a user