Files
go-sip/docs/contracts.md
T

79 lines
4.5 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 错误或未登记的引用均明确失败,没有旧文件兜底。
发布清单分别记录共享仓库地址、准确提交、拓扑 hash 和本项目验证 manifest 的 hash。
## 每次调研或修改契约之前
```sh
# 同步本项目自己的远程分支;失败或分叉时停止,不覆盖现有修改。
git fetch origin
# 依据当前分支的上游进行 --ff-only 合并。
make contracts-update
```
`contracts-update` 获取共享仓库最新 `main` 并只允许快进;更新前验证当前指针、来源及干净状态,
更新后使用本项目 `contracts/` 中的验证材料检查共享契约。检查通过后仅暂存 `contracts/schema` 新指针。
脚本不提交其他文件,不自动改写本项目 manifest;若新提交与本项目记录的 hash 不同,检查失败,
须核对差异后按下述流程显式更新验证记录,不得回退到旧文件。
网络错误、分叉或现有契约修改时停止;不自动 stash/reset,不改写已有历史。
若指针有意改变但尚未暂存,须先核对该提交再 `git add contracts/schema`,不能用脚本掩盖未知版本。
## 修改与同步交付
1. 确认已完成上述更新;在共享仓库修改对应 Schema、业务规范、拓扑或正常示例。
定义只维护一次,聚合入口只引用独立 Schema;README 将 Schema 与 Examples 分表,业务规范和 MQ 拓扑使用独立链接说明。
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,不允许重算冻结历史来源来掩盖改写。
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、供应商或生产签收。