# Upgrade Guide — v0.21.3

<!-- bump: patch -->
<!-- Valid values: patch, minor, major -->
<!-- patch = bug fixes, refactors, test additions, doc updates -->
<!-- minor = new features, new APIs, new capabilities (backwards-compatible) -->
<!-- major = breaking changes to existing APIs or behavior -->

## What Changed

### Telegram Poll Offset — Per-Message Saving (Bug Fix)

`TelegramAdapter.poll()` now saves the Telegram update offset after each individual message is processed, not at the end of the entire batch.

**Why this matters**: If your server process restarts mid-batch (crash, update, restart), any messages that were already processed but whose offset hadn't been saved yet would be re-delivered on the next poll. At a 2-second poll interval, this could cause the same 3–5 messages to replay dozens or hundreds of times in a short window — flooding your session with repeated injections and system-reminder warnings.

This fix was previously applied to `TelegramLifeline` (v0.21.2, commit 96006ff) but was missing from the main `TelegramAdapter` used by all standard agents.

**No configuration changes required.** The fix is automatic.

## What to Tell Your User

- **Message replay bug fixed**: If you ever saw the same messages showing up repeatedly in a conversation after a restart, that should no longer happen. The fix ensures each message is acknowledged as soon as it's delivered, so a restart mid-batch can't cause duplicates.

## Summary of New Capabilities

| Capability | How to Use |
|-----------|-----------|
| Crash-safe Telegram message delivery | Automatic — no action needed |
