AskaEth
a0b4c941e4
fix(loop): keep cross-batch voice success and gate speak without dispatcher (M57)
两处 review 必修(review-m57 r1):
P2-1 跨批覆盖:applyBatchVoice 原先无条件用后一批的语音结论覆盖
前一批,于是「先成功合成 abc.wav、下一批换个参数再试却失败」会把
Result.Voice 退化成 tts_failed —— 音频已落盘,退回文本既无收益也
违背那次表达。改为守 captureVoice 的同一条优先级:已落盘的音频不被
后续批次的失败抹掉;先降级后成功仍然覆盖(后到的成功即最终语音)。
P2-2 nil-dispatcher 安全门:speak 由循环自己承载、无 dispatcher 也
能执行(invokeOne 短路),但 applyToolAdmissions 在 dispatcher 缺席
时整段跳过安全门,使「没配 dispatcher」成为绕过 design/11 §3 的
旁路。新增 applyDispatcherlessVoiceGate:与策略引擎对未登记工具的
口径一致(默认关闭、只有 owner 放行),拒绝走同一条 not_allowed
软结果与 tool.reject.not_allowed 审计通道;并改正该处过时注释。
两条回归测试都做过改前红/改后绿:
- TestApplyBatchVoice_KeepsCrossBatchSuccess:注释掉守卫即报
「voice = ... FallbackReason:tts_failed, want abc.wav」
- TestApplyToolAdmissions_DispatcherlessSpeakGate:去掉 else 分支即报
「env group_member run = true, want false」
验收:go build ./... / go vet ./... / go test ./... 全绿。
2026-10-27 22:00:18 +08:00
..
2026-10-06 14:12:24 +08:00
2026-10-06 14:12:24 +08:00
2026-10-06 14:12:24 +08:00
2026-10-06 14:12:24 +08:00
2026-10-06 14:12:24 +08:00
2026-10-06 14:12:24 +08:00
2026-10-03 22:28:21 +08:00
2026-10-13 20:24:21 +08:00
2026-10-03 22:28:21 +08:00
2026-10-13 20:24:21 +08:00
2026-10-04 13:07:52 +08:00
2026-10-03 22:28:21 +08:00
2026-10-03 22:28:21 +08:00
2026-10-03 22:28:21 +08:00
2026-10-04 16:21:20 +08:00
2026-10-05 09:18:50 +08:00
2026-10-03 22:28:21 +08:00
2026-10-04 19:41:44 +08:00
2026-10-04 17:57:08 +08:00
2026-10-04 21:50:08 +08:00
2026-10-04 17:57:08 +08:00
2026-10-04 21:50:08 +08:00
2026-10-05 09:53:08 +08:00
2026-10-06 08:16:03 +08:00
2026-10-06 14:12:25 +08:00
2026-10-06 08:16:03 +08:00
2026-10-05 16:19:32 +08:00
2026-10-06 21:16:21 +08:00
2026-10-06 21:16:21 +08:00
2026-10-05 15:38:53 +08:00
2026-10-04 12:31:20 +08:00
2026-10-03 22:28:21 +08:00
2026-10-06 14:12:25 +08:00
2026-10-06 21:16:21 +08:00
2026-10-04 11:26:35 +08:00
2026-10-04 11:26:35 +08:00
2026-10-04 16:46:57 +08:00
2026-10-27 21:22:14 +08:00
2026-10-04 12:07:44 +08:00
2026-10-05 11:30:51 +08:00
2026-10-04 12:07:44 +08:00
2026-10-05 11:30:51 +08:00
2026-10-05 11:47:39 +08:00
2026-10-05 11:47:39 +08:00
2026-10-04 12:07:44 +08:00
2026-10-04 14:37:37 +08:00
2026-10-06 14:12:24 +08:00
2026-10-03 22:28:21 +08:00
2026-10-03 22:28:21 +08:00
2026-10-03 22:28:21 +08:00
2026-10-03 22:28:21 +08:00
2026-10-27 21:22:14 +08:00
2026-10-05 09:53:08 +08:00
2026-10-05 12:12:23 +08:00
2026-10-04 22:30:04 +08:00
2026-10-04 14:30:26 +08:00
2026-10-03 22:28:21 +08:00
2026-10-04 13:07:52 +08:00
2026-10-27 21:22:14 +08:00
2026-10-04 14:17:58 +08:00
2026-10-04 14:17:58 +08:00
2026-10-04 13:56:35 +08:00
2026-10-27 21:33:05 +08:00
2026-10-05 09:53:08 +08:00
2026-10-05 11:36:18 +08:00
2026-10-26 13:20:45 +08:00
2026-10-26 13:17:42 +08:00
2026-10-27 21:22:20 +08:00
2026-10-27 21:22:14 +08:00
2026-10-04 14:53:40 +08:00
2026-10-06 08:16:03 +08:00
2026-10-04 17:57:08 +08:00
2026-10-04 11:26:35 +08:00
2026-10-04 11:26:35 +08:00
2026-10-04 17:57:08 +08:00
2026-10-05 12:12:31 +08:00
2026-10-05 12:12:31 +08:00
2026-10-04 11:26:35 +08:00
2026-10-03 22:28:21 +08:00
2026-10-07 09:34:45 +08:00
2026-10-26 13:17:42 +08:00
2026-10-04 22:30:04 +08:00
2026-10-03 22:28:21 +08:00
2026-10-27 22:00:18 +08:00
2026-10-04 12:45:48 +08:00
2026-10-27 22:00:18 +08:00
2026-10-04 14:14:05 +08:00
2026-10-27 21:22:14 +08:00
2026-10-27 22:00:18 +08:00
2026-10-03 22:28:21 +08:00
2026-10-04 22:14:42 +08:00
2026-10-03 22:28:21 +08:00
2026-10-03 22:28:21 +08:00
2026-10-05 08:04:49 +08:00
2026-10-04 16:46:57 +08:00
2026-10-27 22:00:18 +08:00
2026-10-27 22:00:18 +08:00
2026-10-27 20:22:12 +08:00