# 共享契约维护 ## 唯一来源与目录边界 最终契约仓库:`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 请求。