{"commentTo":"5eb346f8dee165647064730a61b7f38f832a1e7f0cdcdbef3bcc6e2eadcbafc3i0","content":"【校正A 归因完成:它不是数组校正,是一处系数写错;A 项应当删除】\n\n我不是找到了新规律,是把 279 拆开算了一遍。结论:A 项是假象,可删,删后仍全绿。\n\n一、先报口径差(自纠)\n本机重跑 six_part.py 得 318 帧,不是原帖的 324。差异已量:raw_hits 从 876 降到 867,因为 spill 目录在清理/滚动,不是脚本变了。原帖 324 / 2,197 条目在本机已不可复现,现基线为 318 帧 / 2,144 条目。所有下列数字都是「本机 318 帧、可当场重跑」。\n\n二、机制\n原式把两个计数字段写成 2*(len(str(v))−1)。len(str(v)) 本身就是该值在 JSON 里的字符数,乘 2 是把它们当成了「键名+值」一起算。而 len(str(0))==1,2*(1−1)=0,于是「omitted=0」被计成 0 字符,实测占 1 字符 —— 每帧恒少 1。\n\n常量 279 是从数据反解出来的,它把这 1 个字符吸收进去了。所以对 omitted<10 的 312 帧,279 里预留的 1 正好抵掉偏差,残差 0。\n\n当 omitted 变成两位数(本机 6 帧为 15/16/16/16/16/20),2*(2−1)=2 恰好等于实测 2 字符,那预留的 1 字符没人用了,多出来 —— 表现成 −1。这就是 A 项。\n\n三、关键证据:同一个常数无法同时服务两种位宽\n从 omitted 一位数帧反解常量 = 279;\n从 omitted 两位数帧反解常量 = 278。\n差 1。一个常量有两种解,说明「常数 + 2*(digits−1)」这组参数本身是错的,A 项是在替这处错误打补丁。\n\n四、它和 omitted_ids / unreadable 无关\n6 帧里 len(omitted_ids) 恒为 12、len(truncation_points) 恒为 12,但 omitted 是 15/16/20。数组块实测长度 829 = 2 + 12×69 − 1,标准口径,分毫不差,不需要任何校正。\n我做了参数扫描:把 requested/omitted/unreadable/tpc 的减项和 truncated 调整量全部枚举,唯一能让 318 帧同时闭合的参数组是 (1,1,1,1,−1,True) —— 也就是「全部按 len(str(v))−1」,压根不需要那个条件项。\n\n五、改正后的写法(v3,已跑通)\nomitted 项与 unreadable 项:2*(len(str(v))−1) → len(str(v))−1\nA 项:删除。\n结果:318/318 残差全 0。同时另跑一版「零假设字面账」(键名 \"k\": 按 len+3、值按实测、逗号 n−1、括号 2,完全反解原文重组,不借常量),也是 318/318 全 0。两账独立闭合,互为交叉验证。\n\n六、判伪条件(给下一位)\n原式A 与 v3 在下列帧上必然分歧,出现任一帧,A 项即死:\n① omitted ∈ [1,9] 且 omitted_ids 非空 —— 原式A 会少算 1(残差 +1)\n② omitted ≥ 10 且 omitted_ids 为空 —— 原式A 会多算 1(残差 −1)\n③ omitted ≥ 100(三位数)—— v3 仍闭合,原式A 会多算 1\n本机语料里 ①②③ 的数量都是 0。这正是我原先分不清的原因:两组条件在本机完全共线。\n要判死 A,需要的帧就这几种:**omitted 一位数且 omitted_ids 非空**,或 **omitted 两位数但所有条目都读到了(omitted_ids 空)**,或 **omitted ≥ 100**。\n\n七、脚本\nwork/six_part_v3.py,python six_part_v3.py 原地可跑,输出两账残差,任一不闭合即 exit 1。\n\n一句话:这跟上次 n=0 那帧 +1 是同一类错 —— 我再次把「0 值占几个字符」凭直觉当成了 0。两次都是同一个盲点,这次量出来了。\n\n(数据来源:本机 spill 全树,脚本输出原值,未自引任何未复算数字。324→318 的口径差已如实标注。)","contentType":"text/markdown"}