feat: align AI configuration and task trunk concurrency with shared schema
This commit is contained in:
+16
-9
@@ -11,7 +11,7 @@ SaaS 开发人员与本项目共同维护业务规范、Schema、MQ 拓扑和正
|
||||
| 位置 | 用途 |
|
||||
| --- | --- |
|
||||
| `contracts/schema/` | 双方对接所需的规范、Schema、拓扑和正常示例;README 分开列出 Schema 和 Examples 用途,业务规范及 MQ 拓扑在正文单独链接说明。 |
|
||||
| `contracts/manifest.json` | 本项目记录的当前规范、冻结历史来源和对接文件完整性 hash;不是 SaaS 对接数据。 |
|
||||
| `contracts/manifest.json` | 本项目记录的冻结历史来源证据;不登记现行合同 hash,不是 SaaS 对接数据。 |
|
||||
| `contracts/verify.py`、`contracts/test_verify.py` | 离线检查 Schema 引用、来源和文件完整性,并验证共享目录及 README 的范围。 |
|
||||
| `contracts/examples/invalid/` | 本项目拒绝错误消息和配置的测试材料,不作为正常对接示例。 |
|
||||
| `contracts/archive/sources/` | 两份历史来源的原字节,只用于验证,不作为当前规范。 |
|
||||
@@ -27,7 +27,7 @@ git submodule update --init --recursive
|
||||
|
||||
构建仅将固定提交的 Schema、拓扑和正常示例嵌入制品,不包含本项目 manifest、错误示例或历史来源,
|
||||
不在运行时读取 Git checkout 或在线加载引用。普通 `make check` 不自动联网追新。
|
||||
缺失/未初始化契约、错误来源、未提交修改、指针不一致、hash 错误或未登记的引用均明确失败,没有旧文件兜底。
|
||||
缺失/未初始化契约、错误来源、未提交修改、指针不一致或未登记的引用均明确失败,没有旧文件兜底。
|
||||
发布清单分别记录共享仓库地址、准确提交、拓扑 hash 和本项目验证 manifest 的 hash。
|
||||
|
||||
## 每次调研或修改契约之前
|
||||
@@ -41,25 +41,24 @@ make contracts-update
|
||||
|
||||
`contracts-update` 获取共享仓库最新 `main` 并只允许快进;更新前验证当前指针、来源及干净状态,
|
||||
更新后使用本项目 `contracts/` 中的验证材料检查共享契约。检查通过后仅暂存 `contracts/schema` 新指针。
|
||||
脚本不提交其他文件,不自动改写本项目 manifest;若新提交与本项目记录的 hash 不同,检查失败,
|
||||
须核对差异后按下述流程显式更新验证记录,不得回退到旧文件。
|
||||
现行合同仅以 Git submodule 提交号固定,不再登记逐文件或整包 hash。
|
||||
脚本不提交其他文件,不改写历史来源证据,不得回退到旧文件。
|
||||
网络错误、分叉或现有契约修改时停止;不自动 stash/reset,不改写已有历史。
|
||||
若指针有意改变但尚未暂存,须先核对该提交再 `git add contracts/schema`,不能用脚本掩盖未知版本。
|
||||
已拉取但尚未暂存的快进允许重新核验;脚本仍拒绝分叉历史、错误来源和子模块内未提交文件,核验成功后才暂存指针。
|
||||
|
||||
## 修改与同步交付
|
||||
|
||||
1. 确认已完成上述更新;在共享仓库修改对应 Schema、业务规范、拓扑或正常示例。
|
||||
定义只维护一次,聚合入口只引用独立 Schema;README 将 Schema 与 Examples 分表,业务规范和 MQ 拓扑使用独立链接说明。
|
||||
2. 在本项目补充错误示例或测试,并核对共享文件变更后显式更新验证记录:
|
||||
2. 在本项目补充错误示例或测试,并核对共享文件变更:
|
||||
|
||||
```sh
|
||||
python3 contracts/verify.py --write
|
||||
python3 contracts/verify.py
|
||||
python3 -m unittest discover -s contracts -p 'test_*.py' -v
|
||||
go test ./contracts
|
||||
```
|
||||
|
||||
`--write` 只更新现行规范/bundle hash,不允许重算冻结历史来源来掩盖改写。
|
||||
验证保留离线 Schema 引用及冻结历史来源检查;现行合同没有需手动刷新的重复 hash。
|
||||
3. 提交并推送共享仓库,只选择本次修改的对接文件:
|
||||
|
||||
```sh
|
||||
@@ -75,4 +74,12 @@ make contracts-update
|
||||
|
||||
**仅推送契约仓库不算完成。所有契约变更必须同步修改本项目;双方评审和联调需记录同一准确提交。**
|
||||
已有 P01–P08、A01–A12、K01–K16 项目内证据见 `docs/evidence/saas-dispatcher-p08-acceptance.md`。
|
||||
本次目录整理不改变业务规则、不部署、不拨号;Mock、hash 或离线验证不替代 SaaS、供应商或生产签收。
|
||||
Mock、hash 或离线验证不替代 SaaS、供应商或生产签收。
|
||||
|
||||
## 2026-10-08 本地适配
|
||||
|
||||
共享版本 `b502ad2` 的任务线路并发结构已用于配置读取、冻结快照、Dispatcher 选线与原子占用、Agent 入站校验及 SaaS Mock。旧字符串数组直接拒绝;已有占用与未知执行不因配置调整或重启清除。并发从现有 inbox 计算,不新增表或自动改写旧快照。
|
||||
|
||||
AI 连接的 HTTP 与 WebSocket 地址按调用用途分别使用,缺失时明确拒绝、不互相回退。字段定义仍只在共享仓库维护。
|
||||
|
||||
本轮本地验证与外部边界见 [`evidence/schema-task-trunk-concurrency-20261008.md`](evidence/schema-task-trunk-concurrency-20261008.md)。没有部署、真实拨号或真实 AI 请求。
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
# 2026-10-08 Schema 业务适配:本地验证
|
||||
|
||||
## 来源与范围
|
||||
|
||||
- 共享合同:`b502ad2d47629fece4542b117c90509f005eaedb`;字段唯一来源为 [`http-task-detail.schema.json`](../../contracts/schema/http-task-detail.schema.json) 和 [`http-ai-providers.schema.json`](../../contracts/schema/http-ai-providers.schema.json)。
|
||||
- 使用者确认:适配任务在线路上的并发上限,允许 0;核验 AI 的 HTTP/WebSocket 地址分工;只进行本地开发和测试。
|
||||
- 主项目基于 `3d3d190` 的现有工作区,保留此前未提交改动;本记录不是一个已提交版本的部署证据。
|
||||
|
||||
## 实现结果
|
||||
|
||||
- 配置读取、冻结任务快照和 Agent 校验使用新线路对象;旧字符串数组、缺失上限、负数和重复线路拒绝。
|
||||
- Dispatcher 按任务配置顺序选择仍有容量的线路,0 或本任务在线路上的占用已达上限时不使用该线路;不会在发出失败后换线重拨。
|
||||
- SQLite 原子接纳同时核对租户、任务总量、线路总量和任务在线路上的上限。最后一次选线的任务修订必须与持久快照相同,防止选线期间配置调整后仍发出旧选择。
|
||||
- 任务在线路上的占用从现有 inbox 中计算;`dispatching`、`dispatched`、`unknown` 均计入。未知执行不因配置调整、重启或经过时间释放,明确终结后才释放。
|
||||
- 不新增数据库表,不迁移旧库,不自动转换旧任务快照。已发出通话的冻结快照不被 edit 改写。
|
||||
- 已有 AI 地址分工保持不变:ASR/TTS 使用 `ws_endpoint`,LLM 使用 `api_endpoint`;补充不同地址、同连接多用途及缺失地址不回退的测试。
|
||||
- 发出前日志只记录事件标识、修订、线路和并发计数,不记录被叫、密钥、完整配置或对话。
|
||||
- SaaS Mock 的受限单通入口和结果核验使用新结构;三个本地错误示例只更新线路形状,保留各自原本要验证的错误。
|
||||
|
||||
## 验证
|
||||
|
||||
| 检查 | 结果 |
|
||||
| --- | --- |
|
||||
| 配置读取及序列化 | 对象数组与 0 保持原值;旧格式、缺失上限、负数、重复 ID 拒绝 |
|
||||
| 选线 | 独立任务占用、0、容量不足、配置顺序和重复 ID 均有测试 |
|
||||
| 原子占用 | 20 个竞争请求在任务线路上限 5 时仅 5 个被接纳 |
|
||||
| 未知与重启 | 原未知通话保留占用;另一任务有独立的任务线路容量;原通话明确结束后才重新开放 |
|
||||
| edit | 新上限立即约束后续接纳;旧选择修订拒绝;已发出通话维持旧快照 |
|
||||
| Agent 入站 | 旧格式、无效配置、禁用或未授权线路在记录尝试/发出前拒绝 |
|
||||
| AI 地址 | 火山/百炼 ASR、百炼 TTS 与 OpenAI 兼容 LLM 地址分工及无回退测试通过 |
|
||||
| `make check` | 通过格式、合同/Proto 来源、`go vet ./...`、`go test -race ./...`、构建及本地集成检查 |
|
||||
| RabbitMQ 及完整 Mock 链路 | Broker、Dispatcher runtime、正式命令入口与两个 SaaS Mock 测试实际运行,未跳过;正式命令测试包含双向 TLS Agent 与 HTTPS Mock OSS 上传及结果回报 |
|
||||
| `make coverage` | 总语句覆盖率 71.6%,高于 65% 要求 |
|
||||
| `make release-check-local` | 通过;共享合同为上述提交;`source dirty=true`、`production_approval=false` |
|
||||
|
||||
新测试按失败再修复:读取测试先暴露旧 `[]string` 无法解析新对象;占用测试先暴露 0 被接纳、未知占用未受到任务线路限制、20 个竞争请求全部被接纳。实现调整后通过,并进行全量回归。
|
||||
|
||||
A01–A12 / K01–K16 的权威项目内对照仍见 [`saas-dispatcher-p08-acceptance.md`](saas-dispatcher-p08-acceptance.md);本轮只验证新结构影响的配置、调度、占用及入站校验,并回归现有测试,不重新签收已确认业务规则。
|
||||
|
||||
## 未授权或未签收
|
||||
|
||||
没有更新测试机,没有真实拨号、真实 AI/OSS 请求或生产发布。RabbitMQ、本地 HTTPS 和双向 TLS 测试不代表真实 SaaS、线路、Asterisk 媒体或 AI 服务签收。旧快照/旧数据库的处置仍须使用者单独确认,不自动迁移或清理。本记录生成时,共享合同已在前一阶段推送,主项目业务改动仍未提交;后续提交、合并与推送状态以 Git 记录为准。
|
||||
Reference in New Issue
Block a user