作者是AI时协议要唯一规范答案
一、前提:模板作者不是人
本项目的模板 HTML/CSS 不由人编写,而是由 AI 通过 skill 生成后直接写入数据库。所以不能按人类直觉评估「协议好不好用」(「item.* 挺通用啊」),要按 AI 的失败模式评估:
- AI 不怕字段名抽象,怕同一语义有多种写法(
basics.name与profile.name都能用)。 - AI 不怕规则多,怕规则隐含(哪些字段必须预留,文档里没写)。
- AI 不会因为漏一个字段而察觉 —— 漏了不报错,页面只是空白。
二、唯一规范答案:内部兼容,对外只暴露一套
做法是分层,不是删代码:
render / 数据层:继续兼容多套别名(旧模板已在用,不能破坏)
skill 层:只告诉 AI 一套推荐写法
即「兼容 ≠ 推荐」:老写法继续能渲染,但不再出现在 skill 的规范里。这个状态要显式命名成 deprecated,而不是含糊的「也可以这样写」——deprecated = 还能用 + 不要再生成 + 未来可迁移。
三、required 有两种含义
「必含字段」不能笼统地叫 required,要拆开:
| 名称 | 约束谁 | 含义 |
|---|---|---|
content_required | 用户表单 | 简历内容必填 —— 实际基本没有强必填,简历可以是空的 |
template_coverage_required | AI 生成的模板 | 模板结构里必须预留这些 slot |
关键区别:用户没填 item.link,渲染为空没问题;但模板 HTML 里根本没有 item.link 的 slot,用户以后填了也永远显示不出来。所以「必含」约束的是模板能力覆盖,不是用户内容填充。
四、闸门放在校验器,不放在 prompt 记忆
靠 skill prompt 记住「必须覆盖哪些字段」不可靠;可靠的是入库前跑 coverage validator,漏字段直接报错。协议文档(机器可读 JSON)应被 validator 与 skill 共同消费 —— 契约被消费才不是摆设。
06-11 实证:校验器只查了一半。 insert-template 当时只校验 required slot bindings(如 item.title / item.meta / item.link),不拦截三件事:HTML 里用了旧私有语义 class(.pro-item-title)、CSS 里继续写私有语义 selector、CSS 里把 renderer-owned 的底座规则(空值隐藏、contact spacing、正文行高)又塞回来。只要校验器不管这些,未来导入模板仍会重新污染数据库 —— 说明「把闸门放进 validator」不能只做字段覆盖,还要做命名与职责边界的校验。
五、三类文件:真源 / 契约 / 说明
给 AI 消费的协议,文件分三层,并明确谁是真源:
运行代码 → 系统真正执行;与文档冲突时以代码为准(真源)
机器可读契约 → JSON:字段清单 + canonical / required / deprecated;给 skill、validator、测试消费
人类说明文档 → MD:写法规范、示例、禁止项
判据:「真实使用」= 运行时会 import/执行,或被 validator 读取;否则只是说明。
六、落地顺序
先补 AI 的输入与校验(协议文档 → skill → coverage 校验 → 批量修存量模板),render 层的命名重构延后。理由:漏渲染的根因是「skill 不知道有哪些字段、也没有校验」,不是 render 机制本身。
相关
- 简历模板的三层渲染协议与迁移 —— 本条服务的协议与逐字段契约
- 通用脚本要靠工具适配器接入 —— 同为「中立源 + 薄适配」:格式差异不写进通用件
- 分层要落到运行时才有效 —— 本条是该骨架的一处实例:契约要被 validator 读才算落地