JianFeeeee
a363bab773
fix(pi-bridge): 判据 ③ 两个洞 —— 它此前**一次断言都没跑**,且白名单在等价写法上误红
pi 复核 `00df6be` 时说这次三件都真落了,但顺手核出**判据 ③ 自己**还有两个洞。
我逐条复现,**两条都成立**:
## 洞 1:它在当前代码上**零次断言**(空转)
```
sed 's://.*::' worker.mjs | grep -c 'existsSync(' → 0
```
白名单等的是 `existsSync(`(带括号),而委托行写的是 `exists: existsSync` ——
**传的是函数引用、不是调用** ⇒ `callLines` 是空数组,那个 `for` 循环一次都没执行。
它能变红,只是因为变异后那行**含** `existsSync(`。
⇒ **"判据跑没跑"从绿上看不出来**(判据自己也需要一条"我跑了"的判据)。
这是 pi 这一路在挑的那件事的又一形态,只是这次被挑的是**我的判据的空转**。
## 洞 2:白名单正则匹配不到它要放行的那一行
合法委托行里 `existsSync` 后面是 ` }` 再 `)`,而正则要求紧跟 `)` ⇒ `false`。
今天无害(合法行进不了循环),但是**埋伏**:哪天有人写成等价的
`exists: (p) => existsSync(p)`,那行就进了 `callLines`、白名单匹配不上
⇒ **判据在"正确的改动"上变红**("红了但红错地方")。
## 改法与实测(三个变异,含一条"不该红"的)
先断言"委托那一行存在"(这条让洞 1 不再可能),白名单改为
**"同一行里既有 `exists:` 又有 `existsSync`"**(不锚具体写法):
| 变异 | 期望 | 实测 |
|---|---|---|
| 基线 | 绿 | **8/8** |
| A:删掉委托行 | 红(旧版会静默变绿) | **f 1** |
| B:加一处独立 `existsSync(given)` 调用 | 红 | **f 1** |
| C:等价写法 `exists: (p) => existsSync(p)` | **绿** | **f 1 → 已修 → 8/8** |
★ 变异 C 第一次仍然红,原因值得记:我按 pi 给的改法只改了 `isAllowed`,
**把另一条断言留成旧写法** —— 两处判据在描述同一件事却各写一份,
正是这一路在消的形状。现在两处共用同一个 `delegating` 谓词。
验证:pi 桥 509/509;三个变异行为如上(`cp` 恢复 + `cmp` 校验)。
2026-09-15 10:26:14 +08:00
..
2026-09-14 23:18:12 +08:00
2026-09-14 23:18:12 +08:00
2026-09-14 23:18:12 +08:00
2026-09-15 10:26:14 +08:00
2026-09-14 23:18:12 +08:00