laohan-cheat · diff
v1.2.0 to v2.0.0
34 added, 235 removed. Audit A to A.
---
name: laohan-cheat
- description: 内容校准统一入口,自动判断意图+状态路由到对应动作。支持 OpenClaw(完整管线)和独立模式(打分+预测)。Use when 用户说"校准""打分""预测""复盘""状态""下一步""到哪了"或提到内容质量评估/评分/校准相关的任何意图。
- version: "1.2.0"
- argument-hint: [自然语言指令,如"校准""打分""下一步""复盘""状态"]
- allowed-tools: Bash(*), Read, Write, Edit, Glob, Grep, Skill, mcp__llm-chat__chat
+ version: "2.0.0"
+ description: 内容校准工作流适配器。为 episode 选择正确的 cheat-on-content 校准 lane,保存可追溯的校准入口;评分、盲预测、发布登记、复盘和 rubric 更新一律由上游 cheat-on-content 执行。Use when 用户说校准这期、给本期打分并预测、把 episode 接入 cheat、选择校准轨道、进入④校准。
---
- # 内容校准(统一路由)
-
- 你是内容校准路由器。**用户不需要记任何 /cheat-* 命令。** 你根据用户的自然语言 + 当前状态,自动路由到正确的动作。
-
- ## 核心原则
-
- 1. **用户说人话,你来路由** — "打分" "/cheat-score" "评分" 都是一样的
- 2. **读状态不猜** — 每次先读 `.cheat-state.json` 和目录结构
- 3. **执行不只说** — 能直接执行的就不要只告诉用户命令
- 4. **一次一步** — 永远只做当前最该做的一步
-
- ## 环境检测
-
- 启动时检测运行环境,决定可用功能:
-
- ```
- 环境检测顺序(命中即停):
- 1. ~/.openclaw/workspace-shared/content-ops/ 存在 → OpenClaw 模式
- 2. <当前工作目录>/output/ 存在 → 商业包模式
- 3. 以上都不匹配 → 独立模式(自动创建 <cwd>/.cheat/)
- ```
-
- 各模式路径:
-
- | | OpenClaw 模式 | 商业包模式 | 独立模式 |
- |---|---|---|---|
- | CHEAT_ROOT | `~/.openclaw/workspace-shared/content-ops/` | `<cwd>` | `<cwd>/.cheat/` |
- | 口播稿查找 | `$CHEAT_ROOT/scripts/` | `<cwd>/output/script*.md` | `$CHEAT_ROOT/scripts/` |
- | Rubric 查找 | `$CHEAT_ROOT/rubric_notes.md` | `<cwd>/templates/rubric_notes.md` | `$CHEAT_ROOT/rubric_notes.md` |
- | Rubric 兜底 | skill `references/rubric_notes.md` | skill `references/rubric_notes.md` | skill `references/rubric_notes.md` |
-
- **OpenClaw 模式**:全部功能可用,含 IMPORT/SHOOT/PUBLISH。
- **商业包模式**:SCORE + PREDICT + STATUS 可用。口播稿从 output/ 自动发现。
- **独立模式**:SCORE + PREDICT + STATUS 可用。IMPORT 用手动复制替代。
-
- 首次独立模式使用时,自动创建目录结构:
- ```
- <工作目录>/.cheat/
- ├── .cheat-state.json ← 从 references/ 模板复制
- ├── rubric_notes.md ← 从 references/ 复制(用户可覆盖)
- ├── scripts/ ← 存放待打分口播稿
- └── predictions/ ← 存放预测文件
- ```
-
- ## 路由表
-
- 先读意图,再读状态。意图优先。
+ # 内容校准适配器
- ### 意图识别
+ 这里不是第二套 Cheat。`cheat-on-content` 是唯一校准引擎;本 skill 只把 episode 和它的校准 lane 接起来,避免本地 fork 公式、预测规则或迁移规则漂移。
- | 用户说(匹配任意一个) | 路由到 | 动作 |
- |---|---|---|
- | "导入"/"复制"/"来了一篇" | **IMPORT** | 导入口播稿到 scripts/ |
- | "打分"/"评分"/"看看这稿子"/"score" | **SCORE** | 读 script → 6维打分 |
- | "预测"/"盲预测"/"predict" | **PREDICT** | 写盲预测 |
- | "发布"/"已发布"/"发了" | **PUBLISH** | 登记发布(OpenClaw 模式) |
- | "复盘"/"retro"/"数据来了" | **RETRO** | 对比预测 vs 实际 |
- | "状态"/"到哪了"/"看板" | **STATUS** | 输出状态看板 |
- | "进化"/"升级rubric"/"bump" | **BUMP** | 进化评分权重 |
- | "推荐"/"选题" | **RECOMMEND** | 推荐选题 |
- | "热点"/"趋势" | **TRENDS** | 趋势分析 |
- | "下一步"/"继续"/"校准"(无具体意图) | **AUTO** | 读状态自动判断 |
- | "对标"/"learn from" | **LEARN** | 导入对标样本 |
+ ## 不可跨越的边界
- ### AUTO 路由
+ - 禁止在这里按固定教程型权重打分,禁止估算后把分数当预测,禁止另写 PREDICT / RETRO / BUMP。
+ - 禁止把 `tutorial-video` 的历史样本拿来评估 `opinion-video`;两种内容必须是独立 lane。
+ - 盲预测必须在拍摄、发布、查看本期实际数据之前,由上游 `cheat-on-content` 写入其 `predictions/`;预测段不可改写。
+ - 上游版本更新后若 state schema 不匹配,只能先执行 `cheat-migrate` dry-run。备份与用户确认前不得迁移历史 lane。
- 读 `.cheat-state.json` + 扫描目录,按优先级判断:
+ ## 路由
- | 条件(从上到下,命中即停) | 路由到 |
- |---|---|
- | `pending_retros` 非空 或 有已发布>3天未复盘的 | **RETRO** |
- | `predictions/` 有未发布的预测 | **PUBLISH** |
- | `scripts/` 有已打分但未预测的 | **PREDICT** |
- | `scripts/` 有未打分的 | **SCORE** |
- | `scripts/` 为空 | **IMPORT** |
+ 1. 先运行 `laohan-bianpai vendors`。Cheat 或 dbskill upstream 有更新时只记录待办;只在新 episode 前或独立维护窗口运行 `vendors --sync`。它报告 schema migration 时停止,不能绕过,也不能在本期中途切换规则。
+ 2. 读取 `episodes/<slug>/01-口播稿.md` 与 `00-选题.md`,判断内容形态。
+ - 教程、明确操作路径、资源交付 → `tutorial-video` lane。
+ - 观点、评论、议题、个人判断 → `opinion-video` lane。
+ - 无法判断时停止,不能默认为教程型。
+ 3. 读取目标 lane 的 `.cheat-state.json`,确认 `content_form` 一致。观点视频固定使用工作流项目的 `calibration/opinion-video/`;无 lane 时先在该目录用上游 `cheat-init` 创建,不复用不匹配的旧目录。
+ 4. 先运行 `node scripts/verify-blind-rubric.mjs calibration/<content_form>`。对当前 `01-口播稿.md` 运行上游 `cheat-score`:主评分器可用完整 `rubric_notes.md` 解析公式,但隔离子评分器只可读取已验证的 `blind-rubric.md` 与本期稿。任何 contamination warning 都必须丢弃并重启全新隔离评分。把无告警的完整输出保存到本 lane 内,再运行 `node scripts/register-cheat-score-evidence.mjs episodes/<slug> calibration/<content_form> <lane内score输出.md>`。在 `03-校准报告.md` frontmatter 写 `score_evidence: <相对lane路径>` 与当前 SHA-256。此时 `prediction_status` 必须为 `PENDING`;不能在⑤修改稿之前写盲预测。
+ 5. 进入⑤:固定调用 `dbs-script-flow`、`dbs-resonate`、`laohan-shencha CONTENT_CLAIMS`;只有首 5 秒被判弱时调用 `dbs-hook`,只有语言审计需要时调用 `dbs-ai-check`。报告完成后运行 `node scripts/stamp-episode-script-hash.mjs episodes/<slug> 04-深扫报告.md 04-事实核验.md`,两份⑤报告才会写入同一个 script_hash。仅 hash 匹配不足:③必须 `risk_status: CLEAR` 且 `unresolved_high_risk_count: 0`;⑤深扫必须 `review_status: CLEAR` 与 `unresolved_issue_count: 0`,事实核验必须 `fact_check_status: CLEAR`、`contradicted_count: 0`、`unverifiable_count: 0`,否则不得 prepare 或登记最终盲预测。
+ 6. ⑤报告与当前稿 hash 一致后,先运行 `node scripts/prepare-cheat-prediction-input.mjs episodes/<slug> calibration/<content_form>`。把输出的 lane snapshot 作为上游 `cheat-predict` 的唯一输入,并在预测 metadata 写 `**Script**: <snapshot path>` 与 `**Script Hash**: <sha256>`。然后运行 `node scripts/register-cheat-prediction.mjs episodes/<slug> calibration/<content_form> predictions/<file>.md v1`。它验证预测晚于快照、metadata 与快照一致,才写 `03-预测证据.json` 并标 `RECORDED`。任何改稿都会使 hash 失效;必须重跑⑤、prepare 新快照并登记新的 prediction revision,不能改写旧预测。
+ 7. `03-校准报告.md` 的开头必须是:
+ ```yaml
---
-
- ## 各路由执行逻辑
-
- ### IMPORT — 导入口播稿
-
- **OpenClaw 模式**:执行 `bash $CHEAT_ROOT/bridge.sh --latest`
-
- **独立模式**:
- 1. 提示用户把口播稿文件放到 `$CHEAT_ROOT/scripts/` 目录
- 2. 或用户直接说"打分 <文件路径>",自动复制到 scripts/
-
- ### SCORE — 教程型 6 维打分
-
- 1. 确定目标文件:
- - 用户指定了路径 → 用指定的
- - 商业包模式 → 找 `<cwd>/output/script*.md` 中最新的未打分文件
- - 其他模式 → 找 `$CHEAT_ROOT/scripts/` 下最新的未打分文件
-
- 2. 读取 rubric 拿当前评分维度(v2.0 六维:TS/OP/DF/CV/HP/EC)
-
- 3. 读取目标 script 文件
-
- 4. **DF 时长估算**(打分前必须先算):
- ```
- 纯口播字符 = 去掉 #标题行、--- 分隔线、空行后的字符数
- 估算秒数 = 纯口播字符 ÷ 8.2
- 估算分钟 = 估算秒数 ÷ 60
- ```
- 校准源:教程① 1838字符 / 实测223秒(3:43),语速 8.2字符/秒。
- ⚠️ 实际视频时长可用时,替换估算值重新打分。
-
- 5. 按每个维度 0-10 **整数分**打分(v2.0 权重),输出:
- ```
- 📊 [短标题] — 教程型 6 维评分(v2.0 bump-calibrated)
-
- | 维度 | 分数 | 权重 | 加权 | 理由(≤30字,引用原文) |
- |------|------|------|------|------|
- | TS 标题搜索性 | x/10 | 20% | x.xx | ... |
- | OP 可操作性+效果验证 | x/10 | 20% | x.xx | ... |
- | DF 时长适配 | x/10 | 15% | x.xx | ... |
- | CV 收藏价值 | x/10 | 25% | x.xx | ... |
- | HP 钩子强度 | x/10 | 15% | x.xx | ... |
- | EC 结尾完整度 | x/10 | 5% | x.xx | ... |
-
- composite = TS×0.20 + OP×0.20 + DF×0.15 + CV×0.25 + HP×0.15 + EC×0.05 = X.XX / 10
- 硬门槛:DF≤3→封顶5.0 | DF=4→封顶6.0 | DF≥5→正常
-
- 档位:⭐⭐⭐⭐ (≥8.0) / ⭐⭐⭐ (6.5-7.9) / ⭐⭐ (5.0-6.4) / ⭐ (<5.0)
-
- 结论:✅ 通过(≥6.0)/ ❌ 不通过(<6.0)
- ```
-
- 6. 不通过时说明哪些维度低、具体怎么改。通过后提示下一步:预测。
-
- **打分纪律:**
- - **整数分** — 不允许 4.5 之类,犹豫就选低值
- - **理由引用原文** — 理由列必须引用稿子里的具体词句
- - **反复打分检测** — 同一稿 ≥3 次 → 提示"决策疲劳,该决定了"
-
- SCORE 输出:打分结果追加写入 script.md 同级的 cheat_report.md(含时间戳+总分+各维度分数)。文件不存在则创建。
-
- **打分反模式:**
-
- ❌ 差(无引用、模糊):
- "DF 6分 — 结尾不够好"
-
- ✅ 好(引用原文、具体):
- "DF 6分 — 固定结尾五件套缺了'可操作一步',最后只有'好了今天就聊到这'就结束了,没给观众具体操作指引"
-
- ### PREDICT — 盲预测
-
- 1. 确定目标 script(同 SCORE 的定位方式)
- 2. 检查是否有对应预测文件(防止重复)
- 3. 读取 rubric,基于 SCORE 结果写盲预测
- 4. 预测指标(必须全部包含):
-
- | 指标 | 说明 | 依据 |
- |------|------|------|
- | 播放量 | 区间估算 | 档位对应历史均值 + 账号基数修正 |
- | 点赞 | 区间估算 | 播放量 × 预估点赞率(新号 2-3%) |
- | 收藏率 | 百分比 | 教程型通常 1-3%,收藏引导加成 |
- | 2s跳出率 | 百分比 | HP 分数对应:8+→<25%,6-7→25-35%,<6→>35% |
- | 传播系数 | 百分比 | 教程型通常 0.1-0.3%,生活化场景可更高 |
- | 评论 | 区间估算 | 互动引导强度 + 话题争议性 |
-
- 每项预测必须写依据,不能只给数字。末尾加「预测风险」说明可能偏差的变量。
-
- 5. 写入预测文件:
- - 商业包模式 → `<cwd>/output/predictions/YYYY-MM-DD_<short>.md`
- - 其他模式 → `$CHEAT_ROOT/predictions/YYYY-MM-DD_<id>_<short>.md`
- - 同时追加到 script.md 同级的 cheat_report.md
- 6. 更新 `.cheat-state.json`
-
- **关键**:预测必须在看到实际数据前写完。如果用户已看过数据,标记为 `_reconstructed`。
-
- ### PUBLISH — 发布登记
-
- 1. 找到对应的 prediction 文件
- 2. 询问发布平台和链接
- 3. 更新 state:`last_published_at`
-
- ### RETRO — 复盘
-
- 1. 从 `pending_retros` 或已发布>3天的预测文件中找目标
- 2. 询问实际数据(播放/点赞/评论/收藏)
- 3. 对比预测 vs 实际
- 4. 写入复盘段
- 5. 更新 state:`calibration_samples +1`、清 `pending_retros`
-
- ### STATUS — 状态看板
-
- 输出:当前阶段、calibration_samples、待复盘列表、下一步建议。
-
- ### BUMP — 进化 rubric
-
- 前置条件:`calibration_samples ≥ 5`
-
- 1. 收集所有校准样本
- 2. 提出新权重方案
- 3. 全量重打验证
- 4. 用 DeepSeek MCP(`mcp__llm-chat__chat`)跨模型独立审核
- 5. 通过后更新 rubric_notes.md
-
- ### RECOMMEND / TRENDS / LEARN
-
- 分别路由到对应子逻辑。
-
+ calibration_engine: cheat-on-content
+ content_form: opinion-video # 或 tutorial-video
+ calibration_root: <相对于本报告的 lane 路径>
+ script_hash: <01-口播稿.md 的 sha256>
+ score_status: COMPLETE
+ prediction_status: PENDING # ⑤完成后才改为 RECORDED
+ prediction_file: null # RECORDED 时必须是 predictions/...md
---
-
- ## 状态管理
-
- 每次路由执行后,更新 `$CHEAT_ROOT/.cheat-state.json`。关键字段:
-
- ```json
- {
- "content_form": "tutorial-video",
- "rubric_version": "v2.0-bump-calibrated",
- "calibration_samples": 0,
- "last_published_at": null,
- "pending_retros": [],
- "in_progress_session": null
- }
```
- ---
-
- ## 教程型 rubric 维度速查(v2.0 bump-calibrated)
-
- | 缩写 | 维度 | 权重 | 核心问题 | 低分(2) | 高分(8-10) |
- |------|------|------|---------|---------|-----------|
- | TS | 标题搜索性 | 20% | 搜到吗? | 纯主题,无关键词 | 数字+工具名+结果承诺 |
- | OP | 可操作性+效果验证 | 20% | 路径清晰+效果可见? | 纯观点 | 口播念全文/精确路径/对比过程+前后效果 |
- | DF | 时长适配 | 15% | 黄金区间? | ≤90s或>7min | 2-5分钟 |
- | CV | 收藏价值 | 25% | 有现成资源? | 看完即走 | 提示词包/代码包+"已打包" |
- | HP | 钩子强度 | 15% | 前3秒留人? | "大家好..." | 痛点+工具名+结果承诺 |
- | EC | 结尾完整度 | 5% | 资源钩子? | 突然结束 | 资源钩子+收藏引导+互动+告别 |
+ 随后只摘要本期分数、关键修改点与上游预测文件路径;不复制一套 rubric。运行 `laohan-bianpai status`;缺上游 state、hash 或最终预测即为 BLOCKED。
- 公式:TS×0.20 + OP×0.20 + DF×0.15 + CV×0.25 + HP×0.15 + EC×0.05
- 硬门槛:DF≤3→封顶5.0 | DF=4→封顶6.0 | DF≥5→正常
+ ## 历史兼容
- ---
+ `~/.openclaw/workspace-shared/content-ops` 是旧的 `tutorial-video` 校准数据,不是所有 episode 的默认源。它升级到上游 schema 前保持只读;FDE 这类观点视频不得使用它的旧教程型 composite 作为放行依据。
- ## 关键提醒
+ ## 何时回到这里
- - **PREDICT 前不能看数据** — 工具的根基
- - **前 5 篇是数据采集不是决策** — 别信 composite
- - **RETRO 最有价值** — 跳过 = 白用
- - **5+ 篇后可 bump** — 进化 rubric 权重
+ - 发布后:`laohan-yunying` 只归档真实发布/数据/评论,再交给上游 `cheat-publish` 与 `cheat-retro`。
+ - 样本足够时:只由上游 `cheat-bump` 进行全量重打与独立审核。