产物校验
角色
生成 agent 会在写完文件之前、之后、甚至没写文件的情况下都返回"成功"。回执不是校验。 宿主在发布任何学习者可见产物之前必须跑一次确定性校验。
各产物的校验点
lesson-intro.html
- 单文件、零外部请求、UTF-8、
lang="zh-CN"。 - 存在
<title>、<main>、至少一个<figure>或<svg>。 - 明暗两套配色都定义了(
prefers-color-scheme或等价 token)。 - 校验失败时回退到宿主预置的 fallback 页面,不要交付坏页面。
lecture-deck
lecture.json必须是 v2:每个 anchor 有id/label/rect对象(不是数组); 每个 step 有advance;overview 的 camera 只能是{"mode":"fit"}。- 每页 slide 根节点直接子块 ≤ 8(硬上限 10)。
- 每个
<text>带class之一:t/ts/th/tn。 runtime/index.html由宿主预置,生成方不得覆盖。dist/lecture.html由服务端 standalone build 产出。
visual-explainer.html
- 单文件、离线、无外部请求;支持明暗与打印。
- 通过 palette 检查与静态检查。
quiz 结果
- 符合
quiz-generation-result.v1;total_points等于各题points之和。 - 答案、解析、keywords 属内部字段,不得进入面向学习者的快照。
失败处理顺序
- 能修就地修(结构性小错,如 rect 写成数组)。
- 修不了就回退到已知可用版本,并在
warnings里写明中文原因。 - 两者都不行才让这一步失败,并产出一条
error_pattern证据。
反模式
- 相信模型的
{"status":"ok"}。 - 把校验失败的产物交付出去,只在日志里记一行 warning。
- 校验失败就整个任务失败——学习者会因此丢掉本来可用的材料。