Files
go-sip/docs/contracts.md
T

92 lines
5.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 共享契约维护
## 唯一来源与目录边界
最终契约仓库:`git@gitee.com:zzmbac/sip-contracts.git`,分支 `main`。
SaaS 开发人员与本项目共同维护业务规范、Schema、MQ 拓扑和正常示例。
本项目的 `contracts/schema` 是 Git submodule,只记录消费的确定提交,不维护另一份本地定义。
原 `contracts/local` 已移除;`docs/thirds/saas-dispatcher.md` 只提供导航。
内部 `proto/agent/agent.proto` 仍属于本项目,不移入 SaaS 业务契约。
| 位置 | 用途 |
| --- | --- |
| `contracts/schema/` | 双方对接所需的规范、Schema、拓扑和正常示例;README 分开列出 Schema 和 Examples 用途,业务规范及 MQ 拓扑在正文单独链接说明。 |
| `contracts/manifest.json` | 本项目记录的冻结历史来源证据;不登记现行合同 hash,不是 SaaS 对接数据。 |
| `contracts/verify.py`、`contracts/test_verify.py` | 离线检查 Schema 引用、来源和文件完整性,并验证共享目录及 README 的范围。 |
| `contracts/examples/invalid/` | 本项目拒绝错误消息和配置的测试材料,不作为正常对接示例。 |
| `contracts/archive/sources/` | 两份历史来源的原字节,只用于验证,不作为当前规范。 |
| `contracts/AGENTS.md`、`contracts/*_test.go` | 本项目维护规则与契约测试。 |
## 获取项目
```sh
git clone --recurse-submodules git@gitee.com:zzmbac/go-sip-agent.git
# 或在已有项目中获取固定契约版本:
git submodule update --init --recursive
```
构建仅将固定提交的 Schema、拓扑和正常示例嵌入制品,不包含本项目 manifest、错误示例或历史来源,
不在运行时读取 Git checkout 或在线加载引用。普通 `make check` 不自动联网追新。
缺失/未初始化契约、错误来源、未提交修改、指针不一致或未登记的引用均明确失败,没有旧文件兜底。
发布清单分别记录共享仓库地址、准确提交、拓扑 hash 和本项目验证 manifest 的 hash。
## 每次调研或修改契约之前
```sh
# 同步本项目自己的远程分支;失败或分叉时停止,不覆盖现有修改。
git fetch origin
# 依据当前分支的上游进行 --ff-only 合并。
make contracts-update
```
`contracts-update` 获取共享仓库最新 `main` 并只允许快进;更新前验证当前指针、来源及干净状态,
更新后使用本项目 `contracts/` 中的验证材料检查共享契约。检查通过后仅暂存 `contracts/schema` 新指针。
现行合同仅以 Git submodule 提交号固定,不再登记逐文件或整包 hash。
脚本不提交其他文件,不改写历史来源证据,不得回退到旧文件。
网络错误、分叉或现有契约修改时停止;不自动 stash/reset,不改写已有历史。
已拉取但尚未暂存的快进允许重新核验;脚本仍拒绝分叉历史、错误来源和子模块内未提交文件,核验成功后才暂存指针。
## 修改与同步交付
1. 确认已完成上述更新;在共享仓库修改对应 Schema、业务规范、拓扑或正常示例。
定义只维护一次,聚合入口只引用独立 Schema;README 将 Schema 与 Examples 分表,业务规范和 MQ 拓扑使用独立链接说明。
2. 在本项目补充错误示例或测试,并核对共享文件变更:
```sh
python3 contracts/verify.py
python3 -m unittest discover -s contracts -p 'test_*.py' -v
go test ./contracts
```
验证保留离线 Schema 引用及冻结历史来源检查;现行合同没有需手动刷新的重复 hash。
3. 提交并推送共享仓库,只选择本次修改的对接文件:
```sh
git -C contracts/schema add <本次契约文件>
git -C contracts/schema commit -m '<契约变更说明>'
git -C contracts/schema push origin HEAD:main
git add contracts/schema
make contracts-update
```
4. 同步本项目实现、测试和文档;运行 `make contract-check`、`make check`、`make release-check-local`。
5. 明确暂存本次项目改动及 `contracts/schema` 指针,提交本项目;通知 SaaS 开发人员按同一 commit SHA 同步。
**仅推送契约仓库不算完成。所有契约变更必须同步修改本项目;双方评审和联调需记录同一准确提交。**
已有 P01–P08、A01–A12、K01–K16 项目内证据见 `docs/evidence/saas-dispatcher-p08-acceptance.md`。
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 请求。
## 2026-10-09 本地适配
共享版本 `adc49ace34a0cdfd21c4de5a20dc6dfc1ab9b9df` 的任务计划可选字段变更已用于本项目合同引用;现有调度行为与新合同一致,无需改写业务逻辑。合同正反例、配置读取、选线边界及省略字段的隔离端到端验证已补齐。
本轮差异、验证结果及 A01–A12/K01–K16 对照见 [`evidence/schema-optional-task-schedule-20261009.md`](evidence/schema-optional-task-schedule-20261009.md)。仅暂存了用户明确批准的合同指针,没有提交、推送、部署、真实拨号或真实服务请求。