<!-- generated-by: codex / 2026-08-26 -->
# 第 12 章任务卡：运行受控批处理

## 1. 起点

你收到 20 份格式不完全一致的虚构学习条目。目标不是追求“全量跑完”，而是先用五份样本看清异常，再决定是否扩大。

## 2. 只读输入

- `inputs/chapter-12/S-01.md` 至 `S-20.md`
- `inputs/chapter-12/expected-outcomes.json`
- 第 11 章 v1.1 与回归结论

## 3. 唯一写入位置

只写 `workbench/batch-output/`。

## 4. 本章唯一成果

交付 `sample-selection.md`、`results.csv`、`exceptions.md`、`quality-gate.json` 和 `decision.md`。

## 5. 可复制给 Codex 的任务

```text
只读取 inputs/chapter-12。先根据明确的覆盖规则选择五份样本，把 ID 与选择理由写入 workbench/batch-output/sample-selection.md；没有这份文件不得运行处理。用 scripts/run-batch.mjs 只处理五份样本，把每份输入的结果写入 results.csv，把缺字段、日期异常、状态不明或重复标签原样记入 exceptions.md，不修写输入。根据固定阈值生成 quality-gate.json，再让 decision.md 用实际计数决定扩大或停止。运行前后比较输入哈希，最后运行 npm run check:12。
```

## 6. 你必须亲手完成

在运行前确认五份样本同时覆盖正常、缺字段和状态异常；运行后打开一条成功项和每类异常的原文件，判断结果是否忠实；最后亲手选择“扩大”或“停止”，并在 `decision.md` 写出依据。

## 7. 你应该看到

- 结果表正好覆盖五个样本 ID，没有偷偷处理其余十五份。
- 预置异常留在 `exceptions.md`，不是从结果中消失。
- 质量门使用实际错误率和固定阈值给出允许或阻止。
- 输入哈希在处理前后完全一致。

## 8. 三个真实坑

### 坑 1：跳过样本直接全量

运行器要求 `sample-selection.md` 恰有五个不重复 ID；数量不等于五个时会拒绝开始。异常覆盖则由随后运行的 `npm run check:12` 对照固定样本核验。

### 坑 2：吞掉异常

固定结果表给每个样本一行，异常还必须进入单独清单。缺一行或把异常当成功都会与独立预期表冲突。

### 坑 3：改写原始输入

输入中有容易“顺手修好”的日期和状态。完整性检查会比较二十份文件的前后哈希，任何修写都会失败。

## 9. 复选框验收

- [ ] 五份样本在运行前已选定并写明理由。
- [ ] 每个样本在 `results.csv` 中正好一行。
- [ ] 所有预置异常都出现在 `exceptions.md`。
- [ ] 决定与质量门的实际计数一致。
- [ ] `npm run check:12` 和输入完整性检查均通过。

## 10. 停止、回退与交接

样本没有覆盖异常、输入哈希变化、异常被吞掉或质量门阻止时，停止扩大范围。回退只清空 `workbench/batch-output/` 后重新选择样本。交给第 13 章的是 `results.csv`、`exceptions.md`、`decision.md` 和允许范围规则。
