2026年10月3日 · 阅读 —

开源项目解读:它把一本人生指南当成被测系统

测试与评测知识与内容工具

开源项目解读:它把一本人生指南当成被测系统

先说这到底是什么,别急着被工程两个字劝退。

HowToLiveBetter(作者 eternity4719)是一本按性价比排好的人生决策手册,开源,给人免费查用的。它回答的问题是”遇到某件事,花多少代价、换回什么、值不值”:怎么活得久、怎么少生病、出了意外先做什么;怎么少花冤枉钱、哪些事会把人送进拘留所;失业了能领什么、开店要做网站要办什么证;恋爱结婚生孩子、出国、学手艺。

它不像菜谱一样让你”全做”。这是它跟同类内容最不一样的地方:作者自己也没做到其中大部分,写下来是让你要用的时候翻得到。全书 34 节 650 条,每条都写清楚三件事——

  • 要花什么:钱(0/少/多)、时间(少/中/多)、毅力(要不要长期扛);
  • 换回什么:寿命、时间精力、金钱、人身自由,四样分开算,不互相折算;
  • 证据有多硬:A(有具体数字,来自荟萃分析/大型试验)、B(有研究但难量化)、C(作者经验/公认做法)。

来源只引期刊论文和官方文件(附 DOI 或官网链接),不引知乎公众号。官方文件按中国大陆现行规定写。

给谁用? 普通成年人。它把自己定位成”医疗、法律、钱、工作”这几个领域里,让你少交冤枉税的口袋账本——不是给你治病、打官司、炒股的替代品,是出事前先给你一条可回查的方向。作者特意给 Claude Code / Codex 配了个 skill,你装上去问”替朋友担保签不签”,它先查书里对应的条目再答,并注明出自第几节第几条;查不到就直说书里没写,不编数字。

那它按测试的眼光,到底是什么? 表面是一本书,底下其实是一套把”内容”当被测系统来治理的管线——数据校验、交叉引用检查、“AI 味”机器检测、死链每周巡检、113 份逐条核实记录,全以代码形式跑在 CI 里。它防的不只是错别字,是内容在长期增量下静默腐烂。这层工程,才是它和那些”收藏了一堆健康常识”的文档最本质的区别。

不跑通给你报喜,下面只摆源码和文档里能核实的东西。

仓库里实际有什么

HowToLiveBetter/
├── book/                      # 正文:34 节,每节一个 md,650 条
│   ├── 01-不要早死.md
│   ├── 02-不要慢慢死.md
│   └── … 34-家里的常备药别吃出事.md
├── docs/
│   ├── 核实记录/              # 113 份核查档案:URL、复核结果、原文引句
│   └── 结婚划不划算.md …      # 若干篇长文
├── tools/                     # 校验 + 构建脚本(node,零第三方依赖为主)
│   ├── check-refs.mjs         # 交叉引用锚点检查
│   ├── check-plain.mjs        # "说人话"检查(长度/行话/新数字/抽象腔)
│   ├── check-links.mjs        # 死链巡检
│   ├── sync-stats.mjs         # 统计对齐 + 重出 og.png
│   ├── epub/  offline/  pdf/  # 三套电子版构建
│   └── lib/book.mjs           # 三套构建共用的解析
├── skills/
│   └── life-decision-guide/   # 让 Claude Code / Codex 照书回答的 SKILL
├── index.html                 # 在线检索页(纯静态,book/ 就是它的数据)
├── .github/workflows/
│   ├── book.yml               # 构建 + 三道检查 job
│   └── links.yml              # 每周一死链巡检
├── README.md                  # 导读 + 术语表 + 目录
├── CLAUDE.md                  # 全书写作与校验的"验收口径"
└── AGENTS.md

一句话概括整个仓库的结构:正文是数据,工具是校验器,CLAUDE.md 是这套校验器的验收口径。 在线检索页直接读 book/ 目录生成,正文一改页面跟着改;EPUB / PDF / 离线单文件由 CI 在 main 上每次正文变更后自动重新生成,挂到固定 Release(下载链接不变)。

先看整体:一条建议是一个”被测对象”

整体视图,按”谁发令、谁执行、靠什么落地”排成一张表:

