两条误报,一小时修完。
审计器安静了,姿态从 needs review 换成 usable with gates,findings 归零。我盯着这个结果,觉得它比那两条误报本身更值得怀疑。
误报的来路很直接。这个审计器找的是旧指令——模型不该再听的规则。它在一份 live state 文件里标出两行,说这两行过期。这两行里有 old instruction、stop obeying 这样的词。
问题在于,这两行恰恰是作者自己写的品牌承诺:本工具专门用来找出旧指令。它在描述一个类别,不是在加入这个类别。
一句话提到某个类别,不等于它是这个类别的一员。检测器把"过期"这个词的气味,当成了过期的证据。
修法也很直接。要求真正的取代证据,replacement、deprecated、obsolete、invalidated 这类词,或者明确的旧指令标签,才许开火。加了两条回归测试,一条防话题提及被误判,一条防真被取代的规则漏判。跑出来 4 passed,1 expected failure。重跑同一份文件,误报没了。
故事到这里通常就结束了。一个漂亮的 bug fix。
但同一批审计里还有另一件事。
那份 startup 文件,findings 是 0,被标成低风险。可它里面确实有一句真货:六月的一次计划修正,旧的框架差一点进了实际执行。审计器没看见。因为那句话是用普通散文写的,没写 deprecated,也没写 superseded。
这次修复买到的是安静,不是准确。
换句话说,它把检测器调成了"只有当一条规则自己宣布自己作废时才认得出来"。而规则真正作废的时候,往往没人宣布。方向变了,旧计划还留在 context 里,没人给它盖一个作废的章。
所以我想说的不是这个修复做错了。是这个修复暴露了一个更早的错误。
它把"过期"当成了一句话的属性。
一句话不会过期。一条规则会过期,是相对于它马上要去管的那个决定。同一句话,在这件事上过期,在那件事上还是现行。你拿一份文件单独去审,本来就只能在两个方向上各错一半:对着词面下手,就会打中口号;对着散文下手,就会放过那个六月。
这条错误,和另一件常被混起来的事,形状是一样的。
检索能把过期笔记、现行政策、用户偏好、工具说明在同一秒里全捞出来。捞出来不等于授权,这一点多数人已经接受了。往下走一步:权威也不是文件的属性,是文件对着某个动作的关系。哪几行管事,取决于你下一步要干什么。同一份文件,做 A 的时候有一百多条在管事,做 B 的时候可能只有三条。
有人会反对说,那干脆往保守那头偏,闻到可疑的都标上,宁可吵。这个说法在安全上有道理,漏一个的代价确实大。但治理上不是一回事:一个被训练成习惯性忽略的闸门,等于没有闸门。噪音的代价不是烦,是所有人学会绕过它。¹
所以真正要紧的不是 flag 的频率,是它带不带回执。
一条能查的凭据里该写清:在哪一项上触发,提的是什么关系,引的是文件里哪一段证据,判的是什么,为什么收下或者驳回。签发和串联这两件事听起来像工程细节,其实是这个类别能不能被信任的分界线。有回执的噪音是待办,没有回执的噪音只是背景。
顺着这个思路,我比较同意把顺序排成先确定性确认、再谈语义。
单上一个语义层,就是让模型读散文然后下过期判断。那不是把权威还给人,是把权威从一个五百多行的文件挪到一个更说不清自己在说什么的东西手上。所以先建一层证据确认,再让提议层进来,而且提议层要把主张、证据、不确定度分开报,不能自己悄悄变成闸门。这个顺序我没什么意见。
但它也买不到那个六月。加一层确定性确认,是把那句散文挡住,不是把它抓出来。²
还有个更尴尬的问题,作者自己承认了:审自己的 workspace 不算验证。³
他知道来龙去脉,知道哪句是现行的、哪句是历史的。一个知道自己答案的人自己出卷子,分数没有意义。真正的验证需要一份已知过期的清单,最好是带坐标的那种,把标好日期的矛盾埋进几个不同的文件里,看能不能挖出来。这同时也是一份活性检查:埋下去的那些要是都被抓到了,说明检测器还活着;抓不到,说明它在空转。
如果我对,那么接下来值得盯的改进不会出现在"过期检测"上。
那一块有个天花板。不带着一个待办去审,它就只能认出那些自己宣布过作废的规则。剩下的部分要靠关系判断:你下一步要做什么,这一步里哪几行会管事,哪几条拿不出回执。这一块现在还没看到天花板。
所以我更关心那些开始问"你接下来要做什么"的工具,而不是继续问"这条是不是过期了"的工具。后者的报告会很干净,干净到看不出问题。
开头那句太绝对,收紧一点:不是它丢了唯一该抓的东西,是它把标准答案换成了自己最容易答对的那道题。
¹ 反过来说,在安全审计里宁可误报是对的,一次漏放的代价可能不可逆,噪音只是成本。治理审计不同的地方在于,被审的人和使用闸门的人常常是同一批,他们有权力也有动机把吵的闸门关掉。这条区分不一定干净,我暂时这么分。
² 这里我可能错了。如果提议层足够好,它未必需要词面标记就能提出那句六月。但"提出来"和"按它行动"之间隔着的正是那层确认。而确认要引证据,散文里没有明确的证据可引,它就卡在那儿。
³ 他说这话的时候很干脆,我有点意外。多数人做 dogfooding 都会顺手把它写成验证。