JianFeeeee
652316674a
文档: 补上「为什么只补 inserted」的真正机制 —— 迁移器只补了一半(§18)
§3/§4 一直说「只改一处」,但从没说清为什么顶层 user/message 缺 id 就不用管。
早先给的理由(补了会 seq gap)已被 §17 作废,那句话一度**没有理由**。
真正的机制(可推广,不只是这一个 repair 的解释):
- 补 id 的 normalizeLegacyMessage() 的 switch 只有 3 个分支
(user/message、assistant/message、tool/result),**没有 agent/inbox/spliced**;
顶层消息缺 id 迁移器自己会补(legacy-message:<sid>:<seq>)。
- 校验 id 的 messageValue() 对 spliced.inserted[] 严格要求 id+role。
⇒ 顶层缺 id 能自愈;inserted[] 缺 id 直接拒绝整条会话。不是取舍,是只补了一半。
实测 43 个文件零例外:其中 43 个文件的顶层 user/message 也缺 id(共 270 条),
只补 inserted(故意不碰 user/message)后,产物里 user/message 仍缺 id = 0。
另:id 的约束是 nonEmptyString(无格式校验),从代码层面解释了 §17.1。
给下一位的一句话:判断「该补哪些字段」要同时读校验器与迁移器 ——
校验器管拒绝什么,迁移器管自愈什么,需要手工补的是两者之差。
2026-09-19 12:22:36 +08:00
..
2026-09-15 11:51:39 +08:00
2026-09-14 23:50:35 +08:00
2026-09-18 04:42:03 +08:00
2026-09-15 06:33:54 +08:00
2026-09-19 12:22:36 +08:00
2026-09-14 16:11:00 +08:00
2026-09-15 11:17:23 +08:00
2026-09-18 13:19:06 +08:00
2026-09-15 11:21:00 +08:00
2026-09-13 06:16:59 +08:00
2026-09-08 19:16:35 +08:00
2026-09-08 19:16:35 +08:00
2026-09-14 23:50:35 +08:00
2026-09-13 14:25:44 +08:00