# contracting.md(ai 必须遵守:契约成熟度与门禁规则) 本文件仅包含**编码智能体必须遵守**的契约约束与门禁规则(面向执行与校验)。 > 约定:若本文件与 `agents.md` 冲突,以 `agents.md` 为准;若本文件与 `spec//requirements.md` 或 OpenAPI 契约冲突,必须先修正文档再编码,禁止猜测。 --- ## 1. 文件与字段硬约束 - 本模块的 OpenAPI 契约拆分为: - `openapi.provider.yaml`:本模块对外提供的 API(provider) - `openapi.deps.yaml`:本模块依赖的外部 API 契约(consumer 需求侧) - 两份 OpenAPI 都必须在 `info` 下声明成熟度(全局标记,不按 operation 级): - `info.x-contract-level: L0 | L1 | L2 | L3` - provider 端接口(建议强制): - `operationId` 必须存在且在同文件内唯一 - 应通过 `x-requirements: [AC-...]` 或 requirements 的 traceability 表建立 AC 追踪 --- ## 2. 契约成熟度(L0-L3)最低要求 - **L0(占位/可 mock)**:允许 schema 粗粒度;仅用于并行启动与 mock。 - **L1(可调用/可生成 sdk)**:关键请求/响应字段 required/optional 明确;基本状态码集合明确。 - **L2(可验收/可契约测试)**:关键字段校验规则与错误语义稳定;可进行 provider-driven schema 校验。 - **L3(可演进/可兼容治理)**:具备兼容策略与示例;可治理 breaking change。 --- ## 3. 细化路径(粗 → 细)执行规则 - 新增/调整 **AC** 会驱动契约细化;任何字段/错误语义/校验规则的新增,必须能追溯到某条 `AC-*`。 - 当实现准备进入可合并状态(尤其是自动合并)时,必须先把 `openapi.provider.yaml` 提升到 **L2**。 --- ## 4. 门禁规则(软/硬) ### 4.1 feature 分支(软门禁) 允许: - 使用 `openapi.deps.yaml (L0/L1+)` 生成 mock/sdks,推进调用方开发。 禁止: - 未满足 `openapi.provider.yaml >= L2` 的情况下,将 provider 实现以“自动合并”方式进入 main。 ### 4.2 main 分支(硬门禁) 满足以下条件前,禁止合并(或禁止自动合并): - `openapi.provider.yaml >= L2` - 契约测试通过(响应符合 openapi schema) - openapi diff 检查通过(无未声明 breaking change) - 需求追踪检查通过(AC 引用未断裂) --- ## 5. 最小检查清单(编码智能体自检) - [ ] openapi 文件可解析 - [ ] `info.x-contract-level`存在且为 L0-L3 - [ ] provider: operationId 唯一 - [ ] provider: 能追踪到 AC(x-requirements 或 traceability)