From 47da90ab841b326f650ef23bb9a9556a36606acd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BE=B7=E5=AE=87?= Date: Sat, 3 Oct 2026 14:47:28 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E6=9E=84=EF=BC=9A=E7=BB=88=E6=80=81?= =?UTF-8?q?=E5=88=A4=E5=AE=9A=E4=B8=8D=E5=86=8D=E4=B8=BA=E6=8E=A7=E5=88=B6?= =?UTF-8?q?=E6=B5=81=E7=95=99=E5=85=9C=E5=BA=95=E5=88=86=E6=94=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - turn_completion.rs 的 turn_terminal 两处 ShouldContinue 分支由 debug_assert + 回落账本终态 / host_dropped 改为 unreachable:控制流在返修循环与终态投影处已被过滤 - 同步收紧 turn_terminal 的文档说明,明确控制流不该也不能进入终态判定 --- .../src/agent/thread_manager/turn_completion.rs | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/apps/ai-game-creator-shell/src-tauri/src/agent/thread_manager/turn_completion.rs b/apps/ai-game-creator-shell/src-tauri/src/agent/thread_manager/turn_completion.rs index 594268d65..e97280e1b 100644 --- a/apps/ai-game-creator-shell/src-tauri/src/agent/thread_manager/turn_completion.rs +++ b/apps/ai-game-creator-shell/src-tauri/src/agent/thread_manager/turn_completion.rs @@ -71,8 +71,9 @@ impl TurnCompletion { /// 阶段的账本读不出来时只有它可用。 /// /// 错误由 [`TurnError::classify`] 分成两层:`ShouldStop` 的载荷直接成失败终态;`ShouldContinue` -/// (返修 / 复核要求继续)说明这一轮还没结束,正常不该走到这里(调用方在写终态之前就拦下了), -/// 真漏进来也不伪造失败——落到账本给出的正常终态。 +/// (返修 / 复核要求继续)说明这一轮还没结束,在产生 / 消费它的那一层就被消化, +/// `codex_app_server` 的终态投影也把它过滤成了 `None`。它不该、也不能进入终态判定: +/// 漏进来就是上游缺陷,直接 `unreachable!`,不落任何终态。 /// /// 载荷在这一个出口从 typed 错误投影([`TurnError::classify`]):脱敏与截断也在那一处完成, /// Rust 侧没有第二个地方再拼它、也没有任何地方再解析它。 @@ -98,10 +99,10 @@ pub(crate) fn turn_terminal( if let Some(error) = error { match error.classify(history_root) { TurnErrorClassified::ShouldStop(payload) => return TurnCompletion::Failed(payload), - // 控制流:这一轮还没结束。写终态是调用方的事,正常在调用方那一层就被拦下;这里显式 - // 认账,不把"继续跑"重新压回静默失败。 + // 控制流:这一轮还没结束,不该走到终态判定。上游的返修循环与 `direct_turn_terminal_write` + // 都已把它挡在外面;漏进来就是缺陷,直接炸出来,不落任何终态。 TurnErrorClassified::ShouldContinue { detail } => { - debug_assert!(false, "控制流错误不应进入终态判定:{detail}"); + unreachable!("控制流错误不应进入终态判定:{detail}") } } } @@ -114,7 +115,9 @@ pub(crate) fn turn_terminal( match error.classify(history_root) { TurnErrorClassified::ShouldStop(payload) => TurnCompletion::Failed(payload), // `Unclassified` 恒为真失败;这一臂写全只是把"分类层不允许静默"补齐。 - TurnErrorClassified::ShouldContinue { .. } => TurnCompletion::host_dropped(), + TurnErrorClassified::ShouldContinue { .. } => { + unreachable!("Unclassified 只可能是回合失败,不该分类成控制流") + } } }) }