Both POST /api/devices/:id/trv-control and POST /api/zones/:id/override
awaited the full setTargetWithRetry()/batchSetZoneTemperature() retry/backoff
pipeline before responding -- up to ~93 minutes (RETRY_DELAYS_MS sums to
5610s across 10 attempts). Any reverse proxy times out its own connection
long before that finishes, surfacing as a real Gateway Time-out (hit
2026-08-26 testing a TRV setpoint change -- confirmed not kiosk-specific,
same code path every TRV control UI goes through, including kiosk's bulk
edit which compounded it per selected device).
Fix: both routes now fire the retry pipeline in the background and respond
immediately (ok:true, pending:true) -- same eventually-consistent pattern
the MHI/Daikin panels already use (fire command, poll status separately for
the real outcome). Updated callers that read the old synchronous
successful/total counts (ZoneDetailModal's override message, KioskBulkPanel's
TRV result message) to reflect 'sent, applying in the background' instead.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>