diff --git a/crates/buzz-acp/src/lib.rs b/crates/buzz-acp/src/lib.rs index fa348eeb3cf..8b433136ebd 100644 --- a/crates/buzz-acp/src/lib.rs +++ b/crates/buzz-acp/src/lib.rs @@ -2462,9 +2462,16 @@ async fn tokio_main() -> Result<()> { ) .await; if !allowed { - tracing::debug!( + // INFO, not DEBUG: a gate rejection is invisible to the + // sender (their mention just sits there), so the operator's + // log is the only place the refusal exists at all. At debug + // level a blocked mention is indistinguishable from a + // working one under default logging — "@agent doesn't + // work" then has no evidence to find, only absence. + tracing::info!( channel_id = %buzz_event.channel_id, author = %buzz_event.event.pubkey.to_hex(), + event_id = %buzz_event.event.id.to_hex(), mode = %config.respond_to, is_dm, "inbound author gate — dropping event" diff --git a/crates/buzz-acp/src/setup_mode.rs b/crates/buzz-acp/src/setup_mode.rs index b1a9372ea46..c511aaf46d6 100644 --- a/crates/buzz-acp/src/setup_mode.rs +++ b/crates/buzz-acp/src/setup_mode.rs @@ -499,7 +499,9 @@ pub(crate) fn should_nudge_for_event( nudged_event_ids: &mut HashSet, ) -> bool { if !author_allowed { - tracing::debug!("setup-mode: event filtered by author gate"); + // INFO to match the normal-mode gate: a rejection produces no sender + // feedback, so the log line is the only evidence it happened. + tracing::info!(%event_id, "setup-mode: event filtered by author gate"); return false; } if !filter_matched {