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 单独跑亦绿。
- 只翻注释/文档字符串:剥掉注释后代码行逐字节不变(机械校验只剩允许的行尾注释形态) - 术语对齐既有译法(owner→主人、persona→角色、engage→参与度判定、quiet hours→安静时段、backoff→退避) - 复核:go build 绿 + channelbridge 包测试绿;gofmt 干净
- persona 加 triggerWords(昔涟/Cyrene/有瑕的追忆/追忆);Loader 解析 - light.go: shouldRespond 拆分 legacy 与 engage 路径;LightInput/LightDecision 扩展 - engage.go(新): EngageConfig + IDLE/PROBING/ACTIVE/COOLDOWN 状态机(按 platform:groupID 内存) + 概率触发(可注入rand) + 角色名提词触发 + 活动期跟随(话题转移/连续无感/窗口) + 负面态度冷避 - engagejudge.go(新): NewLLMLightJudge,一次成本受控轻LLM判 值不值得回(不判身份), 解析失败/超时 fail-closed 静默 - channelbridge.go: Options(TriggerWords/PersonaPrompt/Engage/EngageFor/EngageRand) + 字段初始化 - wire.go: 接线 Light+TriggerWords+PersonaPrompt+Engage(默认概率0.10) - 红线: 未触发/未命中概率绝不调LLM; 身份靠actor元数据; 敏感不落日志; 零新依赖 - 测试: engage_test.go(触发/状态机/冷避/成本受控/JUDGE输入) + persona triggerWords 用例 - 验收: go build/vet/test ./... 全绿