cheat-shootlisted
Install: claude install-skill LiHongwei-cn/lihongwei-cn
# /cheat-shoot — 登记拍摄完成 + 建 video folder + (改稿则) 触发 v2 预测
把视频从"已写预测、未拍摄"状态推进到"已拍摄、未发布"状态。这一步:
1. **建 `videos/<同 id>/`** 目录(之前没有的话)
2. **询问用户**:"实际拍摄时用的稿子和 `scripts/<id>.md` 一致吗?"
3. 算 diff——超过 V2_TRIGGER_THRESHOLD (默认 30%) → **delegate 到 `/cheat-predict — mode: v2`** 在原 prediction 文件 append `## 预测 v2` 段
4. 把 video folder 加进 state.shoots 队列,buffer +1
cheat-shoot 自己**不**写预测内容——所有预测落盘逻辑在 cheat-predict。cheat-shoot 只负责检测改稿 + 派发。
为什么单独一个 skill:
- buffer 警戒系统需要明确区分"拍了" vs "发了"。视频可以批量拍(一天拍 5 条),分散发(每天发 1 条)
- "实际拍摄稿" ≠ "pre-shoot 草稿"是常态。这一步是把 diff 显式化、触发 v2 重判、采集"用户改稿 pattern"信号的入口
- v2 预测 vs v1 预测的差异本身就是 rubric 升级证据——比如 v1 给 ER=4,v2 给 ER=5(用户改稿改高了 hook 强度),就告诉 rubric "这个用户的 ER 阈值跟我现在公式不一致"
## Overview
```
[用户:拍了 scripts/2026-05-04_abc123_停止期待.md]
↓
[Phase 0: 解析路径 + 验证 prediction 已存在]
↓
[Phase 1: 检查是否已登记(避免重复)]
↓
[Phase 2: 建 videos/<id>/ + 询问"实际拍摄稿一致吗?"]
↓
[Phase 3: 写 videos/<id>/script.md]
↓
[Phase 4: append state.shoots]
↓
[Phase 5: 输出 buffer 状态]
```
## Constants
- **REQUIRE_PREDICTION = true** — 拍前必须先有 v1 prediction 文件
- **V2_TRIGGER_THRESHOLD = 0.30** — normalize 后 char-level diff 超过 30% → 默认建议 v2 重判;低于 30% 询问用户是否仍要 v2
- **DIFF_METRIC = char_levenshtein_normalized**(**默认**)—— 通过 [`tools/diff_pct.py`](../../tools/diff_pct.py) 调用:先 normalize(去 markdown header / 分隔线 / 列表标记 / 装饰标点 / 折叠所有空白),再算 char-level Levenshtein / max(len_a, len_b)。preferred backend `rapidfuzz`,fallback `difflib.SequenceMatcher`(stdlib,永远可用)。**旧版 line-level 在口语化转录场景误报严重**(draft 长 markdown 句 vs