多人并行开发机器人系统时,最常见的摩擦不是代码写不出来,而是模块对字段、版本、启动顺序和失败语义的理解逐渐漂移。接口文档如果只靠自然语言,很难及时发现“双方都能运行,但理解不同”。
我的做法是把跨模块消息变成可检查的 schema,并把关键状态变化写成追加式事件,以固定输入进行确定性回放。
Schema 是边界合同
Schema 应约束必填字段、枚举、范围、版本和条件关系,并为未知版本提供明确拒绝路径。它不能代替业务逻辑,但能让非法输入在模块边界尽早失败,而不是进入运行时后变成模糊状态。
版本迁移要显式。消费者应知道自己接受哪些版本,生产者也应保留兼容测试。仅仅新增一个可选字段,有时仍会改变默认行为,不能假设“JSON 能解析”就兼容。
回放是重新运行判定,不是重发动作
事件应包含稳定身份、单调时间、前序关系、输入摘要和版本指纹。回放时固定 seed、初始状态和事件顺序,检查状态机是否得到相同结果。涉及设备输出的模块必须替换为隔离适配器,避免历史事件再次驱动物理设备。
确定性回放特别适合复现并发边界和取消顺序,但不能证明真实世界完全确定。传感器噪声、操作系统调度和硬件时序仍需在相应层验证。
参考资料
证据边界
本文不公开任何内部 schema、字段名、模块拓扑、任务数据或团队流程,只总结接口治理和回放验证方法。