mirror of
https://gitcode.com/JianFeeeee/ModelRouter.git
synced 2026-11-07 09:47:23 +00:00
## 我上一版(v2.0.28)自己引入的缺陷 内核桥的签名是 `call(name, args) -> (result, nil) | (nil, err)` —— **失败时第一个返回值是 nil,原因在第二个返回值里**。 我写成 `local r = call(...)` 再读 `r.ok` ⇒ 恒为 nil ⇒ 日志只说 「撤源(重建)失败 channels-buddy-buddy-main: 无返回」。 **一句不可操作的诊断比没有更糟**:它把"权限没授予 / 超时 / 拒删最后一个源" 三种完全不同的原因(对应三种完全不同的处置)压成同一句空话。生产实测已复现 这条日志(部署时全量重同步,权限尚未授予)。 ## 修法 两个撤源点都改成接**两个返回值**,日志带上内核给出的原文原因: `kernel action "remove_source" is not granted to plugin "channels"; enable it in the plugin's kernel permissions` 并把"要授予哪个动作、声明在 plugin.kernel"一并写进提示。 ## 判据收紧(旧判据咬不住这个变异) 原来只断言日志含"撤源失败"和"remove_source" —— **只接第一个返回值的版本照样通过**。 新增断言:日志必须含内核给的**真实原因**(`not granted`)。 这是本会话第 9 类判据教训:**判据只看"失败了",不看"为什么失败"**, 于是它无法区分"诊断可用"与"诊断是空话"。