- 只翻注释/文档字符串:`go/scanner` 剥注释后按 token 序列+literal 逐 token 比对,**54/54 文件 SAME**; 改动文件总行数与 HEAD 漂移 = 0(严格 1:1,无合并/拆行) - 裁决编号与 design 节号逐字保留(03.4.1/03.4.2/03.4.3/14.4.1/14.4.5/07.4.2-4、design/04 §3.1/§3.2 等); `chat_template_kwargs` / `enable_thinking` / `reasoning_effort` / `thinking:{type}` 字段名与形状说明未动 - 存疑译法(已登记):`persona` 在叙事语境用「角色」、标识符语境保留 `persona`(仓库既有模块本身混用); `rung`→「级」;`provider` 存在「提供商/提供者」两种落笔(可按需一键统一) - 复核:build/vet 绿 + 两包测试绿;gofmt 干净;残留英文注释 0 条 - 既有存量(未修,只报告):`model/anthropic_test.go` 612 行 >500;`applyAnthropicEvent` 115 行 >80
- proactive.go(新): parseProactive 从结论解析 [我决定:push|no_push][渠道:...]<正文>; 兼容大小写/全半角冒号; 无标记回退(无/nothing=不推); 畸形/孤标记 fail-safe 不推 - context.go: guidancePrompt 引导结构化结尾+保留P1温暖引导 - push.go: PushRequest{Message,ChannelHint}; Pusher.Push 路由(auto→active优先/IM兜底, web→仅active, im→仅IM, 具体平台→IM+platform打标+缺IM回退默认记detail); buildProactiveMessage - backthink.go: think() 用 parseProactive→ShouldPush=push&&disturbAllowed(不再被tr.Import卡死) - decide.go: disturbAllowed(asleep/working/quiet 硬性不打扰门) 取代旧import门(保留旧Decide兼容) - 测试: parseProactive 6组+think端到端(真实pusher:kook→IM/无标记→active/no_push→不推/睡眠→门拦截) +buildProactiveMessage+具体平台无IM回退; 后端 build/vet/test 全绿 - 注: 生产 Active/IM sink 未注入 wire.go backthink.Deps(另一步); 多平台IM受单IMAdapter接口限制