从这里开始 ——
2026 年 5 月初 · 某个深夜。一个不懂代码的"追风少年" · 看着屏幕上的 一长串绿色 PASS ——
"lint PASS / typecheck PASS / self-audit PASS / visual smoke PASS / release gate PASS"。
他的手已经放在发布键上 · 但他停住了。他问自己一个问题 —— "这些 PASS 加在一起 · 等于'可以发布'吗"?
答案是不等于。
本篇一句话
这一篇写的是 —— 上线前检查最贵的一课 · 不是"让 AI 跑更多检查" · 是学会区分"本地通过 / CI 通过 / 改动提议 合并 / 线上可访问 / 用户真的使用"这 5 件完全不同的事。"跑通了"不是一个结论 · 必须问是哪一层跑通了==。
结构图 · 从"代码改完"到"产品成立"的 5 层验证
diagram · CH10
01
本地通过
02
CI 通过
03
线上 smoke
04
人工确认
05
发布后观察
这张图说明 —— 每一层都有自己的完成信号 · 也有自己的"不能证明"。AI 最擅长把第 1 层的 PASS · 写成"已上线"。上线前检查的真正工作 · 不是跑更多检查 · 是给每个检查写清边界。
1. "跑通了" 是最危险的一句话
做网站的时候 · AI 很喜欢说跑通了。
我以前听到这句话 · 也会觉得事情结束了。后来我才知道 · "跑通了" 这个词非常危险。
因为它太模糊。
一句"跑通了"可以指 ——
- 本地页面能打开。
- build 通过。
- CI 通过。
- 改动提议 合并。
- 线上能打开。
- 用户真的用过。
- 有人愿意付钱。
这些都可以被说成"跑通了" · 但它们完全不是一回事。
如果不拆开 · AI 就很容易把低一层的成功 · 包装成高一层的完成。
这是 CH05 顺滑的失败 在发布 surface 上最贵的姿势。
所以我后来要求 AI 回报时必须分层 —— 不是简单一句"完成" · 而是 ——
已执行
已记录
已进入程序
已通过验证
仍未授权
仍未完成这几个词分开以后 · 很多混乱就少了一半。
2. 验证的 5 层 · 每层只能说自己能证明的事
后来我把"完成"拆成 5 层 —— 本地 / CI / 改动提议 & main / 线上 smoke / 用户。每一层只允许声明自己能证明的事 · 不允许跨层签字。
| 层 | 完成信号 | 不能证明 |
|---|---|---|
| 1 本地 | lint / typecheck / validator PASS | 上线能用 / 用户喜欢 |
| 2 CI | 协作平台门禁通过 | 产品逻辑正确 |
| 3 改动提议 & main | 某批代码进入 main | 系统整体可用 |
| 4 线上 smoke | 首页 200 / 关键路由 200 / 样式无丢 / 无登录墙误挡 | 网站"长得好不好" |
| 5 用户 | 真的用过 · 复访 · 反馈 · 付费 | 长期可持续 |
这 5 层不是 OR · 是 AND。前 4 层全 PASS · 第 5 层失败 · 项目依然失败。
而且 · 没有任何一层能"包装"另一层。本地 PASS 不能写成"已发布" · CI 通过不能写成"用户验证"。
3. 本地 PASS 只是入场券
本地通过很重要。没有本地通过 · 后面的事都不稳。
但本地通过也有边界 —— 它通常证明的是 ——
Markdown 文件真实存在。
中文交付比例合格。
脚本语法没错。
JSON 能解析。
页面在本地环境不报错。
某些视觉 smoke 能跑通。这些是必要条件 · 不是充分条件。
我以前会看到 AI 报一长串 PASS ——
lint PASS
typecheck PASS
self-audit PASS
visual smoke PASS
release gate PASS这些当然好。但它们仍然不能自动等于 ——
- 可以发布。
- 用户会喜欢。
- SEO 没问题。
- 付款可以开。
- 法律边界完整。
- 旧索引已经清理。
- 所有 AI 接口已经生产可用。
检查越多 · 越要知道每个检查没有覆盖什么。这是 CH05 的"AI 三档使用法"在发布前的延伸 —— 自动挡跑 PASS · 方向盘决定发不发 · 刹车守"没覆盖到的事"。
4. CI / 改动提议 / 线上 smoke · 别把"生命体征"当"好身体"
有一次网站进入了一个比较关键的节点。
本地做了很多修复 · 后来形成 改动提议 · CI 跑过 · 主分支也有检查 · 线上站点也做了 smoke。
这时候最容易出现两个误解。
误解 1 · 改动提议 合并了 · 网站项目就完成了
不对。
改动提议 合并只是某一批代码进入 main。它不代表 ——
- 决策助手完整生产可用。
- 内容入口完整生产可用。
- 支付系统已经激活。
- SEO 旧索引迁移结束。
- 所有 ranking 数据都已补齐。
误解 2 · 线上 smoke 通过 · 就没有问题
也不对。线上 smoke 更像一个最小生命体征检查 ——
- 首页能不能打开?
- 关键路由是不是 200?
- 样式有没有丢?
- 是不是被登录墙挡住?
它告诉你的是 —— 这个网站"活着"。
它没告诉你的是 —— 这个网站"长得好不好" / "用户用不用" / "内容够不够" / "能不能赚钱"。
生命体征 ≠ 好身体。有呼吸 ≠ 健康。smoke 通过 · 只是有呼吸====。
5. "没有做什么" · 与"已做什么"同等重要
我后来给自己定了一条很反直觉的规则 ——
AI 每次报告 · 不能只写"做了什么"。
还必须写"没有做什么"。
为什么?因为 AI 很擅长把报告写得很完整、很顺利、很像结束。如果它只写做了哪些检查 · 很容易让人误以为"所有事情都处理完了"。
所以每次报告必须明确写("没有做什么" 段最小字段)——
没有激活付款。
没有读取或打印密钥。
没有操作生产 DB / env。
没有调用 live paid API。
没有披露专利。
某些外部数据接口授权 · 仍需 老A 单独授权。
某些 SEO / canonical 策略 · 仍未完成。
决策助手 / 内容入口 · 仍不是完整生产 AI 接口。这些"没有做"不是消极 · 是在保护边界。也是在保护我这个人的判断力。
如果没有这部分 · AI 的汇报就会变成一种很危险的"顺利感" —— 这种顺利感 · 是 CH06 漂亮的 Markdown 的另一种姿势。
6. 上线前 5% 的冲动 · 最容易毁掉 95% 的工作
很多人以为检查清单是给机器看的。其实不是。
检查清单首先是给人看的。它的作用是让人在紧张、兴奋、疲劳的时候 · 不靠感觉做决定。
上线前 · 人很容易冲动。
因为你已经做了很多天 · 修了很多 bug · 看了很多页面 · 跑了很多测试。
这个时候最容易想 ——
差不多了 · 发吧。
但网站不是写给自己看的。
一个网站上线以后 · 会被用户、搜索引擎、支付平台、法律边界、旧链接、手机浏览器一起检查。
检查清单不是拖慢速度。
检查清单是防止最后 5% 的冲动毁掉前面 95% 的工作==。
这是 李笑来讲"耐心"和"积累"对我的现实意义。
长期主义不是慢。
长期主义是 —— 关键节点不靠冲动====。
默认 A(CH07)有 8 条硬边界 —— 发布是其中第一条。"差不多了发吧" · 必须永远撞上这条硬边界。
7. 给普通人的最小 8 项 release checklist
如果你也是普通人 · 用 AI 做了一个网站 · 我建议你至少做一个最小检查。不要一上来追求大公司的流程。
先做这 8 件事 ——
| # | 检查层 | 最小问题 |
|---|---|---|
| 1 | 本地 | 能不能 build?有没有明显报错? |
| 2 | 内容 | 页面有没有占位符、错别字、隐私信息、夸大承诺? |
| 3 | 移动端 | 手机上按钮、文字、表格有没有挤在一起? |
| 4 | 路由 | 关键页面是不是 200?有没有死链接? |
| 5 | 合规 | 隐私、条款、退款、AI 边界有没有基本说明? |
| 6 | 支付 | 如果未开通真实付款 · 页面有没有避免误导? |
| 7 | 回滚 | 出问题以后怎么退回来? |
| 8 | 未完成 | 哪些东西还不能说完成? |
最关键的是第 8 条==。
未完成事项必须写出来。
因为很多项目失败 · 不是因为没做事。而是因为做了很多事以后 · 大家忘了哪些事还没完成。
忘了未完成 · 就是把负债当成资产。这是 跳步骤就是负债的开始 在发布前最常见的姿势。
8. 这一章给一个普通人的"按下发布键"观
如果你正在准备按下一个发布键 · 我会建议你 ——
- 先把"跑通了"拆成 5 层 —— 本地 / CI / 改动提议 & main / 线上 smoke / 用户。没拆开 · 你就不知道你在按哪一层的"发布"。
- 接受"==本地 PASS 只是入场券==" —— 入场券能让你进体育馆 · 但不能让你赢比赛。
- 每次报告同时看"做了什么 + 没有做什么" —— 缺一半 · 报告就是漂亮的 Markdown。
- ==发布键永远走 single human-confirm==" —— 永远不让 AI 替你按。这是 默认 A 8 条硬边界的第一条。
- 把检查清单当"==给冲动的自己看==" —— 不是给系统看。系统不会冲动。会冲动的是你 · 我 · 任何熬到深夜的人。
- 接受"上线 ≠ 完成" —— 这是下一章 CH11 要展开的事。上线 · 只是把问题交给真实世界。
- 如果今天就想发 —— 先睡一觉 —— 24 小时内冲动的 80% · 第二天醒来都不再迫切。剩下的 20% · 通常仍然能等。
这一切 · 本质上是一句话 ——
检查越多 · 越要知道每个检查没有覆盖什么。
"已做"和"未做"必须一起写。
发布键永远在人手里 · 不在系统手里。
按下发布键的那一刻 · 是这本书里最高级的"判断"动作 —— 它不能委托。
本篇方法卡
方法 10 · 上线前 5 层验证 + 8 项最小 checklist + "没有做什么" 强制段
任何一次准备发布前 · 走完以下流程 ——
A · 5 层验证拆分 ——
1. 本地 → 只能说"本地没明显错"。
2. CI → 只能说"门禁没拦住"。
3. 改动提议 & main → 只能说"代码进入 main"。
4. 线上 smoke → 只能说"网站活着"。
5. 用户 → 才接近"产品成立"。
每一层不许跨层签字。
B · 8 项最小 checklist(本地 / 内容 / 移动端 / 路由 / 合规 / 支付 / 回滚 / 未完成)
第 8 项最关键 —— 未完成必须写出来。
C · "没有做什么" 强制段 ——
```
没有:付款 / 密钥 / 生产 DB/env / paid API / 专利披露 /
外部接口未授权部分 / SEO 未完成部分 / AI 接口未生产部分。
```
缺这段 · 报告作废。
D · 发布键 = single human-confirm
永远不让 AI 按发布键。永远。
本篇金句
参考与延伸
核心思想锚 ——
- 李笑来《把时间当作朋友》—— 长期主义在关键节点的真正含义
- 李笑来《自学是门手艺》—— 把"完成"拆成可观察的层
- Atul Gawande《清单革命》—— 检查清单是给人看的 · 不是给机器看的
- Daniel Kahneman《思考·快与慢》—— 疲劳时关掉慢系统 · 必须靠外部清单兜底
- 老A 本书 CH05《AI 三档使用法》—— 发布键属于刹车 · 永远不交给自动挡
- 老A 本书 CH06《漂亮的 Markdown / 假完成》—— 报告"顺利感"的解药
- 老A 本书 CH07《默认 A 的硬边界》—— 发布是第一条硬边界
reader q&a
读者留言
留言会先进入人工审核。请不要写电话、住址、证件号、合同全文或他人隐私;本站回复只做信息整理, 不构成法律、税务、投资、医疗或房地产交易建议。
还没有公开留言。你可以提出一个具体问题,审核后会显示在这里。
为了减少广告、辱骂和隐私泄露,留言需要先登录。公开显示前仍会人工审核。