26 KiB
Go SIP Agent:配置读取与有界外呼迭代计划 v0.1
当前迭代唯一执行入口;状态:字段提案已建立,新 HTTP 合同/实现/验收均未完成。 本文接替已恢复原始内容并归档的 plan-0918.md。旧计划只作历史证据/背景,不能把旧 W01–W16 的本地通过数写成新接口、多 Dispatcher 或真实 SaaS 的验收。分项设计见 有界消费与控制通道设计,字段草案见 配置读取字段/返回结构提案;分项材料和草案均不替代已发布 Schema。
1. 范围和完成标准
本次要建立两个只读 SaaS→Dispatcher HTTP 配置接口:取得 management 已批准、适用于该 Dispatcher 的完整 SIP 配置;取得归属该 Dispatcher 的单个任务配置(内含获授权的智能体不可变版本/参数)。任务、智能体及 SIP 配置修改后,已接纳的执行保持旧快照;尚未接纳的执行允许在不超过约 60 秒的已核验缓存期内使用旧批准版本。下一轮按 §4.1 拟将 SaaS↔D 的 MQ 业务面收敛为呼叫/控制命令、命令回执和录音上传 OSS 后的一份最终通话结果:移除对外查询与补传命令、拆分的通话/转写/拒联/录音事件。文件仍上传 OSS,SaaS 从最终消息取得 bucket/object_key;不保留旧 AI/SIP 配置 MQ 回退,也不复活业务 HTTP。现行严格 Schema 和代码尚未变更,不能将新目标写成已上线。
**任务队列所有权(用户明确指定,下一轮合同硬边界):任务队列及其 RabbitMQ 绑定只由 SaaS 创建和维护;Dispatcher 只消费,不声明、重建、删除或绑定任务队列。队列按归属 D + 稳定任务 ID 定位,租户并发另按原值 tenant_key 汇总,不因队列改按任务划分而拆成每任务独立额度。SaaS 必须先确认持久队列与绑定就绪,再向其发布任务消息;D 离线期间只要该队列已存在,持久消息继续积压,重启后恢复消费。若发布时队列未就绪,消息不能靠 D 重启自动补收,SaaS 必须保留原消息身份并在队列就绪后重发;禁止把未路由消息误记为已交付。此目标与现行 D 启动以 --tenant-key 自行声明租户队列的代码/Schema 冲突,尚未实施、不得绕过新版合同声称已支持动态任务。下一轮新增归属 D 的 tasks 发现接口:启动/重启取带一致游标的完整快照,运行中每 30 秒用 GET /tasks?after=<cursor> 拉取增量,与现有两条单项配置接口分开签收,详情见 §4.1。cursor 是 SaaS 为本 D 任务变更分配的水位,绝不是最大 task_id;30 秒是轮询间隔提案,不等于从 SaaS 建队到 D 开始消费的端到端 30 秒保证,也不是现行服务承诺。
当前 P1 仍为单 D/单 Agent/单 Asterisk/单 Cell/单租户,现行已发布 SaaS↔D 全 MQ 契约、静态 SIP 制品、Asia/Shanghai [09:00,20:00) 门禁和旧排队 AI 版本绑定,在新版本逐项发布、替换及验证前继续执行;本计划和字段草案不授权新线路、跨窗真实拨号、SaaS 生产部署或多 D 业务运行。外部真实 SaaS、云资源、供应商联调及拨号须分别获授权。
完成条件分层:
- C(合同):两接口实际 SaaS/management 来源、路径/身份承载/返回及错误 Schema、版本/摘要/ETag/缓存/修改并发冻结点、现行
call.execute旧引用如何合法换版,连同 MQ 控制屏障、移除对外查询/补传、单份最终通话结果的交付与失败收口,以新版本获签收、正反例和哈希校验。当前 项目自拟 Schema只算草案,不是 C。 - L(单 D 本地闭环):单租户的任务+智能体读缓存、SIP 完整获批加载、有界消费/独立控制、任务×线路时段、ACK/恢复及 outbox 本地隔离故障测试通过;配置失效只停新准入,停止/暂停仍可达;新合同下最终结果在 OSS 上传成功后只发一次,失败在有界时限内明确收口(细节须签收)。完成本项目格式化、
go vet ./...、go test -race ./...、构建和模块覆盖率 ≥65%,留脱敏事实证据。旧本地通过不代替 L。 - M(多 D 后续门禁):同租户多任务、每任务只归一个 D,不同 D 独占 Agent/Asterisk;D1/D2 任务/缓存/队列隔离、租户/供应商额度份额总和限制、未知占用和非自动迁移故障注入。仅当多 D 开发与授权另行确定时验收,不混入当前单 D 的 L。
2. 权威资料和读法
- 先读本文件,按第 4 节找到 F 工作包,再读对应的项目现行合同:Go 架构、验收、通信与事件、开源复用及
contracts/upstream/v1/。现行运行依据优先于尚未签收的新目标;差异写进 F01,不从旧严格 Schema 擅加字段。 - 页面截图分析只证明页面显示的业务含义,不能证明网络请求/响应的 JSON 键、类型或 SIP 实际管理字段。字段提案里的英文键是项目自定义;旧 OpenAPI/MQ 索引也只是历史对照,绝非现网 SaaS API 签收。
- 第三方对接事件与请求消费顺序区分现行 MQ 命令/回执、拟定 HTTP 两接口和尚未发布的单份通话结果,仅说明 SaaS↔Dispatcher 请求、返回和字段;是联调读物,不是新 Schema 或外部签收。已归档的原 plan-0918保留旧 W、I/M/G、部署和证据的历史语境;不要继续写旧台账或以旧
§9当本轮并行授权。每个工作包的新状态只在本文 §8 登记。
3. 已确认方向与不能省略的边界
- **配置源:**SaaS 负责任务、智能体及单任务→D 的持久归属;management 是 SIP 唯一编辑/审批面,SaaS 只读分发准确的获批准 SIP 制品。如 management/SaaS 不共享同一权威来源,先证明同步及全量范围,再宣称两接口足够。
- **两接口的响应:**SIP 全量须覆盖适用线路/连接、主叫、媒体、额度、时段及获批制品的版本/摘要;任务响应包含任务时段(周一至周日逐日多段、可选多排除日期)、线路选择、任务额度、所选智能体不可变配置及有效授权。统一 Asia/Shanghai;两种时段必须同时允许,缺失/未知禁止新拨号。供应商 transport/auth/registration 尚未确认时不得为 real 设默认值。UI 已显示但 Agent 无批准 SDK 参数的项记录为缺口,不通过
metadata偷渡。 - 缓存与变更:每 D 使用自己的 UUID+SECRETKEY 读取;成功校验的任务缓存按租户+任务约 60 秒,活跃且尚有待接纳执行时到期主动复核;SIP 启动/重启取全量,运行中约每 60 秒核对。条件请求的
ETag/304可省内容,不能延长过期或撤销的 AI 授权。到期失败/答复不明就停新执行准入,不让 Agent 凭过期缓存发起新呼叫;已接纳的执行始终使用持久绑定的快照。SIP 变更先关准入、排空/对账旧使用者并核验 Agent/Asterisk 实际加载,发现变化 ≤约60秒不代表加载 ≤约60秒。任务终结仅删除可重取的配置缓存,不删幂等/执行恢复/outbox 事实。 - **MQ 与任务所有权(现行/目标分开):**现行代码按 D+租户声明/消费队列、
--tenant-key单租户启动;目标由 SaaS 独占创建/绑定/退役 D+任务队列,D 只消费 SaaS 分配给自己的任务队列,不建立队列或绑定。按 D 身份读取tasks一致全量快照以恢复任务消费,运行中每 30 秒按 SaaS 变更游标获取增量(新增、更新、撤销),游标失效须重新全量;任务停止也不能先删除仍有积压/未 ACK 的队列。SaaS 另负责建立 D 专用控制队列,控制不排在任务执行积压之后。D 有任务/租户/Cell/线路/AI 名额及配置资格才接纳执行,同事务持久绑定执行/额度/outbox 后 ACK;停止任务的旧命令仍逐条拒绝并 ACK,不清空其他任务。现行共用队列与not_found处理无法保证 stop 先于未接纳执行时不拨,必须冻结屏障与乱序语义。缓存延迟不延迟 MQ stop/pause、号码白名单或最后发起许可。新目标不再向 SaaS 实时发送 opt-out/转写:在最终结果到达前,SaaS 无法按该事实拦截其他任务或跨 D 后续呼叫,原实时文字/即时拒联产品门禁必须由业务负责人明确批准修改;未签收前不切换。 - 时间/多 D:目标时间由任务及所选 SIP 线路交集决定,排除日期优先;没有合同和最后拨号门禁前仍执行固定
[09:00,20:00)。多个 D 各有独占执行资源,但单任务归一 D 仅解决该任务的并发;若同一租户或供应商额度跨 D,共享总上限须权威分配有界份额,份额总和不超上限。D1 队列的未知/未决任务不能被 D2 抢收或自动迁移。
4. 分步任务(按依赖顺序)
| 工作包 | 输入 / 负责人边界 | 完成证据 / 未满足时状态 |
|---|---|---|
| F00 页面与字段预盘点 | 项目文档负责人:引用截图、现有 AI/静态 SIP Schema 和旧只读索引,逐字段标 P/C/N;两种成功及错误响应草案、示例/正反例 | 字段提案与项目自拟 Schema本地可校验;草案完成≠ SaaS 实际字段已核验。 |
| F01 新合同冻结(前置于任何 client/管理发布) | SaaS/management 权威负责人分别确认数据源、接口路径/UUID+SECRETKEY承载、字段类型/缺省/范围、批准状态、版本/哈希、响应错误、缓存约60秒与同时修改/接纳的冻结点;本项目集成负责人重版导入 W01 所需权威包并明确废弃旧 AI 配置 MQ 路径、旧查询/补传命令及分散通话事件的新业务 MQ 拓扑;下一轮 tasks 全量发现、队列创建/绑定/退役及任务粒度路由由 F07 单独冻结,不默认塞进现有两条配置接口 |
新版本来源/版本/哈希、严格 Schema、正反例、批准记录;任务字段与线下管理 SIP 完整可用,供应商不明参数、原 call.execute 引用矛盾及 HTTP 304 授权未解决均记 blocked,不能先写旧路客户端。 |
| F02 最小单 D 配置读取(依赖 F01) | SaaS 提供两条只读接口;本项目 D 对 SIP 启动全量与 Agent/Asterisk applied 事实核验,对归属任务按需拉取内含 AI、60秒缓存/ETag/304、失效停新准入;所有密钥/端点受控注入 | 新 D 无历史广播亦可取全量;HTTP 过期/错误/更新竞态、新旧 Agent 参数及快照不漂移测试;SIP 制品未准确加载拒新执行,控制仍可达。 |
| F03 有界执行队列与控制隔离(目标实现依赖 F01/F07) | 本项目 D 消费、SQLite 租户总额度/执行绑定和 MQ 适配:空位才接纳,未接纳留 SaaS 创建的 MQ 任务队列;SaaS 声明任务/控制队列及绑定并确认就绪,D 只消费,旧直写面禁并行。F07 签收前旧租户队列实现仅作现行基线,不可冒充目标完成。 | 爆量消息 SQLite 未接纳积压不无界增长,MQ 队列有容量/发布拒绝与 SaaS 原消息保留;commit/ACK/confirm 丢失及 stop-before-accept 不拨、不忙重投;unknown 不自动释放。队列未就绪时发布必失败/原消息留存,D 不偷偷创建或清空队列。 |
| F04 时段与最后屏障(依赖 F01/F02/F03) | SaaS 批准任务周多段/排除日与 SIP 线路时段,D/Agent 使用同一已加载版本及 Asia/Shanghai 注入时钟;替换固定窗须对应合同/验收同步更新 | 左闭右开、空日/多个排除日期/任务与线路交集、缓存更新后 ≤约60秒、队列跨窗不自动延迟、D/Agent 最后拨号门禁均通过;仅 Mock 时间不宣称 real 已放行。 |
| F05 多 D 独占资源(后续,依赖 F01–F04/F07 及另获本阶段授权) | SaaS 对 (tenant_key,task_id)→dispatcher_id 持久路由并独占建立目标 D 的任务队列;D1/D2 各占独立 Agent/Asterisk/任务队列/持久目录,租户和供应商共享额度按 D 分份额 |
双 D 错投/重启/配置变更/未知通话及份额总和故障注入;不得用 D1/D2 本地合同 fixture 冒充双 D 真实业务或 HA。 |
| F06 验收与切换(依赖相应 F 包) | 集成负责人单写现行 §8 台账,模块证据只存脱敏状态、计数、哈希;生产、真实 SIP/OSS/云另行授权 | 新 C→L→M 门禁分开记录。至少 gofmt、go vet ./...、go test -race ./...、go build ./...、本模块覆盖率≥65%;版本回退不得同时运行旧/新路径、触发第二次拨号。 |
4.1 下一轮迭代:单份通话结果与对外消息收敛(新增,待 SaaS/业务签收)
以下只修改目标文档,不授权立即删现行 MQ Schema、队列/代码,也不替代 F01 门禁。一个任务仍归一个 D,SaaS 只向该 D 发送 call.execute 与 task.control;D 的 command.result 只表示命令回执,不能冒充通话结局。D 从已有内部事实整理一份拟定 call.result,汇总呼叫身份、结果、最终转写、拒联事实和录音 OSS 资产;文件仍上 OSS,成功上传并持久化后才投递最终结果。SaaS 不再使用对外 call.query、command.query、call.replay、command.replay 或各类拆分通话/录音事件。对外命令取消不删除 D 的内部恢复/去重事实,也不允许未知是否已拨号时重拨。
队列创建权不可倒置:SaaS 创建、绑定并持有任务队列和 D 专用控制队列的生命周期;D 只消费 SaaS 已声明的队列。 SaaS 新建/改派任务时先准备持久队列及精确绑定,再投递 persistent 消息,发布 mandatory 无 return 并有 confirm 才记入队;D 可离线,队列中的消息等待其重启。D 启动/重启从按 D 身份授权的 GET /tasks 取得一致全量快照及快照游标(任务 ID、原值 tenant_key、归属 D、状态、SaaS 创建的队列名/精确绑定及版本),恢复所有应消费任务;此后每 30 秒 GET /tasks?after=<cursor> 拉取针对该 D 的变更日志,增量必须覆盖旧任务更新/停止、改派离开本 D 的撤销标记及新任务分配。after 是 SaaS 对该 D 任务变更的单调游标,不是最大任务 ID,因此不会漏掉小 ID 任务的后续变更。快照与水位须一致;分页按同一快照/连续游标读完,D 本地应用并持久记录后才推进游标;缺页、过期、重置或不一致则停受影响任务新准入并重新拉取全量,不用不完整清单继续消费。启动全量后 D 仍须在运行中每 30 秒轮询,每 30 秒请求一次是待签收的轮询频率,发现的端到端时限还受请求/分页/应用耗时影响并需另定,不复用任务配置约 60 秒缓存时限;请求失败不得假装新增任务已发现。已停止但仍有积压或未 ACK 的任务继续列为待排空状态,直到事实排空且 SaaS 确认退役;D 不因停止就丢消费/删队列。HTTP 路径、身份承载、游标/分页与失败码须 F07 冻结;现有单任务配置接口不能充当全量发现。任务队列按归属 D+任务 ID 定位,task_id 是否全局唯一及完整路由/长度预算必须冻结,不能因碰撞跨租户抢收。任务数/队列数有上限,不能无限制为历史任务保留 broker 资源。
队列隔离任务,额度仍按租户统一计算。 同一 D 中相同原值 tenant_key 的不同任务共同占用同一租户上限,D 在 SQLite 单事务中核查并预留租户+任务+线路/Cell 等已批准额度,未知通话继续占用;某租户满额时其任务消息留 MQ,不能让该租户积压阻塞其他租户及控制。若同一租户跨 D,仍按 F05 在 SaaS 权威分配有界份额,不能让各 D 各发一份全额。
| 工作包 | 前置 / 下一步 | 可核验验收标准 |
|---|---|---|
| F07 签收发现接口与新 MQ 合同(依赖 F01) | SaaS 权威负责人冻结启动 GET /tasks 一致全量快照与水位、每 30 秒 GET /tasks?after=<cursor> 的按 D 单调变更游标(不是最大 task_id)、新增/更新/撤销标记、连续分页、游标过期重拉全量及队列退役规则;冻结仅 SaaS 可声明/绑定任务和控制队列、SaaS 先确认队列就绪后才能发布、D 只消费的 ACL/拓扑/错误与握手,D+task 路由与任务 ID 唯一性/长度预算、持久化、消息容量及重复投递。同时与业务批准撤销对外查询/补传和分散通话事件,冻结 call.result 成功/失败结构、关联与幂等、录音缺失有界收口、取消即时文字/拒联的后果;统一任务时限来源与 call.execute 执行快照。 |
带来源/版本/哈希的严格 Schema、正反例及 SaaS/业务签收;证明离线新建/更新任务先有队列、D 重启全量恢复、运行中每 30 秒发起增量请求并在合同规定的时限内应用新任务/旧任务变更、失效游标全量重置、无队列时 SaaS 保留原消息、停用队列在排空后才退役;旧任务队列改派不得与旧 D 并发消费。覆盖配额跨任务、停/暂停、重复/乱序、OSS 成败及旧实时反馈验收冲突;任何边界未定即 blocked,不能把项目示意当正式接口。 |
| F08 本地实现与受控切换(依赖 F07/F02–F04) | TDD:SaaS 实现 tasks 一致全量快照及每 D 递增变更游标/连续分页、任务/控制队列创建绑定、ready 后发布及保留未路由原消息;D 移除新协议中的 --tenant-key/自行声明租户队列路径,启动全量恢复、运行中每 30 秒增量读取(游标失效重拉全量),按权威清单只消费归属任务队列并持久推进已应用游标,维持按 tenant_key 的原子总额度,控制走独立队列;替换对外旧查询/补传和分散事件/outbox,保留命令回执/内部恢复。OSS 成功才组装唯一最终结果,失败按 F07 有界收口;旧/新版本不得混写同一任务。 |
D 对任务/控制队列无 create/bind/delete 权限仍能启动并处理;SaaS 先建后发与 offline 消息积压可验证;队列缺失 fail-closed,SaaS 原身份消息留待就绪后重发,D 不偷偷建队列。同租户多任务共享额度、满额任务不会阻塞其他租户/stop;停止任务逐条拒绝并 ACK 已积压命令,不清空队列。同次通话最终结果持稳定身份,MQ persistent/durable/mandatory/confirm 成功后才记交付;确认丢失/重启不重新拨号/PUT。无端到端切换/恢复证据不得启用。 |
| F09 结果验收(依赖 F08) | 当前 P1 单 D/单租户下本地隔离链路验收;为新增动态任务/租户发现另做非 P1 扩展合同测试,不能把它们写成本轮双租户/多 D 已验收;真实 SaaS 联调另获授权。 | SaaS 先建任务队列、D 离线发布、重启从一致全量清单/快照游标恢复、运行中每 30 秒轮询并按约定时限应用新任务及旧任务状态变更、分页/游标过期后全量对账、停用任务保留积压、缺队列未路由消息保留/补发、D 无建队权限、同租户多任务共享额度和控制队列不断路均有故障注入;不同 D 份额只验证合同不冒充真实多 D。SaaS 仅收命令回执和每通话一份含 OSS bucket/object_key 的最终结果,录音失败有界收口;MQ/OSS 断连、重启无重复拨号、无多份结果。格式化、go vet ./...、go test -race ./...、构建及本模块覆盖率≥65%,仅留脱敏事实;Mock 不能代签真实 SaaS/OSS。 |
5. 必测边界与阻塞项
- **返回与缓存:**两接口
200/条件304/错误、未知字段拒绝、任务归属错 D 拒绝、已有任务/线路版本不一致、摘要与实际加载不一致、授权过期、缓存第 59/60 秒、SaaS 断连、Dispatcher 重启、内存配置清理但恢复事实仍在;配置不完整绝不发新呼叫。 - 消费与故障:由 SaaS 建/绑定任务与控制队列,先 ready 再发布;D 被撤销 create/bind/delete 权限仍只消费。D 离线期间 SaaS 新建任务并入队、D 重启
tasks全量快照/游标一致、运行中每 30 秒增量发现新任务及较小 ID 旧任务的更新/撤销、分页缺页/重复与游标失效回全量、停止后待消费旧命令/队列退役、队列缺失时 mandatory return 和原消息保留均须覆盖。再测 MQ 爆量/队列满发布端保留、D DB 满盘、ACK 丢失、旧命令重投、控制先到未入库执行、停/暂停与配置更新并发、执行中未知占用、同一租户不同任务共享额度;不同 D 的租户和运营商总额无份额合同就不开放跨 D 测试。 - **时间与安全边界:**任务/线路时段变化允许的约60秒延迟必须与“已接纳不变、未接纳可能旧版”区分;MQ stop/pause 和号码白名单不可延迟;配置过期则拒新准入,队列消息期限不可让旧任务次日自动拨。真实外呼只在获得明确安排、实际已通过相应门禁后才能尝试。
- **最终通话结果(下一轮):**通话结束但 OSS 尚未返回时不得发成功结果;成功后持久化原始资产事实再入 MQ,确认丢失重投同一事件身份;失败/过期按经签收的有限期限形成唯一显式结果。
outcome不因录音失败伪改通话结局;SaaS 收到唯一结果前不会获知文字/拒联,需有经批准的业务风险处置;控制与积压任务消息必须继续消费并拒绝/ACK,不能清空整个租户队列。 - **缺失权威:**页面截图没有现网 JSON 键,
config-read-v0.1.schema.json为项目自拟;SIP 线路完整管理信息、供应商鉴权/注册、AI UI 扩展和snapshot_sha256规范仍未获发布或外部签收;不能把 Mock 数据、旧 OpenAPI、计划或字段草案记为 SaaS/production 验收。
6. 文档/写入边界
新接口及单份最终结果版本必须在本项目 docs/ 与导入的版本化 contracts/ 保持唯一来源;UI 截图盘点不改造成第二套 SaaS Schema,字段索引只读生成。当前严格旧合同只描述运行中的 MQ-only 路径,新合同获得批准前不偷加 HTTP client、旧 MQ 配置回退或新任务路由键。原 plan-0918.md 已恢复 HEAD 字节内容归档,归档与本轮状态均不回写旧台账。docs/README.md 和 AGENTS.md 要始终指向本文件;有并行授权时明确一 lane 一工作区/唯一写集合,公共合同、台账和集成状态由集成负责人单写。不得提交、暂存或清理无关修改;大规模重构前另开分支。
7. 当前责任与前置(I/M/G)
- **I = 契约来源/授权:**F00 仅盘点完成;F01 的 SaaS/management 源字段签收、HTTP 合同、MQ 控制/执行新协议及 SIP/AI 不确定项仍为 blocked/pending;F07 的 SaaS 独占任务/控制队列创建权、
tasks全量快照+每 30 秒after变更游标发现/任务路由合同、单份结果、取消实时反馈的业务批准及录音失败有界收口均未签收。没有 I,不开始 F02–F04 的真实配置接入,更不能借 Mock 名义发外呼。 - **M = 本地 Mock/代码验证:**现有已归档计划中的 MQ/AI/静态 SIP 通过只说明旧版局部行为,不是本次新 HTTP/缓存/时段版本通过;按 F02–F04 重做。未获准真实 SaaS 时限于隔离 Mock 与本地合同测试。
- **G = 部署/切换前置:**目标 D/Agent 配置实际加载、broker 状态/队列、运行版本、SHA-256、systemd/Asterisk 状态/日志及非生产诊断必须留脱敏证据;生产安全屏障和资源变更另获批准。单 D 的 L 不授权 F05 多 D 或真实供应商验收。
8. 本轮状态总台账(本文件唯一更新处)
| 项目 | 当前事实 | 下一门禁 |
|---|---|---|
| 历史计划 | docs/archive/plan-0918.md 从 HEAD 原样保存;原 W00–W16 状态只作历史 |
不再向归档文件写新状态。 |
| F00 | 页面来源分级、两种成功/错误响应 Schema 及 Mock 示例已形成项目自拟草案;第三方事件顺序及字段说明已区分现行 MQ、拟定 HTTP 和下一版单份最终通话结果,均不能称作 SaaS 原 JSON 或签收 | 校验 Schema/正反例并取得 SaaS/management 字段来源与事件顺序签收。 |
| F01 | 新 HTTP+业务 MQ 方向获用户同意,精确接口/返回/批准来源未签收 | 版本化合同、哈希和更新/接纳竞态语义冻结。 |
| F02–F04 | 未实现;当前代码仍为旧 MQ-only/固定时段/单 D 静态交接 | I 先通过;TDD 测试先失败后实施,隔离链路验证。 |
| F05 | 单任务单 D、资源独占方向确认,多 D 运行/配额份额未验收 | 后续另获阶段范围、资源及额度权威批准。 |
| F06 | 新闭环未执行;旧本地测试不能代签 | 按 C/L/M 分层留证,不写假完成数。 |
| F07–F09(下一轮) | 用户明确规定SaaS 独占创建/绑定/退役任务队列,D 仅消费,任务 ID 定位队列,tasks 一致全量快照供重启恢复,运行中每 30 秒按变更游标拉增量(非最大任务 ID);同一租户多任务共用租户额度。用户另确认对外去掉查询/补传、只保留最终通话结果及 OSS 路径的方向;对接说明中的新事件仍仅是 review 草案,现行 MQ/代码未改。 |
F07 先冻结队列所有权、SaaS 先建后发、离线/重启/在线任务发现、D 无建队权限、按租户额度及新版事件合同,再按 TDD 做 F08、隔离验收 F09;实时文字/拒联取消及录音失败/超时的唯一最终通知仍为阻塞项。 |
9. 协作和版本记录
本轮只有当前负责人可更新本文件 §8 和共同合同/索引;子任务若获明确并行授权,必须独占文件/测试资源、不得从未跟踪文件假定 HEAD/worktree 已含它,合并每批后统一回归。没有明确真实线路/供应商/云/生产授权,不自动操作外部资源。旧计划的 §8/§9 仅为归档历史;新工作一律以本文件 §7–§9 为入口。版本 v0.1 是规划与项目字段草案,不是 W01/SaaS 的正式发布版本。