From 3acd499ffb1119e8032bbcba3f1f46d4ff5f3da9 Mon Sep 17 00:00:00 2001 From: Ogulcan Celik Date: Sun, 31 May 2026 03:00:46 +0300 Subject: fix: keep codex visible approval review working --- src/terminal/metadata.rs | 1 + src/terminal/state.rs | 44 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) (limited to 'src/terminal') diff --git a/src/terminal/metadata.rs b/src/terminal/metadata.rs index 5b9f0078..1dcb80c0 100644 --- a/src/terminal/metadata.rs +++ b/src/terminal/metadata.rs @@ -361,6 +361,7 @@ impl TerminalState { } if self.visible_blocker_overrides_hook() + || self.visible_working_overrides_hook() || self.visible_idle_masks_hook_custom_status(state, now) { return None; diff --git a/src/terminal/state.rs b/src/terminal/state.rs index bcf5737a..ac7c4380 100644 --- a/src/terminal/state.rs +++ b/src/terminal/state.rs @@ -1262,6 +1262,50 @@ mod tests { ); } + #[test] + fn refreshed_visible_working_overrides_newer_hook_blocked() { + let now = Instant::now(); + let mut terminal = test_terminal(); + terminal.set_detected_state_with_screen_signals_at( + Some(Agent::Codex), + AgentState::Working, + false, + false, + true, + false, + now, + ); + terminal.set_hook_authority_with_custom_status_at( + "herdr:codex".into(), + "codex".into(), + AgentState::Blocked, + None, + Some("permission".into()), + None, + None, + now + CLAUDE_WORKING_HOLD + Duration::from_millis(1), + ); + + assert_eq!(terminal.state, AgentState::Blocked); + + let change = terminal.set_detected_state_with_screen_signals_at( + Some(Agent::Codex), + AgentState::Working, + false, + false, + true, + false, + now + CLAUDE_WORKING_HOLD + Duration::from_millis(800), + ); + + assert_eq!(terminal.state, AgentState::Working); + assert_eq!(terminal.effective_custom_status(), None); + assert_eq!( + change.effective_state_change.unwrap().previous_state, + AgentState::Blocked + ); + } + #[test] fn visible_idle_waits_before_overriding_claude_hook_blocked() { let now = Instant::now(); -- cgit v1.2.3