From 0c976ddbf7394b6b911699356beef74939d88be1 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 30 Jun 2026 22:56:09 +0000 Subject: [PATCH] =?UTF-8?q?feat:=20add=202=20new=20failure=20modes=20?= =?UTF-8?q?=E2=80=94=20rate=20limiting=20and=20streaming=20fallback?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Rate limiting during reconnection (429): honor retry-after headers - Placeholder edit fails silently: fallback to sending as new message - Both fixes deployed to pi Zulip extension --- zulip-adapter-lessons.prose.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/zulip-adapter-lessons.prose.md b/zulip-adapter-lessons.prose.md index 869853e..f237d40 100644 --- a/zulip-adapter-lessons.prose.md +++ b/zulip-adapter-lessons.prose.md @@ -57,6 +57,18 @@ description: > - **Fix**: Kill old process before starting, or use docker restart to clear state - **Applies to**: kagentz Agent Zero deployment +### 9. Zulip API Rate Limiting During Reconnection +- **Symptom**: Extension gets 429 errors and can't reconnect — responses vanish +- **Root cause**: Rapid PM2 restarts cause multiple queue registrations, hitting Zulip's per-IP rate limit +- **Fix**: Read `retry-after` header and wait before retrying; increase backoff between retries +- **Applies to**: pi extension (fixed), Hermes adapter (has retry logic but should check retry-after) + +### 10. Placeholder Edit Fails Silently (Streaming Vanishes) +- **Symptom**: User sees "Thinking..." placeholder but never gets the actual response +- **Root cause**: `editMessage` API call fails (e.g., message too old, rate limited) but no fallback +- **Fix**: If edit fails, send the response as a new message instead +- **Applies to**: pi extension (fixed), Hermes adapter (verify edit fallback exists) + ## Deployment Checklist When deploying a new Zulip adapter, verify: