---
name: confirm-card
purpose: "付费 gen 前的「可编辑确认卡 + 最小机械 guard」约定 —— video-gen / product-image-set 共用同一格式"
---

# 确认卡（生成前的唯一确认点）

> **任何付费 `gen video` / `gen image` 批量之前**，先出这张卡，等用户确认/改完才生成。它**取代**原来分散的 COST-GATE：**一次确认**。⚠️ **成本由后端 billing 实扣，确认卡不自算金额、不编单价**（skill 没有权威单价；正解是 billing 报价接口，未落地前只列计费口径）。

## 卡的内容

| 字段 | 视频 | 套图 |
|---|---|---|
| 清单 | **真实 `call-N.txt` prompt 全文**（按 `prompt-craft.md` 五段式）——确认 / 改的就是**模型实际吃的那段文字**，不是 storyboard 大纲 | 逐图：类别 + prompt + 张数 |
| **复刻专属** | **编辑后首帧**（图生视频里最该确认的一张：产品替换/合成后的首帧，贴出来给用户看） | — |
| 参数 | 画质 + 时长 | 画质 + 张数 |
| 计费口径 | 段数 / **总秒数** / 画质 —— **skill 不估价、不写金额**；实扣由后端 billing 按实际时长算、生成后告知实际金额。脚注「重生/改图另计费」 | 同左 |

## 行为

1. 把上面内容摆成对话里**可直接改**的结构化清单——视频要把**每个 Call 的 `call-N.txt` prompt 全文**贴出来。
2. 明确邀请改：「要改哪条直接说」。
3. **用户改某 Call → 直接覆写对应的 `prompts/call-N.txt`**（改的就是喂模型的），把更新后的全文再贴回卡上确认。
4. 用户确认/改完 → 写 `.confirmed`（绑 prompt 校验和，见下）→ 才进入生成。**复刻路径即使 Fast-path 也必须过这张卡**（不"告知不审批"）。**确认后禁止再改写 prompt**——生成只读这份 `call-N.txt`。

## 机械 guard（减速带级，适用任何付费 gen 批量）

> 纯文字层在付费 + Fast-path 下太被动。加一道**最小机械 guard**：确认通过才写标记，生成前查标记。

- **确认通过后**，在 video 工作目录写标记，**把当前 prompt 的校验和绑进去** + **引用用户原话**（承接已删的 video-clone `--quote` 反合理化模式）：

```bash
sha256sum prompts/call-*.txt > .confirmed                 # 绑定：确认的 = 这份 prompt
echo "user said: <把用户确认的原话填进来>" >> .confirmed
```

- **每个生成波的 bash 最前面**前置两行（验过卡 + 验 prompt 没被改写）：

```bash
[ -f .confirmed ] || { echo "ERR: 未过确认卡，拒绝付费生成"; exit 1; }
grep '\.txt$' .confirmed | sha256sum -c --status || { echo "ERR: prompt 跟确认的不是同一版（被改写过）→ 重新确认"; exit 1; }
```

- **定位**：校验和把这道从"验确认卡存在"升到"**验生成用的就是用户确认的那份 prompt**"——确认后 agent 再偷偷改写 `call-N.txt`、或漏过卡，都会被第二行拦住。挡不住的只剩"明知故犯地重写 prompt + 重算校验和"。

## 重新 gate 边界（D-E）

- **已确认集内的替换/重生**（同 N 张 / 同分镜）→ 不重出卡；但这是**有意放松**——集内重生是独立计费的 `gen`，会产生额外扣费（实扣以 billing 为准），故卡上须提示「重生/改图另计费」。
- **方案改 / 净新增 / 画质升级 / 新一轮 N** → 先 `rm .confirmed`，重出卡。emit 卡的步骤负责删旧标记。
