docs: record P1 local acceptance and external gates

This commit is contained in:
2026-09-25 16:39:20 +08:00
parent cc105550b0
commit 0ea1639cbc
16 changed files with 271 additions and 69 deletions
+11 -7
View File
@@ -6,7 +6,11 @@
本文件是 [Go 重写方案](../architecture/Go重写方案_v0.3.md) 的执行清单,**不是验收通过报告**。项目内已具备 Go 可执行程序、W01/W02 契约与本地测试入口;下文仍将本地通过、协议 Mock、真实集成和生产签收严格分开。
**本轮MQ-only修订重新打开受影响验收**:SaaS↔D所有请求/响应/事件只能走RabbitMQ,每个D全局唯一ID、独立接收Topic/队列。旧HTTP/仅租户路由/本地OSS验证证据不能覆盖新基线,现行 MQ-only 旧版验证事实见[归档计划§8.2](../archive/plan-0918.md)和[现行 MQ 机器契约](../../contracts/upstream/v1/mq.schema.json);第三方时序说明见[事件顺序](../thirds/第三方对接事件与请求消费顺序_v0.1.md),用户新批准的两只读 HTTP 配置接口仍须按[新计划](../plan-config-read-v0.1.md)另验。新增子场景纳入既有88项,不新增虚假通过数;本轮仅改文档,未执行这些运行测试。
**现行外部 MQ-only 合同仍有效;本文件不是验收通过报告。** 现行外部事实见[归档计划§8.2](../archive/plan-0918.md)和[现行 MQ 机器契约](../../contracts/upstream/v1/mq.schema.json)。本轮 P1 本地目标按[配置读取计划](../plan-config-read-v0.1.md)实施四条只读 GET、v3 MQ 与最终 `call.result`;除任务发现已按 [v0.2 §2.5](../thirds/v0.2.md) 修订外,其余项目内合同沿用[第三方对接 v0.1](../thirds/第三方对接事件与请求消费顺序_v0.1.md)。F01/F07 严格 Schema、正反例、来源/hash 和 Mock C 是本地门禁,不等待外部签收/连通;C 后按 F02→F03→F04→F08→F09 重验适用的 88 项子场景,不新增虚假通过数。旧 HTTP/租户路由/OSS 证据不能覆盖新基线;真实 SaaS、management、云、供应商和生产切换仍分别未验证。
任务发现的单次完整响应修订见 [v0.2 项目内合同](../thirds/v0.2.md)及[严格 Schema](../contracts/task-discovery-v0.2-proposal.schema.json):每 D ≤256、响应不带 queue 地址、空变更保留游标、`removed` 退役和 410 后全量恢复已通过 [F03 本地 Mock 验证](../evidence/f03-local-task-discovery-v0.2.md),F09 完整矩阵仍待重验。原 v0.1 分页 F03 证据保留为历史,不能计入新版通过;真实 SaaS 兼容性仍未验证。
[F04 本地 Mock 证据](../evidence/f04-local-dial-policy-v0.1.md)仅证明 Dispatcher 的任务×已选线路时段与最后拨号屏障、持久一次性决定及 Mock Agent 指令期限检查;Agent 不重算业务策略,也没有真实 SIP 发起。F08 最终结果/额度释放和 F09 全矩阵未完成;现行真实路径的固定 `09:00`–`20:00` 门禁未放宽,V3 mixed/real 启动拒绝。
每个阶段分别报告:通过、失败、未执行、被外部条件阻塞,以及“本阶段不适用/延后”。延后不得计入通过率或当成实现。旧Python证据不计Go通过数;管理平台、SIP Mock、供应商和Go Agent分别签收。
@@ -18,16 +22,16 @@
| --- | --- | --- |
| P1-01 独立制品/契约 | 单module/Cobra双命令独立构建;格式化/vet/race/构建及实际依赖门禁通过,使用入口与引用Schema可追踪;GAP的P1部分关闭 | C01–C11、L01–L08、A01/A02 |
| P1-02 单节点就绪 | 恰有1 Agent/1 Asterisk、1单活D;单 Cell 完成绑定/版本/健康/准入与隔离链路验证;失联或未授权时停止新接单,单 Cell 仅接满足授权与全局额度的新执行 | A03–A11/A18/A20、S07/S10;单 Cell/固定出口 fixture |
| P1-03 至少3家SIP | 至少3个不同供应商独立trunk;登记单 Cell/出口授权、主叫/前缀/codec/额度,使用配置/路由/协议 fixture 覆盖;未知/未授权组合拒绝;SIP 外呼时间门禁为 Asia/Shanghai `09:00`(含)至 `20:00`(不含),边界外 fail-closed;真实供应商外呼延期第二阶段 | E01–E08/E20;供应商配置矩阵、SIP/ARI/媒体 fixture、`internal/callwindow` |
| P1-03 至少3家SIP | 至少3个不同供应商独立trunk;登记单 Cell/出口授权、主叫/前缀/codec/额度,使用配置/路由/协议 fixture 覆盖;未知/未授权组合拒绝;本地 F04 Mock 由 Dispatcher 按 Asia/Shanghai 任务×已选线路时段及任务排除日期判定;现行真实路径仍须固定 `09:00`(含)至 `20:00`(不含)且边界外 fail-closed;真实供应商外呼延期第二阶段 | E01–E08/E20;供应商配置矩阵、SIP/ARI/媒体 fixture、`internal/callwindow` |
| P1-04 ASR-only | 百炼/火山两ASR适配分别验证;D从契约 fixture 取批准版本,命令→ASR文字/录音→结果 outbox 闭环;LLM/TTS不可用不影响且调用/额度为0;ASR参数实际生效、无虚假播放 | GAP-08/09、E09/E14/E17/E22、L06/§5.1;单 Cell 隔离组合 |
| P1-05 完整AI | OpenAI兼容LLM+火山TTS在本地/协议隔离环境完成双向对话/取消/打断/超时/背压验证;契约参数直达SDK/控制器,调参不改代码/重启,不硬编码model/voice/speed;无旧实现/静默降级/旧音频重播;真实供应商费用/联调延期 | E09–E11/E14/E17/E22、L06/§5.1;协议/参数/音频 fixture |
| P1-06 结果与资产 | 所有SaaS↔D业务改经MQ,8类业务事件及新版请求响应正反例通过,无HTTP兼容/回退;实时文字/opt-out及时,补传保留原事件ID而不重发执行;Agent直传字节一致,D将recording.uploaded可靠交付指定持久队列;不等待SaaS会话/verified/OSS ID,通知恢复不重传文件或重拨 | S01–S04/S16/S23、E08/E12/E17–E19、A07/A15/A16 |
| P1-06 结果与资产 | 区分现行外部 v2 与本地目标 v3;本地仅验证四 GET、必要命令/控制回执及单份最终 `call.result`,不恢复 query/replay/实时文字/opt-out/拆分录音事件;Agent直传及持久通知恢复不得重传文件或重拨;超限按 8 MiB 规则阻塞,不截断 | F01/F07 Schema/Mock C、F08/F09 本地适用场景;现有 S/E/A 证据仅作旧基线 |
| P1-07 租户骨架/全局额度 | 只启用1个租户,未启用租户拒绝;独立队列/原值key/复合幂等/窗口受控;单 Cell 竞争租户/供应商/按模式AI额度不超配;双租户和跨 Cell 汇总不在本轮 | C05–C07、S08/S09/S18/S20–S22;SQLite/实际许可计数 |
| P1-08 故障与控制 | 重投10次同一执行只产生一次实际发起;覆盖§4.1崩溃窗口、MQ/Unary/ARI断连及D/A重启,未知不重拨/不释放;pause/stop/CAS/最后许可及 `09:00`–`20:00` 时间门禁正确,旧库恢复正确 | S01–S27的P1部分、E02/E03/E13/E21、A07/A08/A18/A20 |
| P1-08 故障与控制 | 重投同一 call.execute 只产生一次实际发起;覆盖§4.1崩溃窗口、MQ/Unary/ARI断连及D/A重启,未知不重拨/不释放;本地 pause/resume/stop 按 F07 顺序/状态/ACK/退役规则通过,不引入旧 v2 控制 CAS;任务发现单次完整快照/增量、≤256条、拒绝分页/queue 字段、空变更、removed、410 全量恢复与无建队权限均须重新测试;F04 本地 Mock 最后许可及持久签发/拒绝决定按任务×已选线路时段拒绝窗口外发起、不等待或自动重试;真实路径固定 `09:00`–`20:00` 仍须独立验证 | F03/F04/F09 本地适用场景;旧 S/E/A 证据不替代新控制合同 |
| P1-09 静态配置/稳定性 | 管理批准制品经维护窗口加载;错误版本/哈希、未排空/未确认、部分失败均不恢复相关准入;两种模式按§9.1受限隔离负载持续稳定测试,告警/录音/资源无未解释泄漏 | E04/E05/E13、A09–A14的P1部分、S27;单 Cell profile与原始计数器 |
| P1-10 本地恢复/授权 | 单节点唯一写入与唯一调度所有权、备份/维护更新/恢复演练通过;契约/fixture 签收白名单、时段、限额/预算与风险;明确D单点和未上传资产丢盘边界。生产切换与真实授权延期第二阶段 | §7/§8、A06/A17–A20;运维步骤与隔离签收记录 |
| P1-10 本地恢复/授权 | 单节点唯一写入与唯一调度所有权、备份/维护更新/恢复演练通过;项目内契约/fixture/Mock C 留证,白名单、时段、限额/预算与风险边界明确;D单点和未上传资产丢盘边界明确。生产切换与真实授权另行申请 | §7/§8、A06/A17–A20;本地运维步骤与隔离证据 |
两模式均需在本地/协议隔离环境验证,所有纳入本轮的供应商配置 fixture 和单 Cell 组合分别留存闭环证据;稳定性长跑按批准的隔离负载矩阵覆盖全部 fixture。SIP 外呼时间窗口使用注入时钟覆盖 08:59:59、09:00:00、19:59:59、20:00:00 四个边界,窗口外必须在最后许可前失败且不产生 originate。真实供应商、ECS、生产 SaaS/MQ receipt 和生产切换如实标记为第二阶段,不能把 fixture 写成真实联调完成。
两种 AI 模式均需在本地/协议隔离环境验证,所有纳入本轮的供应商配置 fixture 和单 Cell 组合分别留存闭环证据;稳定性长跑按批准的隔离负载矩阵覆盖全部 fixture。F04 本地 Mock 按 Asia/Shanghai 的任务×线路时段、跨日、任务排除日期及左闭右开边界注入时钟;拒绝后持久记录且不产生 Mock Agent originate。现行真实路径另须覆盖固定窗口 08:59:59、09:00:00、19:59:59、20:00:00 四个边界,窗口外必须在最后许可前失败且不产生真实 originate;Mock 不代替真实门禁。真实供应商、ECS、生产 SaaS/MQ receipt 和生产切换如实标记为第二阶段,不能把 fixture 写成真实联调完成。
### 1.2 88项基线的阶段适用规则
@@ -246,7 +250,7 @@ P1运行不依赖旧Python Cell;迁移验证如需临时桥接而旧端不满
6. P1受限稳定性与已授权费用;P2公平调度;后续完整1000路/N+1分别签收。
7. P1维护切换、人工恢复、备份演练;在线发布/HA切换待相应功能启用另验。
本轮仅能检查第 1 类中的文档结构与一致性,不能把尚未生成的 Go 测试/服务列为“通过”。
本轮需按配置读取计划完成项目内 F01/F07、Mock C、F02–F09;每项只在产生可复核的本地测试/服务证据后记“通过”。任何本地结果都不替代真实 SaaS/management 或生产验收。
开发前的交付/解锁证据见 [G0开发准备与契约冻结方案](../architecture/G0开发准备与契约冻结提案_v0.1.md) §2/§5/§8。D01–D10方案已获用户确认;项目内 W01 版本和 W02 Proto 已交付,但外部权威签收、D10正式PoC和真实供应商仍未完成;十项交付门禁不增加本方案88项运行验收数量。§5.5内部profile已确认为隔离PoC初始值,未实测、不是生产SLA,也不覆盖下节上游/供应商基线。P1必须实施当前租户及单 Cell 原子配额,P2/第二阶段再扩展多租户公平、跨 Cell 和并行竞争验收。