契约提交入库前的最后一道机器闸门。5 项安检全部是确定性检查,任一不过即短路阻断。
验证"显式规则本身是否合法",而非"翻译后是否被消费"。
5 类非法契约,查看各自在哪一关被拦截
对抗契约源码
intent_id: "ERR-001"
semantic_domain: "observational"
semantic_tokens:
error_severity:
fatal:
visual_mapping:
color_token: "status.critical"
motion_token: "pulse.red.urgent"
# ← 缩进错误:此处多缩进一格
icon_token: "alert.octagon"
user_action:
- label: "刷新页面"
action: "refresh"
# ... 后续字段正常
错误摘要
YAML 缩进错误导致 icon_token 被解析为 fatal.visual_mapping 的子节点而非同级节点,Schema 类型校验失败。
先结构后语义,短路阻断,精确回报
① 结构合法性
Schema 解析
YAML 语法 / 字段类型 / 枚举值域
② 字段完整性
7 顶层字段
SemVer / 冻结清单
③ 覆盖层存在性
字典注册核对
semantic_domain
④ 绑定存在性
字典绑定核对
color_token / motion_token
⑤ 场景一致性
场景映射核对
scenario_mappings
短路阻断详情
Schema 校验作为第一道工序,结构不合法的文件没有资格谈语义。规则树构建日志显示:0 节点生成,未进入引用对账。
错误码 + 字段路径 + 修正建议,让提交者一次改对
error_code: "SCHEMA_PARSE_ERROR" field_path: "semantic_tokens.error_severity.fatal.visual_mapping" line: 8 column: 6 message: "Unexpected key 'icon_token' at this indentation level" expected_type: "mapping[string, string]" actual_type: "null" rule_tree: nodes_generated: 0 semantic_check_entered: false dictionary_reconciliation_entered: false blocking: true dictionary_version: "v2.1.0" # 修正建议: # 将第 8 行缩进调整为与 color_token / motion_token 同级 # 即:减少一个缩进层级(2 个空格)
精确回报设计原则
• 错误码:机器可读,便于拦截统计与趋势分析
• 字段路径:定位到具体 YAML 节点,不模糊
• 修正建议:给出具体修改方案,但绝不自动纠正后放行——纠正必须由人确认,防止校验器替规则作者做决定
先合法,再对齐,再防越界
本文:5 项安检
守"规则本身合法"
结构 / 字段 / 域 / 绑定 / 场景
输入:原始契约 YAML
输出:合法规则 或 阻断
字典防线
守"规则的字典引用与版本对齐"
引用存在 / 版本兼容 / 同版换版
输入:合法规则
输出:对齐规则 或 阻断
跨层禁止
守"规则的语义绑定不被越界使用"
编译期 / Lint 期 / 生成期拦截
输入:对齐规则
输出:防越界执行
5 项命题全部通过,任一不过即阻断入库
| 安检关卡 | 命题 | 对抗契约 | 错误码 | 结果 |
|---|---|---|---|---|
| ① 结构合法性 | 非法 YAML 结构可被拦截 | 缩进错误 | SCHEMA_PARSE_ERROR | ✓ 已拦截 |
| ② 字段完整性 | 缺字段契约可被拦截 | 缺少 scenario_mappings | FIELD_INCOMPLETE | ✓ 已拦截 |
| ③ 覆盖层存在性 | 未注册覆盖层可被拦截 | custom_domain | SEMANTIC_DOMAIN_UNDEFINED | ✓ 已拦截 |
| ④ 绑定存在性 | 悬空引用与拼写错误可被拦截 | status.critial | BINDING_UNDEFINED | ✓ 已拦截 |
| ⑤ 场景一致性 | 非法场景映射可被拦截 | 场景指向未注册 domain | SCENARIO_DOMAIN_MISMATCH | ✓ 已拦截 |
核心命题验证完成
5 项安检全部是确定性检查(注册项比对、字段清单核对、Schema 解析),不依赖概率模型。
同一份契约任何时刻校验结果一致。任一校验不过即阻断入库,不存在"先入库后修复"的灰色状态。
契约库不再有"格式正确"掩护下的非法规则。你维护的是一座只进合格品的仓库。
编译前置校验验证完成
Schema-As-Code 三阶段流水线:Guard → Contract → Verify