-
erio authored
- pool 改在 NewChannelMonitorRunner 构造时初始化,消除 Start 在 mu 内 赋值、fire/Stop 在 mu 外读取的竞态隐患 - Schedule 在 !started 时由静默 return 改为 slog.Warn,错过的调度可见 - Schedule 在 interval<=0 时升为 slog.Error:Create/Update validateInterval 已保证不可达,真触发即数据/校验链 bug - 抽出 monitorRunnerSvc 内部接口(仅 ListEnabledMonitors+RunCheck), 生产 *ChannelMonitorService 自然满足;runner 单元测试可注入轻量 stub - 新增 channel_monitor_runner_test.go(10 个用例,//go:build unit): 覆盖 Schedule/Unschedule/Start/Stop 生命周期、in-flight 槽对称释放、 Stop 等待正在执行的 RunCheck 退出(无游离 goroutine) 启动失败的恢复策略:保持现状(log+return)。CLAUDE.md 明确"配置应保证启动 成功(必填项校验+正确数据校验)",validate{Provider,Interval,Endpoint, APIKey,PrimaryModel} 已在 Create/Update 全部覆盖;DB 不可用是基础设施问题, 不该靠应用层无限重试兜底。c46744f3