fix(dispatcher): apply approved SIP before real startup verification

This commit is contained in:
2026-10-09 16:20:37 +08:00
parent f323e31b6c
commit b37d9f3af0
10 changed files with 339 additions and 3 deletions
@@ -0,0 +1,38 @@
# 正式 Dispatcher SIP 加载遗漏修复(2026-10-09)
## 授权与完成标准
使用者在只读根因定位后确认按已讨论方案修复、验证并重新部署 `server.sip`:正式入口接入现有 SIP 加载能力,保留占用检查与实际版本核对,补启动和更新回归测试。
不重置、清理或迁移业务数据,不创建或删除真实 RabbitMQ 拓扑,不重启 Asterisk,不做独立试拨或主动投递任务。正式部署仍沿用固定配置和数据目录、`nonprod-real` 与既有真实 SaaS 获批任务授权。
完成标准:旧逻辑回归测试明确失败、修复后通过;完整本地验收和业务覆盖率 ≥65%;代码先提交并推送再部署;现场核对实际 SIP 加载与服务状态,不以 Mock 或部署标签替代事实。
## 根因及只读现场证据
- 正式业务入口只连接了 `VerifySIP`,遗漏 `ApplySIP`。启动和运行中 SIP 更新都使用这组回调,所以读到新配置后只检查它是否已经加载,而不发出加载请求。
- 15:42 SaaS SIP HTTP 200、归属匹配、三条配置通过项目校验;源 revision 16,数据与 Dispatcher 保存的快照一致。
- Dispatcher 待加载代次 16,Agent 应用记录及原生 Asterisk 均为 14。15:47 原生查询确认旧三条 endpoint/AOR、主叫、contact、UDP 和 PCMA 与应用记录一致,零活动通道、零执行占用。
- 因此这次加载失败是本项目入口遗漏,不是当前 SaaS SIP 数据错误;此判断不承诺尚未核验的任务、AI 数据或供应商可接通性。
## 改动
- 正式业务入口明确按运行模式选择 SIP 加载回调:`nonprod-real` 使用现有 `ApprovedOriginator.ApplySIP`,缺少真实 Agent 会话直接报错,未知模式拒绝。
- 将该回调接入业务 `Bootstrap`,启动和 `sip.config` 更新共用已有的加载、排空与实际版本核对流程,不新增加载协议、不手工绕过业务流程。
- 隔离 Mock 保持原先只核对固定预加载夹具的行为,不发原生 reload、不把模拟响应声称为 Asterisk 加载事实。SIP-only 继续使用其独立已有流程。
- 补启动配置已读取及持久准备、占用数量、实际加载与版本核对的脱敏日志,运行期记录排空后加载;不记录密钥、完整 SIP 或配置内容。
- 同步 `AGENTS.md` 和正式部署说明中的实际加载边界。
## 本地验证
- 正式入口加载选择回归:测试 Agent 先报告版本 14,新快照版本 16;旧实现缺少加载回调明确失败。修复后先调用 Apply,再核对新版本;加载失败原错误保留,不伪造新版本。
- 启动测试确认 Apply → Verify 顺序与三个关键日志节点。
- 启动/运行通知 × 活动/未知执行四组占用测试均通过:不加载、不提前核对、不开放新准入、不释放占用。
- 既有运行中 SIP 更新测试确认加载后仍等待真实核对,不成功时维持关闭准入。
- `make proto-check acceptance-local`、`make release-check-local`、`go vet ./...`、`go test -race ./...`、构建、隔离 RabbitMQ/HTTPS/双向 TLS 集成测试均通过。
- 业务覆盖率 **70.8%**。
- 共享契约仍固定在 `4f515796e30c0cfd6f86b39ec2324fa9a8b2b964`,本轮未修改契约。Mock 与本地结果不代表真实通话、AI、OSS 或生产签收。
## 部署验证
部署后补充固定提交、制品 hash、Agent/Asterisk 实际加载版本、服务状态和剩余阻碍;未核对前不标记部署完成。