From 1fa1b5de53e007c022e01fdc139f0f9b56966256 Mon Sep 17 00:00:00 2001 From: Cynthia Rohr Date: Fri, 21 Aug 2026 08:18:06 +0200 Subject: [PATCH] fix(acp): log inbound author-gate drops at info, with event id and kind MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The author gate's drop was the only signal that an event addressed to this agent was rejected — and it logged at debug, so any deployment running at info saw nothing. A mis-scoped respond_to, a workflow message signed by an unexpected key, or a revoked sibling all presented as the agent silently ignoring a mention, indistinguishable from a stalled session until someone attached a debugger. Running agent fleets against a relay we have paid for this twice: a scheduled workflow's send_message wake-ups died at this gate for days (the relay-signed events were neither owner nor sibling), and a mis-scoped allowlist read as an unresponsive agent. Both diagnoses required reproducing the drop under a debug build; both would have been one grep at info. Promote the line to info and add event_id and kind so a single log line identifies exactly which event died and why. Drops here are rare and attacker-uncontrolled in practice (the gate fires on configuration mismatches, not floods), so log volume is not a concern; if a deployment disagrees, filtering one targeted line down is trivial — reconstructing an invisible drop is not. Signed-off-by: Cynthia Rohr --- crates/buzz-acp/src/lib.rs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/crates/buzz-acp/src/lib.rs b/crates/buzz-acp/src/lib.rs index 1352b31cad8..d0ee7620f2a 100644 --- a/crates/buzz-acp/src/lib.rs +++ b/crates/buzz-acp/src/lib.rs @@ -2868,9 +2868,20 @@ async fn tokio_main() -> Result<()> { ) .await; if !allowed { - tracing::debug!( + // info!, deliberately: this drop is the only + // signal that an event addressed to this agent + // was rejected. At debug level a fleet running + // at info sees nothing — a mis-scoped + // `respond_to`, a workflow message signed by an + // unexpected key, or a revoked sibling all + // present as the agent silently ignoring a + // mention, indistinguishable from a stall + // until someone attaches a debugger. + tracing::info!( channel_id = %buzz_event.channel_id, author = %buzz_event.event.pubkey.to_hex(), + event_id = %buzz_event.event.id.to_hex(), + kind = buzz_event.event.kind.as_u16(), mode = %config.respond_to, is_dm, "inbound author gate — dropping event"