Lynn Lee / LABS

把契约变更变成可复核的证据

用工作台验证一次具体变化,再导出本次检查的范围与结果。

1. 从受控合成样例开始

载入“结构变更”,运行检查。新生产者删除 context,把 amount 改成字符串,并修改 kind 枚举。逐个阅读消费方的旧新包含关系,展开反例:反例会同时经过生产者与消费方的实际校验。

语义场景保持结构不变,明确声明秒 → 毫秒、分 → 元。2020–2030 的声明窗口使同一时间数值通过一个契约、违反另一个契约。仅靠金额大小无法识别单位;即使样例都通过,声明变化仍需复核。

回放场景覆盖嵌套字段的 null 与缺失、枚举收紧与扩展、一行坏 JSONL,以及不满足字符串标识符约定的数值 ID。对比每行状态和新增、修复、未变的具体错误数。

2. 导入自己的输入

四个编辑器分别接受本地文件:producer-old.json、producer-new.json、consumers.json、events.jsonl。也可下载并重新导入合成输入包,恰好包含 old、new、consumers、events 四个键,events 为 JSONL 字符串。也可展开“粘贴输入包”,粘贴相同 JSON 内容。文件只在本地读取,标签页不发送这些输入。

生产者文件形如 {"dialect":"dcl/1","schema":{...},"semantics":{...}}。消费方为 {"name":"reader","contract":{...}} 数组,仅声明自己依赖的字段,并明确额外字段策略。JSONL 每行一个事件。坏行保留在错误报告中,不计为通过;空文件会阻止运行。

3. 修改规则,再次运行

直接编辑新契约,重新运行检查。任何编辑都会禁用过期导出。恢复消费方依赖的必填字段,或给消费方枚举加入 purchase,观察方向性结果如何变化。生产者扩展枚举可能破坏旧消费方;生产者收紧枚举则可能拒绝旧样例。请同时阅读生产者契约的两个比较方向。

4. 保存验证证据

导出 contract-report.json、errors.csv 和可阅读 HTML 报告。JSON 包含输入契约、消费方名称、方向性结果、已校验结构反例与逐行诊断,不含原始事件值。可阅读报告可独立打开,含完整机器报告。CSV 使用 UTF-8 BOM、CRLF、全字段引号和公式前缀;分享前请复核。

本地数据与实际限制

无需后端、账号、分析统计、远程校验、localStorage 或付费模型。刷新清除修改,“清空工作区”删除编辑器内容。契约名称与枚举值仍可能敏感,会出现在导出中。限制用于保护浏览器标签页:每份输入 2 MB、500 行 JSONL、12 个消费方、Schema 160 节点及深度 8、JSON 嵌套 24;每份 JSON 解析与全部回放各限 50,000 个值节点,单次校验限 20,000 次值访问,全部诊断限 20,000 条。超限报输入错误,不显示部分成功。枚举最多 100 个标量值,长度与数组边界最多 10,000。

长 ID 必须使用字符串。解析前拒绝超过 JavaScript 安全整数范围的数值大小;字符串保留全部位数。重复 JSON 键会报错。null 是已存在的值,required 检查的是缺失。语义值检查跳过缺失和 null;是否允许这些值由结构约定负责。

查看完整方言、证明规则与边界 →