← ClaudeAtlas

cheat-shootlisted

登记一条视频已拍摄。**建 video folder + 询问实际拍摄稿是否与 scripts/<id>.md 一致 + buffer +1**。与 cheat-publish 配对:拍了进队列,发了出队列。触发词:"拍了"/"拍了 X"/"shot"/"shot it"/"已拍 X"/"录完了"。
LiHongwei-cn/lihongwei-cn · ★ 9 · AI & Automation · score 79
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