交付前实测证伪律
首次记录:2026-07-14 来源:vpn-guard 全链路(见 2026-07-14_vpn-guard从工具到宣传片_全链路复盘_v1)中反复触发。 状态:规律已确立,凡”某方案应该能行”的假设都适用;跨平台/跨环境假设尤其。
一句话
别交付未验证的”应该能行”。任何”X 应该有效”的假设,交付前先写最小探针去证伪它——尤其跨平台、跨环境、跨版本的行为假设,它们最爱静默失效。
宁可花两分钟证伪,也不要交付一个”看起来对、实际不工作”的假方案——后者是最贵的债,因为它会带着你的信任一起交付出去。
本次三次触发(同一律,三种结局)
| 假设 | 实测 | 结局 |
|---|---|---|
TZ 环境变量能让 Chrome 改时区(Linux/macOS 惯例) | 写探针 headless dump-dom:设 TZ=Asia/Tokyo 后 Chrome 仍报 Asia/Shanghai | 证伪 → 弃掉假方案,改 tzutil 切系统时区(真有效,端到端验证过) |
| Windows SAPI 能本地出中文 TTS | System.Speech 直接抛 PlatformNotSupportedException(沙箱) | 证伪 → 转 edge-tts(免费神经 TTS,测一句确认可用再全量) |
| git push 30MB 已完成 | git ls-remote 查远程分支为空 | 未完成 → 后台重推 + 核实远程文件树才收口 |
三次的共同点:没有一次是”我觉得应该行就交付”。头一次若不测,就会交付一个静默失效的时区启动器;那是最典型的、会带着信任一起交付的假方案。
口诀 / 判据
- “应该”是信号词:当你想说”这个应该能行/应该已经好了”,那正是该写探针的时刻。
- 最小探针:能证伪就行,不必完整——一句
dump-dom、一次ls-remote、一句 TTS。 - 跨环境必测:平台惯例(POSIX 的 TZ)、版本行为、沙箱限制、缓存(如
[TimeZoneInfo]::Local同进程缓存)——都爱在你没测的地方失效。 - 新起进程验证副作用:改了系统级状态(时区/环境)要用新进程验证,别被当前进程的缓存骗了。
与姊妹律的分工(三段式)
同一”不轻信”的纪律,按时间点分三段,各有对口文档:
- 交付前:本律——证伪假设(“这方案真的有效吗?”)
- 交付后:Claude完成报告核查心法 / Windows下编码与DPI的所见非真相——核查产出(“我做出来的真是对的吗?“,程序化字节级核查,不信肉眼)
- 事后:复盘事实先行原则——冻结事实再判断(“我以为的成功真是成功吗?”)
三段合起来才是完整的”不把未验证当已验证”。
关联文档
- ⚠️ 变通方案不等于故障点_v1 —— 同族另一半:本律管”别把没测过的方案当能行”,那条管”别把从他人变通方案反推出的结论当事实”
- 2026-07-14_vpn-guard从工具到宣传片_全链路复盘_v1 —— 本律的来源全链路复盘
- Claude完成报告核查心法 · Windows下编码与DPI的所见非真相 —— 交付后核查
- 复盘事实先行原则 —— 事后事实先行
- 桌面应用打磨发布闭环复盘_工位池塘v0.5.0_v1 —— 其”已验证 vs 未验证”交付诚实表是同一纪律的表格化
- 2026-07-16_LibreCanvas开源画布_单日十版从立项到v1.4复盘_v1 —— 再验(2026-07-16):无真 key 时 mock 只证接线,“真实生成未验证”显式写进事实冻结区并列为宣发前置;同族衍生 伪开源三查律_v1(投入前证伪授权前提)
- 飞书应用发群消息_免webhook直发_v1 —— 同族”读探测先行”:进有副作用的发消息前,先用只读接口验证权限与在群
- 2026-07-20_朱元璋K线人生_历史可视化迭代复盘_v1 —— 再验(2026-07-20):提交不等于上线,必须同时核对 CI 结论、作品页 200、首页入口和关键运行时接口。
- ⭐ OpenAI兼容止于对话端点_多提供商视频接口分流与真key首测_v1 —— 强再验(2026-07-20):真 key 首测一次炸出 8 个 mock 看不见的问题;新增变体「无凭证时官方文档也只是二手证据,所有接口行为都仍是未验证假设」,以及「标识符(模型名/枚举值)不许猜,要向接口拉权威列表」
- 内测反馈渠道上线_匿名兜底与422探针验证_v1 —— 交付后变体(2026-07-24):线上验证新接口用「必失败的校验请求」当最小探针,422 即证路由/重启/校验三者生效,零脏数据
- ⭐ 零作品的比赛_界面演完不等于链路存在_v1 —— 强再验(2026-07-25):界面完整度是最会骗人的「应该能行」,它不是待验证的假设、是已经长得像成功的幻觉(报名/进度条/倒计时全在,7 场比赛 17 人次报名,
submissions表 0 行);对口探针 = 先写下「这功能跑完数据库该多出什么」再直接查那张表 - ⭐ 全站文字截断体检_检测工具本身要先被证伪_v1 —— 同族另一半(2026-07-26):本律管「别把没验证过的方案当能行」,那篇管「别把没验证过的检测工具的输出当事实」——体检脚本吐出的缺陷清单也是待证伪的假设(一个拍脑袋的箭头宽度常数把 8 个正常元素判成缺陷,还据此改了一处没坏的代码);标定法 = 先跑一个已知正常样本和一个已知损坏样本,确认工具两端都判对
- ⚠️ ping通不等于路通_fake-ip假信号与节点带宽实测选型_v1 —— 再验(2026-07-27):「延迟低所以带宽好」是典型的未验证方案,实测直接击穿——延迟排第 8、看起来完全正常的节点带宽垫底(2.72 Mbps);更关键的是本次测量工具自身两度失效(探针请求超限被 403,14 个正常节点全报 0;脚本编码致中文组名乱码,切换静默失效但结果整齐),是上一条「检测工具先证伪」的跨项目二次验证——证伪的前提是先证伪工具本身
- 2026-07-28_Ultra模式个人作品集网站_从附件到部署闭环复盘_v1 —— 应用案例:测试文件存在不算通过、项目已关联不算上线;重跑构建测试并读取 Sites active 状态、版本与 live URL 后才写成交付闭环。
- ⚠️ 打磨不等于校验律_v1 —— 同族另一半(2026-07-30):本律管「别把没测过的方案当能行」,那条管「别把打磨过的内容当已校验」——给一块画错的地图插图写了讲究的四角避让算法,19 天里维护 3 次、没人问过「这 9 条线画对了吗」;打磨投入的注意力会被错记成「我检查过它」,与「界面完整度最会骗人」同源(见 2026-07-30_风眼九段线问题地图事故复盘_v1)
- ⭐⭐ 成稿链接存进库没人读_写入方不等于展示方_v1 —— 再验(2026-07-30):双源字段(真相源在 git、运行时在库)两边一致时看不出谁在生效,验收必须造出「只有库里有」那一格才算证伪过;同篇的「写入方不等于展示方」是 零作品的比赛_界面演完不等于链路存在_v1 的镜像——那次问「跑完该多出什么数据」,这次要问「库里已经有的,页面读了吗」