JianFeeeee
258b88da22
修复: 判据 ① 的**分母**混着没比过的文件 —— scanned++ 在 readFile 之前,读失败静默跳过
与 A 条(`catch { return; }` 吞 ENOENT ⇒ 报"一致")**同一族**:分母里混着没真比过的
对象 ⇒ 报出来的 `0` 不是闭合的。这条是**我自己写的**代码里的同形错误。
## 形状
scanned++; // ← 先加分母
try { text = String(readFile(full,'utf8')); } catch { continue; } // ← 读不到就静默跳过
if (text.includes(REPO)) offenders.push(full);
⇒ 一个「文件存在、但读不到」(EACCES / 悬空软链 / I/O 错)**被计入"比了 N 个",
却从没被 grep 过**,note 照样报"比了 N 个文件、命中 0"。
实测复现(喂一个"存在但读抛 EACCES"的文件):note 说"比了 **2** 个",真正被 grep 的只有 **1** 个。
## 修法
1. `scanned++` 移到 `readFile` **成功之后** ⇒ 分母 = 真读到内容的条数;
2. 读失败的单列 `unreadable` 并**判红** —— "我没能检查它"与"它没问题"是两件事;
3. 失败 note 把三类分清楚(引用仓库的 / 软链指向仓库的 / **我没读到的**),
第三类点明"这几条没被检查",否则读者会把它读成"它引用了仓库"。
## 变异验证(两边都跑)
变异①`scanned++` 挪回读之前(旧语义)⇒ 新判据**红**;
变异②读失败**静默跳过**(既不红也不计)⇒ 新判据**红**。
修后自检 66 通过 / 3 失败,那 3 条是**既有线上红**(①b 权限 3 文件 600↔644、
⑥ 二进制含 63 处源码路径),与本次改动无关。
## 顺带:把 §六 那条推理写进注释
`DEPLOY_ROOT` **故意硬编码**、不读 `AGENTMAIL_PREFIX` —— 因为前缀写错会以**红**暴露
(② 与 `configNeedle` 都落到 `else fail('指向别处')`),是 **loud failure** 而非假绿。
并写明:真要收应从 `current` 软链推导,而不是再加一个三方要同步的常量。
★ 另记一条口径(pi §一 给的验收是 133,今天实测是 **135**):判据数的分母会随机器
变化(这里是 70 普通文件 + 65 软链),**所以验收标准不该钉死在某个绝对值上**,
该钉的是"分母 = 真读到内容的条数"这个**关系**。
2026-09-21 04:54:45 +08:00
..
2026-09-15 14:12:48 +08:00
2026-09-14 08:38:33 +08:00
2026-09-13 11:06:01 +08:00
2026-09-15 07:00:35 +08:00
2026-09-21 04:54:45 +08:00
2026-09-18 04:07:26 +08:00
2026-09-12 11:36:25 +08:00
2026-09-14 23:33:11 +08:00
2026-09-14 20:35:01 +08:00
2026-09-20 05:22:42 +08:00
2026-09-14 20:53:54 +08:00
2026-09-14 15:51:40 +08:00
2026-09-15 11:21:00 +08:00
2026-09-14 23:33:11 +08:00
2026-09-14 21:26:51 +08:00
2026-09-06 15:18:06 +08:00
2026-09-02 20:05:51 +08:00
2026-09-13 11:06:01 +08:00
2026-09-13 11:06:01 +08:00
2026-09-14 08:38:33 +08:00