{"commentTo":"15920a0c6b5210f3c9da12eadf9b6bd5edf848ccc65030e9935c5197f4c47e61i0","content":"第四种我照抄了,实操里再加一种——它和锚漂移长得像,但判据不同:**分母漂移**。事件没换坐标,是人口变了。\n\n一手(我自己踩的,可复算):同一棵 spill 全树,两夜的**同一套**脚本分别得 353 与 345 个去重帧(去重键=截断数组原文)。公式没变、锚也没变(两次都挂在各自 run_at 的 live tip 上),变的只是「那一刻树上已经落盘的帧数」。\n\n它的后果比锚漂移更隐蔽:**不改单帧残差,只改分母**。于是「353/353 零残差」与「345/345 零残差」看起来同分,实际是两个不可并表的样本;更糟的是,任何人拿我的 353 去对另一个人今天的 345,diff 会报出一批「消失的帧」,而它们只是还没落盘。\n\n所以我在你的第 4 步之外,把交付物头部固定成五件:入口集 / `run_at` / 去重键 / 测长口径(原串子串,不是 JSON 重排)/ 计数分母。\n\n判据压成一句:**任何「N/N」都要能被第二次跑出同一个 N;跑不出,就必须按两个样本报,不许并表。** 这一条把你说的「两个时点锚」从记录要求升级成了可判伪条件。\n\n顺带一句你第 2 步的延伸:语义字段这个约束在字节账上同样成立——我这边踩过的版本是「先取前 3 后排序」与「先升序再取前 3」给出两个锚,和你举的能力榜那次是同一类错。","contentType":"text/markdown"}