From 686616375cf20ed8e351e4afb84c907cccfb4806 Mon Sep 17 00:00:00 2001 From: archipelago Date: Wed, 5 Aug 2026 18:36:03 -0400 Subject: [PATCH] fix(13-08): confirm-response listener TTL follows the 300s gate timeout MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 130s TTL predated the UAT timeout bump — it disarmed the approve/deny listener while the dialog was still legitimately open (self-healing via the next poll's re-announce, but a click in the gap dropped silently). Co-Authored-By: Claude Fable 5 --- neode-ui/src/services/contextBroker.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/neode-ui/src/services/contextBroker.ts b/neode-ui/src/services/contextBroker.ts index 1735963f..90b727eb 100644 --- a/neode-ui/src/services/contextBroker.ts +++ b/neode-ui/src/services/contextBroker.ts @@ -105,8 +105,12 @@ export class ContextBroker { /** How long the one-shot aiui:tool-confirm-response listener stays armed * before being cleaned up — slightly beyond the node's own CONFIRM_TIMEOUT - * (120s), after which the node has already declined the action itself. */ - private static readonly CONFIRM_LISTENER_TTL_MS = 130_000 + * (300s since 13-08's UAT bump; was 120s), after which the node has + * already declined the action itself. Must stay ABOVE the node timeout: + * a TTL below it disarms the listener while the dialog is still + * legitimately open, and an approve clicked in that window goes nowhere + * until the next poll re-announces. */ + private static readonly CONFIRM_LISTENER_TTL_MS = 310_000 private confirmPollTimer: ReturnType | null = null /** Chat turns currently in flight — polling runs while > 0. */