## Anki 牌组安全预览诊断流程样例
### 场景
用户说:`红色 flag 都是要删除掉的卡片`。
### 1. 工具入口
```bash
python /Users/bytedance/Documents/learning-bu/shared/tools/anki_deck_safety_preview.py \
--op delete-flagged \
--deck "英语概念卡" \
--flag red \
--expected-max 20 \
--dry-run
```
### 2. 输入来源
- AnkiConnect: `deckNames`, `findCards`, `cardsInfo`, `notesInfo`
- 用户显式目标: `deck="英语概念卡"`, `flag=red`
- 本地回滚目录: `/Users/bytedance/Documents/learning-bu/english/04-projects/anki-backups/`
### 3. 核心检查
| 检查项 | 通过信号 | 失败信号 |
| --- | --- | --- |
| deck-target | deck 存在且样例 front 是英语概念卡词条 | 命中钢琴、歌词或多个相似 deck |
| scope | red flag cards = 7,低于 expected-max | 数量异常,例如 700 或 0 |
| preview | 列出 7 个 card_id/note_id/front | 无样例、无法判断删除对象 |
| rollback | 已导出 before-delete `.apkg` | 没有备份文件 |
| postcheck | 删除后 remaining_red_flag_cards=0 | 删除后仍有红 flag 或 deck count 异常 |
### 4. dry-run 输出摘要
```text
Operation: delete-flagged
Target deck: 英语概念卡
Would delete: 7 cards / 7 notes
Sample fronts: staggering, mundane, outlet, brockman, provisioned
Backup planned: .../英语概念卡_before_red_flag_delete_<timestamp>.apkg
Rollback: anki_import_backup --path <backup.apkg>
Decision: wait_user_confirm
```
### 5. 执行条件
只有当用户确认 `目标 deck 是英语概念卡,删除这 7 张红 flag 卡` 后,工具才允许去掉 `--dry-run` 并执行。执行完成后生成 `delete_report.json`,其中必须包含 backup 路径、删除清单、剩余 red flag 数和 deck_cards_after。