JianFeeeee
b871c0c713
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:11 +08:00
..
2026-10-15 20:30:33 +08:00
2026-10-16 01:13:11 +08:00
2026-10-15 20:30:33 +08:00
2026-10-15 20:30:33 +08:00
2026-10-13 22:51:50 +08:00
2026-10-13 22:34:13 +08:00
2026-10-13 23:42:04 +08:00
2026-10-06 15:02:42 +08:00
2026-10-12 16:37:23 +08:00
2026-10-11 09:23:34 +08:00
2026-10-11 09:23:34 +08:00
2026-10-02 12:41:35 +08:00
2026-10-13 13:42:57 +08:00
2026-10-13 13:42:57 +08:00
2026-10-13 23:42:04 +08:00
2026-10-13 23:28:27 +08:00
2026-10-12 12:32:10 +08:00
2026-10-13 13:42:57 +08:00
2026-10-02 10:45:20 +08:00
2026-10-13 13:42:57 +08:00
2026-10-02 14:07:44 +08:00
2026-10-13 06:57:28 +08:00
2026-10-13 06:57:28 +08:00
2026-10-14 10:55:50 +08:00
2026-10-13 13:42:57 +08:00
2026-10-04 14:50:46 +08:00
2026-10-11 09:35:32 +08:00
2026-10-05 08:17:57 +08:00
2026-10-05 08:17:57 +08:00
2026-10-11 13:25:11 +08:00
2026-10-11 10:03:43 +08:00
2026-10-12 12:32:10 +08:00
2026-10-13 22:28:34 +08:00
2026-10-14 11:31:41 +08:00
2026-10-05 08:17:57 +08:00
2026-10-05 08:17:57 +08:00
2026-10-05 08:17:57 +08:00
2026-10-11 09:35:32 +08:00
2026-10-11 09:35:32 +08:00
2026-10-15 14:57:13 +08:00
2026-10-13 06:57:28 +08:00
2026-10-13 06:57:28 +08:00
2026-10-13 06:57:28 +08:00
2026-10-16 00:56:14 +08:00
2026-10-14 11:31:41 +08:00
2026-10-16 00:56:14 +08:00
2026-10-11 20:50:52 +08:00
2026-10-07 17:37:22 +08:00
2026-10-05 08:17:57 +08:00
2026-10-11 13:25:11 +08:00
2026-10-15 22:43:08 +08:00
2026-10-13 13:42:57 +08:00
2026-10-11 09:35:32 +08:00
2026-10-04 14:50:46 +08:00
2026-10-13 13:42:57 +08:00
2026-10-16 00:56:14 +08:00
2026-10-07 17:37:22 +08:00
2026-10-11 09:35:32 +08:00
2026-10-12 12:32:10 +08:00
2026-10-14 10:46:05 +08:00
2026-10-13 13:42:57 +08:00
2026-10-12 16:32:30 +08:00
2026-10-14 11:31:41 +08:00
2026-10-11 08:17:56 +08:00
2026-10-11 09:35:32 +08:00
2026-10-12 19:07:09 +08:00
2026-10-13 22:34:13 +08:00