mcpField
C
contracts

contracts

github.com/liaoann开发042 次安装4 周前更新
代码仓库

关于 contracts

一项用于管理系统边界接口的开发技能,将其视为长期契约。它帮助团队分类变更、保持兼容性,并在消费者可观察的边界验证行为。

主要功能

  1. 01识别契约及其消费者
  2. 02分类契约变更
  3. 03规划兼容与迁移
  4. 04测试可观察边界

适用场景

  1. 01修改公共 API 或 CLI
  2. 02更新持久化数据模式
  3. 03调整事件或配置

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/liaoann/skills --skill contracts

安装后在 Claude Code 中输入/contracts确认已加载。

详细介绍

合约

将跨边界接口视为承诺,其有效期可能长于当前编辑。

识别合约

更改边界之前,先明确合约及其使用方:

  • HTTP、RPC、GraphQL 或 CLI 请求与响应。
  • 数据库架构、迁移输出或持久化数据结构。
  • 事件、队列消息、Webhook 或后台任务负载。
  • 公共模块导出或软件包 API。
  • 配置、环境变量、功能标志或文件格式。
  • UI 路由、URL 结构或外部可见行为。

如果当前仓库之外可能存在调用方,就应假设兼容性至关重要。

对变更分类

实施前先对合约变更分类:

  • 增量式:新增可选字段、新端点、新枚举值或新功能,但不改变现有含义。
  • 收窄式:拒绝输入、移除状态、收紧验证规则或减少可接受的行为。
  • 破坏式:移除、重命名、重新定义类型、调整顺序,或改变现有字段或行为的含义。
  • 语义式:结构不变,但可观察到的含义发生变化。

增量式变更通常最安全。收窄式、破坏式和语义式变更需要明确的迁移或兼容性计划。

保持兼容性

优先采用能保持兼容性的方案:

  • 先添加,再移除。
  • 在迁移期间同时读取旧结构和新结构。
  • 确认旧读取方不再存在后,再只写入新结构。
  • 如果无法保持行为兼容,则为外部使用的 API 添加版本。
  • 除非严格校验本身就是合约的一部分,否则应容许未知字段。
  • 说明默认值以及字段缺失时的行为。

除非能证明另一侧不受影响,否则不要只更新生产方或只更新消费方。

测试边界

在使用方能够观察到合约的边界处验证:

  • 针对公共 API 和事件的合约测试。
  • 针对持久化数据的迁移测试。
  • 针对编码/解码或导入/导出的往返测试。
  • 针对旧负载或架构的兼容性测试样例。
  • 工具链支持时,进行类型或架构检查。

内部单元测试不足以证明合约仍然兼容。

完成标准

已明确合约并考虑其使用方,已对变更分类;对于收窄式、破坏式或语义式变更,已明确处理兼容性或迁移;已检查生产方和消费方受到的影响;并且验证覆盖了依赖方可观察到的边界。

评论

支持 Markdown