用途
validate-contract 用于对 collection-client 代码进行静态、基于推理的审查,检查其是否符合 CLAUDE.md 中定义的 UNS 数据契约。这是一项判断任务,而不是脚本:需要阅读客户端代码与契约,然后报告违规项,并附上文件路径、行号和所需修复。
主要能力
该技能支持以下调用方式:
/validate-contract— 审查全部三个客户端/validate-contract modbus— 仅审查 Modbus 客户端
检查清单
对每个客户端,检查 CLAUDE.md 中的每条规则:
命名
- 所有标签名称均为 snake_case(无连字符、无 camelCase、无大写)
- 所有标签名称均存在于 contracts/tag_database.csv(列 tag_name)
- 无别名、缩写或“友好名称”
- 源标识符通过客户端的映射文件(register_map.csv / opcua_node_map.csv / mqtt_topic_map.csv)解析为契约标签
时间戳
- 写入 tag_history.ts 的值为时区感知的 UTC
- 朴素时间戳源使用 config/{client}.yaml 中的 source_timezone 进行转换,并记录:“Naive timestamp from {source}, assuming {timezone}”
- 在读取时打时间戳的客户端需记录时钟来源
- 任何客户端都不得对朴素时间戳静默假设为 UTC
写入目标
- 读取值在写入前通过 validate_reading() 验证
- 写入通过 DBWriter 进行——不得手写连接或 SQL
- tag_id 从 uns_namespace 解析;未解析的标签进入 dead_letter
- 值类型与标签的 metric_type 一致(Int32、Float、Boolean)
- 质量标志为 GOOD、BAD 或 STALE——不得为其他值
共享代码
- 客户端从 shared.models 导入 Reading——不得重新定义
- 客户端代码内不得重复验证或数据库写入逻辑
测试
- 每个客户端都有单元测试
- 测试模拟协议客户端(无需实时服务器)
- 测试通过 validate_reading() 验证契约合规性
报告格式
对每个客户端:
## {client_name} — {PASS | FAIL}
Violations:
- {file}:{line} — {rule violated} — {what's wrong} — Fix: {what to change}
Notes:
- {observations about edge cases or fragility}
如果客户端通过所有检查,则报告 PASS 并继续。不要填充报告。
适用场景
适用于需要对照 UNS 数据契约审查 collection-client 代码的开发者,尤其是在涉及命名规范、时间戳处理、写入目标、共享代码复用和测试覆盖等契约合规性检查时。
限制
该技能为静态审查,不执行代码或运行测试。其判断依赖于 CLAUDE.md 中定义的契约规则。关于具体支持的客户端数量、配置细节或运行环境要求,资料中未提供更多信息。