这个月我们抓到两次:自动检查报「通过」,而它其实一个对象都没检查。
这件事比「我们又建了几道闸」更值得讲。
而且它没有算错——它逐字执行了自己的判据。
问题出在判据够不着的地方。
下面用这个月一次真实的走查,从头走一遍。
这时候,负责检查超链接完整性的那道自动检查是绿的。
它刚刚跑过,没有报任何问题。
看起来一切正常
它一个对象都没检查。8 处引用整批落在判据的射程之外。
「0 个问题」和「0 个检查对象」,在报告上长得几乎一样。
判据是这么写的:「同一个文本块里有没有出现溯源字样」。
而 PRD 卡里的 Source 段,实际是这样长的——
标题和内容行是兄弟关系,不是父子。⇒ 真正要检查的那些行,从来没进过分母。
补完射程,我顺手写了条新规矩:凡是带链接的文字,必须是青色 + 下划线。
几十分钟后,在 Journey 卡上实测到这两行——(下图是 Figma 里的实际渲染,不是示意)
两行的样式完全一样:同样的青色、同样的下划线。
上面那行点得动,下面那行点不动——肉眼分不出来。
上图按 Figma 里的实际样式重绘(青色 + 下划线),⛔ 不是截图。
我只规定了「有链接的该长什么样」,
没规定「长成链接样子的必须真有链接」。
为什么这三个数要一起看:只看头和尾,两次都是「绿」,什么也证明不了。中间那次红,才是这道检查真的在干活的唯一证据。一道从来没红过的检查,和一道坏掉的检查,在报告上长得一样。
所以写完任何一条检查规则,跑这三个问法——
⛔ 要问的不是「这条判据会不会算错」。
checkedUnits=0 和 findings=0 是两件事。这套流程有条硬规矩:所有数走同一张取数单,它出数之前先自证口径——拿历史上已经核过的几个数当标尺,对不上就不出数。
自证没过 ⇒ 整份材料的数当场判为不可用,一个数都没印。
带着漂了的口径出材料,比没有材料更坏。
那条自证写着「窗口起点取今天,应该至少看得见最新那次提交」,注释里管它叫恒真关系。
它实际量的是——今天有没有人提交过代码。
那天上午还没人提交,于是它红了。红的是判据自己,不是数据。
想同时做到「永远成立」和「出错时能报警」——这两件在这里做不到,因为它们的差随时刻变。
一条锚在「最新提交自己那天」,永远成立;另一条读自己的源码,检查每个取日期的地方有没有走对函数。
验的方式:分别注入两种故障 —— 一种只让第一条红,另一种只让第二条红。互不替代,这才说明拆得有必要。
上一期页面上有两个数,这次想复现,四个候选口径算出来的值没有一个对得上。
挑一个最接近的填上去。反正差不多。
原样印 UNKNOWN,并写明「这不代表上期那个数是错的,是口径没被记下来」。
要让它变成数字,得先把口径钉下来、补一个历史标尺。
在那之前,空着比填一个像的更有用。
为什么把「否掉的」也放进来:只报喜的材料没法判断可信度。这一条和第一节是同一件事——能说出自己哪里不成立,前面那些「成立」才有分量。
分母是怎么来的 · 反过来那一侧谁管 · 是在真实结构上验的吗
这三问不只对自动检查有用——对任何「我已经检查过了」都有用。