<!-- generated-by: codex / 2026-08-26 -->
# 第 15 章任务卡：形成可维护工作台

## 1. 起点

第 8—14 章已经交出并验收了各自成果。现在要把人工采用的结果接成一个入口，并用新增材料 A-13 完成一次可回退的小更新。

## 2. 只读输入

- 第 8—14 章通过检查的成果和人工决定
- `inputs/chapter-15/A-13.md`
- `inputs/chapter-15/update-request.md`

任何未验收、被退回或仍待确认的前章内容都不进入工作台。

## 3. 唯一写入位置

只写 `workbench/handoff/`，以及更新请求明确允许的 `workbench/library/` 和 `workbench/content-package/` 副本。不得改 `inputs/`、checkpoint 或前章证据。

## 4. 本章唯一成果

交付 `index.html`、`maintenance-log.md`、`test-record.md`、`rollback-point.json`、`rollback-proof.json`、`HANDOFF.md` 和 `maintenance-checklist.md`，并证明 A-13 可更新、可检查、可回退。

`rollback-proof.json` 必须在实际回退并逐文件比对之后生成：顶层记录 `exactRestoration: true` 和回退命令的 `directExitCode: 0`；`files` 为四个白名单业务文件逐一记录 `actualSha256` 与 `exact: true`。其中 `actualSha256` 必须等于 `rollback-point.json` 中同一文件的 `beforeSha256`，不能只写一句“已经恢复”。

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

```text
只整合第 8—14 章已通过检查且被人工采用的成果，在 workbench/handoff/index.html 建一个离线统一入口，逐项链接资料库、内容包、记录页、批处理、事件证据和协作决定。先运行 node scripts/apply-update.mjs workbench，记录允许文件的更新前哈希到 rollback-point.json，再按 inputs/chapter-15/update-request.md 把 A-13 作为一次最小更新加入获准的资料库和内容包副本，写 maintenance-log.md，运行受影响检查并写 test-record.md。执行 node scripts/rollback-update.mjs workbench；直接记录退出码，逐一计算四个白名单文件回退后的 SHA-256，与 beforeSha256 比较，并把 exactRestoration、directExitCode、每个文件的 actualSha256 和 exact 写入 rollback-proof.json。只有全部逐字节恢复，才运行 node scripts/apply-update.mjs workbench --reuse-rollback-point 重新应用经检查的更新。脚本也接受把 --reuse-rollback-point 放在目标目录之前，但不得省略或猜测其他参数。写清从哪里开始、读什么、改哪里、何时回退、何时停止的 HANDOFF.md 和维护清单。最后运行 npm run check:15。
```

## 6. 你必须亲手完成

从统一入口依次打开六类前章成果；检查 A-13 在资料库与内容包中的表达一致；亲手执行一次回退并比较结果；最后按 `HANDOFF.md` 判断下一位是否能在不询问背景的情况下开始一次小更新。

## 7. 你应该看到

- 入口的本地链接全部可达，没有链接到未采用成果。
- A-13 只改变授权的资料库、内容包和维护记录。
- 记录页 v1.1 和其他未受影响检查仍通过。
- 回退后哈希与更新前完全一致，重新应用后检查再次通过。
- `rollback-proof.json` 中四个 `actualSha256` 都等于对应的更新前哈希，且没有把未执行的回退写成成功。

## 8. 三个真实坑

### 坑 1：一次塞入所有扩展

更新请求只授权 A-13 和三类文件。增加新模块、字段或协作角色会被变更范围清单拦住。

### 坑 2：打开离线入口后就写“已经发布”

识别信号是：你只在本机打开了 `handoff/index.html`，却在交接里出现“发布完成、已经外发、现实用户可用”。立刻删掉这类越界结论，把状态恢复为“虚构、离线、练习”；真正发布必须另行获得作者批准并完成部署验收。

### 坑 3：交接责任与下一步不清

`HANDOFF.md` 必须回答开始、读取、写入、回退和停止五个问题。只有文件列表、没有责任边界不能通过。

## 9. 复选框验收

- [ ] 统一入口的全部本地链接可达。
- [ ] A-13 只影响授权文件且前后表达一致。
- [ ] 受影响检查和记录页回归均通过。
- [ ] 回退精确恢复，重新应用后再次通过。
- [ ] `rollback-proof.json` 记录了真实退出码与四文件逐字节比对结果。
- [ ] `npm run check:15` 通过。

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

入口有死链、更新越界、资料库与内容包不一致、回归失败或回退不等值时停止。使用 `rollback-point.json` 和 `scripts/rollback-update.mjs` 恢复，不靠手工猜。最终交接文件是 `workbench/handoff/HANDOFF.md`；本地检查或 AI 复演不能被写成另一位人类已经完成复演。