层对象管什么谁调用
内容主体book/*.md 34 节 650 条每条的 建议/成本/说人话/收益/证据等级/来源/备注检索页、三套电子版、skill 共读
引用校验tools/check-refs.mjs交叉引用锚点、条号顺延、引用对照表CI 单独 job + sync-stats
说人话校验tools/check-plain.mjs说人话 长度/行话/新数字/抽象腔CI 单独 job + sync-stats
统计对齐tools/sync-stats.mjs条目数/A/B/C 数/链接数/性价比三档,回写四处本地 + CI —check
死链巡检tools/check-links.mjs每周扫 DOI 和官网链接是否失效links.yml 每周一
核实档案docs/核实记录/ 113 份每条结论的来源、原文引句、“未取得”项人工,配合上面工具
发布.github/workflows/book.yml生成 EPUB/PDF/离线 HTML 并挂 Releasemain 每次正文变更
消费skills/life-decision-guide/SKILL.md有人问人生决策时照书查、排序、注明出处Claude Code / Codex

最关键的判断在 CLAUDE.md 开头就立住了:这本书按”性价比”排序,不是按类别。每条都要回答两个问题——花掉什么(钱/时间/精力/毅力),换回什么(寿命 / 时间与精力 / 金钱 / 人身自由)。四样分开算,不互相折算。“总死亡率降 12%“和”每年省 500 元”不在一把尺子上。

而作为测试的人,最先看到的不是内容,是四条证据等级:A 级有具体数字、来自荟萃分析 / 大型队列 / RCT;B 级有研究但难量化或小样本;C 级是作者经验。全书 A 428、B 171、C 51,另有 65 条标争议、3 处标 TODO 待核实。有争议的 A/B 级条目必须列出反方证据。

核心机制:它把”证据”做成了流水线

整本书最反直觉的一句,README 里写得很直白:「不用全做。这是按性价比排好的备选单,不是任务清单——作者自己也没做到其中大部分。」写下来是为了要用的时候找得到。

读源码才知道,这句克制背后是一条完整的证据处理管线。从源码能看到三条互相咬合的规则:

一、来源只进原始文献。 CLAUDE.md 写死:只引期刊论文(附 DOI 或 PubMed)、WHO/CDC/国家统计局等官方机构报告;禁止知乎、公众号、搜狐、网易、百家号。数字必须能在原文里找到,不确定宁可不写、写”待核实”,不要凭记忆编 DOI。

二、每个判断都留一份”复核档案”。 docs/核实记录/ 下 113 份文件,是全书最难造假的部分。拿《追加:AI 换脸与拟声冒充熟人》这份举例,它的档案长这样:

任务来源:读者提「要不要加防骗的」。先盘了一遍现有覆盖再决定加什么。
原有覆盖:第 8 节第 2 条(止付)、第 3 条(三不一多口诀)……完整,因此不新开一节,只补真空白。

## 第 8 节第 4 条
| URL | 复核 | 原文引句 |
| 福建省公安厅转载页 | 是 | 「请对方做一个连贯的转头动作……」;多渠道核实「这是最核心的一招」 |
| gov.cn 深度合成管理规定 | 是 | 第六条……第十六条 元数据隐式标识…… |

未取得:公安部官网 mps.gov.cn 本轮仍全站 521……只取福建省公安厅转载页,条目来源栏已注明「转载」。

注意最后一栏「未取得」。这条 AI 换脸防骗条,作者把没拿到原始来源、只能靠转载页这件事也如实写进了档案,来源栏注明「转载」。这比给每个数字配 DOI 更接近”测试思维”——测试报告不只记录通过项,也记录无法验证项。

三、失效链接靠每周 CI 兜底。 links.yml 每周一跑 node tools/check-links.mjs,结果进那周的 Summary 页,工作流本身永远是绿的。CLAUDE.md 写明判据:只有「确定失效」那档(404、410、DOI 在 doi.org 查无此号)要修;「没连上」多半是 gov.cn 挡境外机房 IP,「加密握手不兼容」是老政府站,浏览器能开。修法按优先级:① 同一机构官网的新地址;② 换一份能逐字核对同一事实的官方原文;③ 实在没有,用 web.archive.org 存档,括号注明「原页面已下线,链接为某年某月某日的网页存档」。

这套里最值得记的不是”来源硬”,是它把死链分档处理——不是笼统”链接坏了就修”,而是先判断是不是真失效,把境外机房被挡和老政府站的旧协议区分开,避免误改。做过内容治理的人都知道,误修一个还活着的链接,比漏修一个死链更伤信任。

为什么这么设计:内容在增量下会静默腐烂

机制背后的原理,藏在 CLAUDE.md 一条条带着日期的规则里。几乎每一条硬规则都是用户/读者现场抓到一个真实翻车案例之后补的口子。挑几个有代表性的:

  • 交叉引用会被”顺延”撞歪。 条号是编号,插入一条,后面的全都顺延。麻烦在顺延后的条号通常仍在范围内,查越界一条抓不到。实际翻过车:第 7 节曾有 6 处指错,医疗救助指到低保、救助站指错条。修法不是让人小心,是加一个 check-refs 生成 docs/引用对照.md,把每处引用实际指向的条目标题连同引用处上下文都写出来——判据变成「条号没变、但『指向的条目』那列变了,就是被撞歪」。
  • AI 味会越写越重,且机器能查。 2026-09-28 读者在 issue #42 投诉全书「AI 味太重」「读起来蛋疼」。作者当天把 173 条说人话不合格的全部改掉,还立了 check-plain.mjs 当 CI 的第 2 道检查。它查四样:① 说人话 120 字内;② 统计缩写、研究设计、样本量、分组这类行话;③ 说人话里的每个阿拉伯数字必须能在同条标题/成本/收益栏找到(--numbers 才查,误报多不进 CI);④ 抽象腔词表(「另一头」「产出」「本质上」)。第 ③ 条的判断还写了换算逻辑:0.72 翻译成「低约 28%」算同一数字,差 5% 内都认。
  • 说人话必须自足。 最隐蔽的坑来自 2026-09-19「说人话栏与收益栏对齐」排查。当时给 6 个审校 agent 各发同一份判据,逐条比对 544 条目,报出 104 处。最要紧的一类是口径写反:定向医学生那条原文写「规培这 3 年算在服务期里」,收益栏实际写的是「违约的培训年限不计入服务期」,意思相反。还删掉一批收益栏查不到的事实断言——安全带的「撞成重伤」、头盔的「不扣扣子等于没戴」、带状疱疹的「很少致命」。

读到这里能确认一件事:这本书的治理方式,比很多高黏性软件项目的质量门禁都严。它不给自己留”内容这一块不好量化”的退路,把每一项约束都落到能跑的命令和一个能人工核对的产出物。

主流程:一条条目是怎么进库的

单条目格式统一,是机器能查的前提。以第 1 节第 5 条「不采、不买、不吃野生蘑菇」为例:

### 5. 不采、不买、不吃野生蘑菇,任何「土办法鉴别」都不成立
<!-- 成本标签: 钱=0 时间=少 毅力=些 收益=大 口径=死亡率 -->
- 成本:不花钱。难的地方是放弃一种季节性的野味。
- 说人话:光 2025 年一年,全国就有 828 起蘑菇中毒,2165 人中招,13 人死……
- 收益:中国疾控中心 2025 年调查了 828 起……病死率 0.6%……
- 证据等级:A
- 来源:Mushroom Poisoning Outbreaks — China 2025, China CDC Weekly……
- 备注:吃错了就立刻催吐……「本地人认得清」这个前提本身站不住。

标题下那行 HTML 注释是给机器的成本标签:钱=0|少|多、时间=少|中|多、毅力=否|些|是、收益=大|中|小、口径=死亡率|金钱|时间|自由。检索页按它做成本维度筛选,索引只取这五行注释,正文一个标点不碰。

新增一条的完整路径,CLAUDE.md 管得很死:

  1. 落笔前先查全书有没有重复条目——2026-10-01 全局排查后当天删并了 7 条(方法和口径相同的并掉,不同口径算账的两条都留,但要互相写「见第 X 节第 Y 条」)。
  2. 新条目一律追加在节末,不插中间,免得顺延条号。
  3. 写完跑 sync-stats.mjs——按顺序做四件事:重算统计回写 README / index.html / og.html,调 check-refs 重算引用对照表,调 check-plain 查说人话,最后用无头 Chrome 重出 og.png。CI 里 --check 只比对不写,数字过时就红。
  4. 插入/删除条目后,扫一眼 docs/引用对照.md 的 diff。

sync-stats.mjs 的狠处是它把”条目数变了要同步四处”这种最容易漏的活,做成了单个命令加 CI 守卫——它还先比对 index.html 里那两行档位规则(COST_W、e.ratio),变了直接报错要求同步,防止档位算法两头不一致。

最值钱的工程细节:交叉引用锚点 + 两道 CI 门禁不挡发布

这套系统最有移植价值的是它怎么处理”引用”这个内容里的老大难,以及怎么给 CI 分红绿灯。

交叉引用锚点是整本书防错的核心。正文里到处是「见第 8 节第 17 条」这种指路,脆点是条号会被顺延撞歪。作者的解法不是信任条号,是强制每条引用必须带锚点:

裸条号一律不允许。引用的前后文里必须有一个词和目标条目标题对得上——「医疗救助见第 11 条」里的「医疗救助」就是锚点;实在没有就显式写成「见第 16 条(借条和担保)」。

锚点还被加严过(2026-09-20):整句里连着三个汉字和标题对上,或者引用所在的那个逗号分句里有两个汉字对上,才算数;只在分句之外撞上「自己」「公司」这类两字常见词,判失败。原因是一次真实翻车:PR #18 在第 31 节插条目,隔着两个逗号的「你自己还」冒充了锚点,--check 当时报通过,是靠对照表 diff 才发现的。加严后全书从 75 处裸条号清到 0。

check-refs.mjs 的项目注释里还写了灵敏度实测——把节内引用整体顺延一条,当场拦住约七成,剩下相邻两条讲同一件事、标题共用词的,只能靠对照表 diff 兜。所以那一步扫 diff 不能省。 这是最值得记的一条:作者没有把”校验器能拦一切”当卖点,而是老实标出校验器的残余风险区间,再把兜底动作写进规矩。

两道 CI 门禁故意不挂 build。 book.yml 里交叉引用检查、说人话检查、统计数字检查各是独立 job,注释写得很直白:

交叉引用检查。单独一个 job,不挂在 build 里:锚点没补好不该连累 EPUB、PDF 和离线单文件的发布,那是两回事。PR 上照样红,main 上该发的还是发出去。

这个设计值得说一句:发布物(电子书)和内容质量(引用正确、说人话合格)是两套红线,一个不该出的书别让一条没补锚点的引用卡住不发,但该红的照样红。把”验证不阻塞发布”和”验证照样亮红灯”同时做到,靠的是 job 拆分,不是把校验做软。

另外 check-plain.mjs 的三档检查进 CI 之前,作者先自己测过误报率——第 ③ 样”新数字”检查因为热线号 120、举例金额 1000 元会误报,选择不进 CI,留 --numbers 人工排查用。宁可漏,也不让误报多到让大家不看输出。这句「宁可漏也别误报,误报多了大家就不看了」值得每个做质量门禁的人记下来。

读完想说的几件事

通读下来,这套系统有几点值得说的判断,不全是夸。

最值得说的,是它把”自己也会错”写进了流程。 核实记录里到处是「未取得」——公安部官网全站 521 取不到、国家反诈中心 App 的功能只在地方政法委站点见到转述、2017 版中国指南之外 2022 版原文没取到。作者拿不到原文,宁可标”不写”或注明”转载”,也不转二手。这在内容圈是少见的:多数攻略作者巴不得显得自己无所不知,他却在文档里老实交代自己哪里查不到。做测试的人读这个最有共鸣——测试报告本来就该记录”无法验证”项,而不只是通过的项。

评价不是没保留。 这套规则是单人 + 强自驱长出来的:差不多每一条硬规则都带着日期和某次真实翻车的动机,靠”作者观察到问题→当天补口子”驱动。换成团队、换成另一批验收人,这套纪律未必能自己活下去——比如 2026-10-01 起的子代理并行,提示词里写死了”不许跑 sync-stats、不许用 sed 批量改正文、自检只跑两个 —check”,这种约束本质上是把”只有主人物能碰的东西”隔离出来,换个协作模型未必成立。它更像一套精密的单人作业台,而不是能直接搬走的团队流程。

有两件事值得替它说句公道话,也顺便去掉一个可能的误读。 它被 3.5 万 star 捧红,但请不要误读成”这本书建议全对”。它自己就把证据分 A/B/C 三档,A 级也常标「争议」并列出反方证据;内容里明确写了”法律、医保、社保按中国大陆现行规定写,涉及具体病情/案件/税务要找专业人士”。它给的是出事前可回查的方向,不是裁判。真正让这本书罕见的,恰恰不是每条结论多正确,而是它把”一条结论凭什么可信”这件事,做到了可回查、可监督。

放在测试的坐标系里看: 这本书用一套近乎软件工程的严谨在治理内容——每条结论的出处、复核、残余风险都可回查,防错规则编码成 CI 里能跑的命令,机器查不准的约束明确标注出来再补人工兜底。测试领域会反复碰到同一个命题:质量不是靠自觉,是靠流程把防错动作做成默认执行。 它防的是内容腐烂,测试防的是功能回归,手法同源——可复现、可回查、经得起长期增量。

如果你也认同”一条没有原始出处的健康建议,和一个没有测试覆盖的接口,都算负债”,那这个仓库给你的是整套可参照的治理模板:113 份核实记录怎么记、check-refs 怎么判定引用、CI 怎么在不挡发布的前提下把红灯亮出来。剩下的,是找一个你自己愿意长期维护、且每天都在”被新内容弄脏”的东西,把这套管线套上去。

仓库地址:https://github.com/eternity4719/HowToLiveBetter

#开源项目 #内容治理 #测试开发 #证据核实 #AI味检测 #知识库 #工程