CHAPTER 12 · 公开候选
安全批处理的目标不是把数量跑满,而是尽早判断规则是否可靠。你会冻结 20 份输入,只选择 S-01 至 S-05,得到三种不同异常,然后根据 20% 质量门停止扩张。
打开第 12 章练习入口。完整任务位于练习包内 tasks/chapter-12.md;网站只提供下载与阅读,不会替你执行本地文件。
1. 起点
你收到 20 份格式不完全一致的虚构学习条目。目标不是追求“全量跑完”,而是先用五份样本看清异常,再决定是否扩大。
先理解问题
一次处理 20 份看起来省时间,规则一旦错误却会放大 20 次。S-02 缺日期、S-04 使用非法状态、S-05 标签重复;它们让异常保留、质量门和停止决定成为真实操作。
2. 只读输入
inputs/chapter-12/S-01.md至S-20.mdinputs/chapter-12/expected-outcomes.json- 第 11 章 v1.1 与回归结论
建议阅读顺序
先看 20 个文件是否都存在,再读 expected-outcomes 中的固定五样本与阈值;不要先挑看起来最干净的五份。
3. 唯一写入位置
只写 workbench/batch-output/。
写入位置是本章的安全边界。Codex 可以创建目录,但不能扩大到 inputs、checkpoint 或别章输出。
4. 本章唯一成果
交付 sample-selection.md、results.csv、exceptions.md、quality-gate.json 和 decision.md。
成果必须能打开、能回查、能由本章检查验证。只有一句“已经完成”不算交付。
5. 可复制给 Codex 的任务
只读取 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。
把代码块整段复制,不要拆掉输入范围、停止条件和检查命令。Codex 的总结不能代替产出文件。
6. 你必须亲手完成
在运行前确认五份样本同时覆盖正常、缺字段和状态异常;运行后打开一条成功项和每类异常的原文件,判断结果是否忠实;最后亲手选择“扩大”或“停止”,并在 decision.md 写出依据。
人工动作为什么不能省
你要亲手打开 S-02、S-04、S-05,对照异常清单;再用纸笔算 3 ÷ 5 = 0.6,并与 0.2 阈值比较。脚本给数字,扩大或停止仍是你的判断。
7. 你应该看到
- 结果表正好覆盖五个样本 ID,没有偷偷处理其余十五份。
- 预置异常留在
exceptions.md,不是从结果中消失。 - 质量门使用实际错误率和固定阈值给出允许或阻止。
- 输入哈希在处理前后完全一致。
跟着做:从输入到可观察结果
1. 冻结全量,选定小样本
运行输入检查,并在 sample-selection.md 固定 S-01 至 S-05。
**你应看到:**五个 ID 在运行前就确定,其余 15 份明确不处理。
2. 运行受控批处理
执行 node scripts/run-batch.mjs workbench/batch-output/sample-selection.md workbench/batch-output。
**你应看到:**结果表恰有五行;成功和异常行都保留。
3. 核对三类异常
回到 S-02、S-04、S-05 原文。
**你应看到:**分别对应缺日期、状态不在允许值、标签重复;不是处理器编造。
4. 执行质量门
比较 0.6 与 0.2,阅读决定,运行 npm run check:12。
**你应看到:**输出 STOP;S-06 至 S-20 不进入结果,输入哈希不变。

参考完成态:本地实跑记录
- results.csv 恰有 S-01 至 S-05 五行。
- exceptions.md 恰有三项。
- 质量门为 5/3/0.6/0.2/false,检查输出 CH12_PASS。
证据文件:completed-example/batch-output/results.csv。这些记录只证明虚构练习在本地按规则跑通,不代表网站已发布、现实用户已使用或作者已批准。
8. 三个真实坑
坑 1:跳过样本直接全量
运行器要求 sample-selection.md 恰有五个不重复 ID;数量不等于五个时会拒绝开始。异常覆盖则由随后运行的 npm run check:12 对照固定样本核验。
坑 2:吞掉异常
固定结果表给每个样本一行,异常还必须进入单独清单。缺一行或把异常当成功都会与独立预期表冲突。
坑 3:改写原始输入
输入中有容易“顺手修好”的日期和状态。完整性检查会比较二十份文件的前后哈希,任何修写都会失败。
这三个坑都由练习材料、代码或检查实际暴露,不是提醒语。
先看信号,再做补救
**识别信号:**样本不是预先固定的 S-01 至 S-05、exceptions.md 少了异常,或 decision 写成扩大,说明你在挑结果或吞错误。**补救动作:**只清空 workbench/batch-output/,恢复固定样本,重新运行并逐份对照 S-02、S-04、S-05;60% 仍高于 20% 时必须保持 STOP。
补救后仍不能让本章检查因正确原因通过,就按第 10 节停止并回退;不要手改日志或复制参考完成态绕过。
9. 复选框验收
- 五份样本在运行前已选定并写明理由。
- 每个样本在
results.csv中正好一行。 - 所有预置异常都出现在
exceptions.md。 - 决定与质量门的实际计数一致。
-
npm run check:12和输入完整性检查均通过。
每一项都要靠打开文件或完成动作后再勾选;不要只凭 Codex 报告的 PASS。
10. 停止、回退与交接
样本没有覆盖异常、输入哈希变化、异常被吞掉或质量门阻止时,停止扩大范围。回退只清空 workbench/batch-output/ 后重新选择样本。交给第 13 章的是 results.csv、exceptions.md、decision.md 和允许范围规则。
**停止条件:**异常率超过阈值、异常不能回到输入、结果丢行、或脚本开始处理 S-06 至 S-20。
**回退动作:**只清空 workbench/batch-output/ 后重跑同一五份样本,不改输入或换样本追求更好数字。
**交接文件:**results.csv、exceptions.md、quality-gate.json、decision.md 与允许范围规则。