Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

A.4 交付自检与回归清单

这份清单给两类人用:写完一章的作者,和准备把书交付出去的维护者。它只列可机械检查或可复现的项,不列「文笔是否优美」。

1 单章交付

#检查项命令/证据通过标准
1行数wc -l src/partN/chXX.md1000–1400
2章首两栏搜索 chapter-index 与 本章回答两项都在
3编号连续检查 H2 编号 X.Y.Z无跳号、无重复
4锚点唯一python3 tools/check_book.py0 重复
5盒子配平同上0 未闭合
6只用允许盒子同上仅 def/thm/ex/intuition/method/errata/note/proof/sol
7代码围栏有语言同上0 个无语言围栏
8失败模式搜索 失败模式至少 1 个,且属于分区/超时/重复/乱序
9观测命令搜索 观测至少 1 个可复制命令
10真实案例搜索 真实案例至少 1 个,含可核对链接或时间线
11重试重复副作用搜索 重复副作用至少 1 个案例
12陷阱清单末尾 ::: errata8–15 条
13出口检查末尾表格8–12 行,含「没达标去哪」
14母本对应## 母本对应至少 3 行,含「不重复」说明
15下一站最后一段有链接且目标存在
16图figure/pre.layout至少 1 张,SVG id 唯一,有读图结论

2 全书交付

#检查项命令通过标准
1构建mdbook build .退出码 0,无 warning 级别的断链
2结构质检python3 tools/check_book.py0 问题、0 断链、0 重复锚点
3覆盖矩阵python3 tools/check_coverage.py0 缺口
4脚本语法python3 tools/check_projects.py所有 .sh 过 bash -n,所有 .py 过 py_compile
5项目一测试python3 -m unittest -v projects/idempotent-tool/test_server.py全通过
6项目二测试python3 -m unittest -v projects/replicated-kv/test_kv.py全通过
7故障注入bash projects/*/fault_inject.sh --dry-run退出码 0
8重试案例覆盖grep -c 重复副作用 src/part*/ch*.md每章 ≥ 1
9跨书链接抽查 ../linux/... 等相对链接目标页面存在
10禁止项搜索占位标记、未完成提示句0 处
11图 idgrep -o 'id="[^"]*"' src/assets/figures/*.md跨文件唯一
12覆盖矩阵与正文一致抽查 10 个锚点全部能跳转

3 回归清单(每次改正文后)

  1. 改了某章的节号 → 同步改该章锚点、目录、覆盖矩阵、其他章的链接;
  2. 改了代码 → 重跑项目测试与 fault_inject.sh --dry-run,更新正文里的行号/输出;
  3. 改了图 → 重跑 python3 tools/build_figures.py,检查 SVG id 是否仍唯一;
  4. 改了 SUMMARY → 重跑 check_book.py,确认新增页面存在且非空;
  5. 改了协议事实 → 在 CHECK-distributed.md 里记一条,写清依据(论文/规范/版本)。

4 常见「假通过」

现象为什么是假通过正确做法
check_book.py 过了,但章只有 600 行脚本只查 ≥150 行用单章清单第 1 项单独卡 1000–1400
所有代码块都标了 text规避了语言检查可运行代码必须标真实语言;伪代码才用 text
链接指向 # 或空页面没触发断链链接必须有真实目标;跨书用绝对站点路径
覆盖矩阵每行都写「第 X 章」没有锚点,无法核对每行必须有可跳转的 sec-... 锚点
测试只跑 happy path重复/超时/崩溃没覆盖项目测试至少包含丢响应、并发重复、崩溃恢复
故障脚本只 echo没注入任何故障--dry-run 可只打印;真实模式必须改变系统状态
交付前的 10 分钟
cd distributed
mdbook build . >/tmp/build.log 2>&1; echo "build=$?"
python3 tools/check_book.py; echo "check=$?"
python3 tools/check_coverage.py; echo "coverage=$?"
python3 tools/check_projects.py; echo "projects=$?"
python3 -m unittest discover -s projects/idempotent-tool -p 'test_*.py' >/dev/null; echo "p1=$?"
python3 -m unittest discover -s projects/replicated-kv -p 'test_*.py' >/dev/null; echo "p2=$?"

六个 0 才算交付;任何一个非 0,先修再谈内容。