From db11bae2d83e1f1847649c1dd6cfd9833553cb70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BE=B7=E5=AE=87?= Date: Thu, 24 Sep 2026 13:04:11 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B3=A8=E9=87=8A=EF=BC=9A=E8=AF=B4=E6=98=8E?= =?UTF-8?q?=E5=A4=B1=E8=B4=A5=E8=AF=B4=E6=98=8E=E8=BA=AB=E4=BB=BD=E5=9C=A8?= =?UTF-8?q?=E6=97=A0=E8=BA=AB=E4=BB=BD=E6=97=A0=E6=97=B6=E9=97=B4=E6=97=B6?= =?UTF-8?q?=E4=BC=9A=E6=92=9E=E6=88=90=E4=B8=80=E6=9D=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit directTurnFailure.ts:原来那句"身份不可证明时退化成与事件时间绑定的固定形状……不会让两轮失败互相覆盖"漏了 `at` 也拿不到的那一档——常量 direct-thread-turn-failure 会让两条这样的失败按同一个 itemId 合并。补上这一档的真实行为与取舍(唯一性与重放不变不可兼得,这里选重放不变),代码不动。 --- .../chat/conversation/directTurnFailure.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/apps/ai-game-creator-shell/src/view/project-development/chat/conversation/directTurnFailure.ts b/apps/ai-game-creator-shell/src/view/project-development/chat/conversation/directTurnFailure.ts index b9b9ef416..1fe7ed136 100644 --- a/apps/ai-game-creator-shell/src/view/project-development/chat/conversation/directTurnFailure.ts +++ b/apps/ai-game-creator-shell/src/view/project-development/chat/conversation/directTurnFailure.ts @@ -20,8 +20,13 @@ const DIRECT_TURN_FAILURE_FALLBACK_ITEM_ID = 'direct-thread-turn-failure'; * * 它是派生身份,不是原生条目身份——宿主只在 `turn.completed.failure` 里给原因,不额外造条目。 * 用本轮身份派生可以保证"同一轮只有一条说明、跨轮不会合并",也不会和原生 itemId 撞车。 - * 身份不可证明(本轮没有落盘用户条目)时退化成与事件时间绑定的固定形状:它随事件固定、 - * 重放不变,又不会让两轮失败互相覆盖。 + * 身份不可证明(本轮没有落盘用户条目)时退化成与事件时间绑定的固定形状:它随事件固定、重放不变, + * 同一条事件重放多少次都算同一条说明,两轮失败也不会互相覆盖——前提是事件带 `at`。 + * + * 身份与 `at` **都**拿不到时只能退到常量 `direct-thread-turn-failure`:这一档无法既"重放不变" + * 又"两条不撞",它们会被 `mergeDirectChatEntry` 按同一个 itemId 合并成一条。当前所有宿主事件 + * 都带 `at`(`at` 缺失只可能来自更早版本的事件),所以这是防御路径;真要给这一档唯一性,得先 + * 接受"重放会产生第二条说明"。 */ export function directTurnFailureItemId( userItemId: string | null | undefined,