From 97616b12455ec6cf9f427ae55880d4779c8f634e Mon Sep 17 00:00:00 2001 From: traemyn Date: Wed, 12 Aug 2026 12:51:30 -0500 Subject: [PATCH 1/2] fix: honor combat phase stops during auto-pass --- client/src/components/board/ActionButton.tsx | 5 +- .../board/__tests__/ActionButton.test.tsx | 31 ++++ .../engine_phase_trigger_regression_tests.rs | 148 +++++++++++++++++- crates/engine/src/game/engine_tests.rs | 11 +- crates/engine/src/game/turns.rs | 37 ++--- .../integration/issue_3279_song_of_dryads.rs | 3 + .../engine/tests/integration/loop_shortcut.rs | 2 +- 7 files changed, 207 insertions(+), 30 deletions(-) diff --git a/client/src/components/board/ActionButton.tsx b/client/src/components/board/ActionButton.tsx index 24fccd507e..c174204463 100644 --- a/client/src/components/board/ActionButton.tsx +++ b/client/src/components/board/ActionButton.tsx @@ -278,7 +278,8 @@ export function ActionButton() { // grows. Surfaced with the same pulsing cancel affordance as UntilTurnBoundary // so the player can revoke it between opponents' windows. const isResolvingStack = autoPass?.type === "UntilStackEmpty"; - const canActDuringAutoPass = mode === "combat-blockers"; + const canActDuringAutoPass = + mode === "combat-attackers" || mode === "combat-blockers"; const actionPending = useMultiplayerStore((s) => s.actionPending); const isResolvingAll = useGameStore((s) => s.isResolvingAll); @@ -293,7 +294,7 @@ export function ActionButton() { return ( <>
- {mode === "combat-attackers" && !isEndingTurn && ( + {mode === "combat-attackers" && ( <>