SuperAPI AI 工具集

validate-contract

测试与质量

查看项目

更新于 10-16 07:29

技能介绍

用途

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 中定义的契约规则。关于具体支持的客户端数量、配置细节或运行环境要求,资料中未提供更多信息。