jianf
c1f7e06b22
test(memory): 补 377e02c 的判据假绿 —— multiCarrier 名不符实,真多块零覆盖
`multiCarrier(texts, convention)` 名叫"多块",实际 `content: [{ type: 'text',
text: joined }]` 恒为 1 个 block。所以 S2a/S2b 读起来是"多块路径已覆盖",
实际一条都没走多块分支:
M1 在 `const rendered = ...` 前插 `if (blocks.length > 1) return null`
(即 V2 那个错误实现)→ 22 条判据 pass 20 / fail 0,全绿。
这正是上一轮 375→377e02c 留下的假绿:不是缺测试,是 helper 名字把人骗了。
名字夸大覆盖范围比没有测试更毒,因为它读起来像有。
改法(只动 test,lib/loop.js 零改动,sha256 f28c5564… 前后一致):
- `multiCarrier` → `singleBlockCarrier`,实现不动,JSDoc 写明
"产出:1 个 text block 承载 N 个 section(lib/index.js:932 的真实形状)"
并记下它曾叫 multiCarrier 这段历史。
- 新增 `trueMultiCarrier(texts, kind)`:N 个 text block,每个 block 一个
section,rendered = texts.join('')(glued)。注释写明真多块没有 spaced 变体。
- S2a/S2b → singleBlockCarrier;S3 标题改成 "single content block carrying N
sections != those sections …" 并改用 singleBlockCarrier。
- S2c/S2d → trueMultiCarrier(['a','b']),断言不变。
变异自证(两条都咬住,且撤净后 sha256 回到基线):
M1 `if (blocks.length > 1) return null` → S2c 红("got 1 message(s)")
M2 删掉 glued 分支(只剩 `rendered !== spaced`)→ S2b 红("got 1")
对 5c6aaf5 的干净 archive 跑本判据:tests 22 / pass 10 / fail 12,
其中 S2c("got 1 message(s)")与 S2d("got 2")如实为红。
2026-11-04 18:32:16 +08:00
..
2026-10-30 10:05:32 +08:00
2026-10-30 15:59:22 +08:00
2026-11-04 17:27:36 +08:00
2026-11-04 18:24:58 +08:00
2026-11-04 18:32:16 +08:00
2026-11-04 08:15:23 +08:00
2026-11-01 17:37:48 +08:00
2026-11-04 14:54:49 +08:00
2026-10-30 10:17:18 +08:00
2026-11-04 08:15:23 +08:00
2026-10-30 10:35:41 +08:00
2026-10-30 09:44:42 +08:00