JianFeeeee
33bb7a98b2
fix(zcode): 日期块对齐参考的两条规则(幂等 + 只看第一条),修 off-by-one
通读参考 zcode-identity.ts 的 withContextPrefix 后发现我的实现漏了两条官方行为,
且其中一条藏着真实 bug:
## ① ★ 幂等判断 off-by-one(真 bug)
`"<system-reminder>"` 是 **17** 个字符,而我写的是 `c:sub(1, 16) == SR`
—— 判断**永远为假** ⇒ 幂等完全失效:同一请求重试/多次 transform 时日期块
会叠加成多层,改变 content 的前缀结构(上游检查的正是这个结构)。
修法:用 `#SR` 算长度,不写死数字。
## ② 只看**第一条**消息,且它必须 role == "user"
我原来实现成「往后扫第一个 user 消息」。官方行为是:只处理 `messages[0]`,
且若它不是 user 就**完全不动** —— 不是去找后面那条 user。已对齐。
## ③ 其它类型兜底
参考对非字符串/非数组的 content 也会置为 `[prefix]`,照做。
判据 2 条(新增):
- TestZcodeContextPrefixIsIdempotent 已含日期块时不重复插
- TestZcodeContextPrefixOnlyTouchesFirstMessage 首条非 user 时不动、首条 user 时插入
变异 2/2 咬住:把 #SR 改回写死的 16 → 报红;去掉幂等判断 → 报红。
★ 我自己在写这条判据时又犯了一个错并当场自查出来:断言「文本 content 应保持
字符串」,而 anthropic 基座把文本转成块数组是**正常**的协议转换行为 —— 差点把
正确的实现判成错。判据要验的是「**日期块**有没有被插进来」这个事实,不是
content 的容器类型。
验证:internal/core 335s + internal/gateway 207s 全绿。
2026-10-16 01:13:24 +08:00
..
2026-10-14 16:52:58 +08:00
2026-10-14 16:52:58 +08:00
2026-10-14 16:52:58 +08:00
2026-10-14 20:01:24 +08:00
2026-10-14 20:01:24 +08:00
2026-10-14 16:52:58 +08:00
2026-10-14 16:52:58 +08:00
2026-10-14 16:52:58 +08:00
2026-10-14 16:52:58 +08:00
2026-10-14 20:01:24 +08:00
2026-10-14 16:52:58 +08:00
2026-10-16 00:56:35 +08:00
2026-10-14 16:52:58 +08:00
2026-10-14 16:52:58 +08:00
2026-10-14 16:52:58 +08:00
2026-10-14 16:52:58 +08:00
2026-10-11 20:50:52 +08:00
2026-10-14 20:01:24 +08:00
2026-10-14 16:52:58 +08:00
2026-10-14 16:52:58 +08:00
2026-10-14 16:52:58 +08:00
2026-10-14 16:52:58 +08:00
2026-10-14 16:52:58 +08:00
2026-10-14 16:52:58 +08:00
2026-10-13 07:41:56 +08:00
2026-10-15 22:43:58 +08:00
2026-10-14 16:52:58 +08:00
2026-10-14 16:52:58 +08:00
2026-10-14 16:52:58 +08:00
2026-10-14 20:01:24 +08:00
2026-10-14 16:52:58 +08:00
2026-10-14 16:52:58 +08:00
2026-10-14 16:52:58 +08:00
2026-10-14 16:52:58 +08:00
2026-10-14 16:52:58 +08:00
2026-10-14 20:12:10 +08:00
2026-10-14 16:52:58 +08:00
2026-10-14 16:52:58 +08:00
2026-10-14 16:52:58 +08:00
2026-10-14 16:52:58 +08:00
2026-10-16 00:56:35 +08:00
2026-10-14 16:52:58 +08:00
2026-10-14 16:52:58 +08:00
2026-10-16 00:56:35 +08:00
2026-10-15 08:23:25 +08:00
2026-10-15 08:23:25 +08:00
2026-10-15 20:31:45 +08:00
2026-10-15 08:23:25 +08:00
2026-10-16 01:13:24 +08:00
2026-10-14 16:52:58 +08:00
2026-10-14 16:52:58 +08:00
2026-10-14 16:52:58 +08:00
2026-08-13 12:25:07 +08:00
2026-10-11 20:50:52 +08:00
2026-10-11 20:50:52 +08:00
2026-10-14 16:52:58 +08:00
2026-10-15 08:23:25 +08:00
2026-10-14 16:52:58 +08:00
2026-10-14 16:52:58 +08:00
2026-10-11 13:52:29 +08:00
2026-10-03 08:01:37 +08:00
2026-10-03 07:45:54 +08:00
2026-10-14 16:52:58 +08:00
2026-10-07 17:37:22 +08:00
2026-09-28 22:52:51 +08:00
2026-10-14 16:52:58 +08:00