fix(memory-b): W11f —— aborted / default 零命中时不再承诺条目
接你备好的四个 patch(ready-lib / ready-test / README / docs),
应用前逐个审过内容,dry-run 干净,应用后 md5 与你给的期望值一致:
lib/recall.js c8fdffd25d5340291fadf6cb26e1741f
test/phase-b-h.test.js c06685abb7672fa806ca37e0d1cb8947
README.md 3c183b045dd7de4a54338ed9d01b3738
问题(我上一轮修 embed_error 时只修了那一个分支)
aborted 与 default: 在零命中时仍说「matches below are …」,而下面没有条目。
aborted + 零命中不是边角 —— 用户点停止、且这条查询本来就查不到东西,
是取消最常见的形态。
default: 更糟:它是未来任何未知模式**唯一**会走的路,
最不该在这里开始编。
修法(补丁采用)
把「有没有条目」只问一次,四个分支共用:
const nothing = !Array.isArray(hits) || hits.length === 0
default 用「nothing was found, so treat this as "unknown", not "absent"」——
把「没搜到 ≠ 没有」这条口径落在**兜底分支**上,
而不是每加一个模式才记得补一次。
W11f 判据:表驱动、双向
遍历 [undefined, no_embedder, embed_error, aborted, vector_ready_unused,
future_mode_a, future_mode_b]
零命中:notice 非空时不得含 matches below|below are|entries below
有条目:notice 非空时必须指向条目,且不得说 found nothing
第二条以前完全没人管 —— W11/W11c 只查「出现 FAILED / cancelled」,
不查它是否指向了真实存在的条目。
两条变异各自独立(实测,不是「都红就算数」)
M-A 只删 aborted 分叉
not ok 57 - W11f
not ok 58 - W11f†
ok 59 - W11f†b ← default 那半仍绿
M-B 只删 default 分叉
not ok 57 - W11f
ok 58 - W11f† ← aborted 那半仍绿
not ok 59 - W11f†b
若两条变异下红的是同一批,那就是重复计数(W11d†a/†b 的老毛病)。
验证
- npm test 118/118
- npm run check 10/10
- 连跑 8 次全量,0 失败(按你的要求超过 5 次)
- 变异 runner 零残留:/tmp/mut-?????? 前后均为 0
(/tmp/mut-probe 是 10:17 的历史副本,与本轮无关,未动)
未 amend / 未 force push,80d188e 之后是新提交。