# NousResearch/hermes-agent · Telegram progress message coalescing and edit reliability

## Open now

- 1 issue, 1 PR open on GitHub.
- #9136: \[Bug\]: Progress messages stop coalescing after approval — each trajectory becomes a separate message
- PR #9345: fix(gateway): recover progress coalescing after stale edits

These issues and PRs address bugs where Telegram tool-progress messages stop being edited in place and instead spawn separate messages, particularly after flood control responses or transient network errors. Work covers preserving edit capability across error conditions and recovering coalescing behavior.

## TL;DR

- 7 member(s): 1 open issue(s), 2 closed issue(s), 1 open PR(s), 1 merged PR(s), 2 PR(s) closed without merging.
- A fix was merged to main in PR #28484. Verify it addresses your case.
- **Recommended:** read PR #28484 (and any competing PRs below) before filing. Confirm the merged change covers your symptom.

## Maintainer resolution verdict

- Internal-tracker verdict over this cluster's issue members: `unresolved`. This is distinct from the fix status above. Weigh it yourself.

## How this cluster was grouped

- Link evidence (`STRUCTURAL_PARTIAL`): some members are connected by structural evidence (shared changed files, or a closing/superseded reference); the rest are joined by an automated relevance judgement over their text.
- Members outside that structural core may belong to a different underlying problem.
- Pairwise link density `0.22`: the share of member pairs that carry a link, counting a structural link in full and a relevance-only link at 0.36. `1.00` means every pair is linked.

## Open related issues

- #9136: \[Bug\]: Progress messages stop coalescing after approval — each trajectory becomes a separate message

## Closed / duplicate issues

- #25188: \[Bug\]: Telegram flood-control fallback stops coalescing tool progress and starts sending new messages
- #27828: Telegram tool-progress edits permanently fall back to separate messages after transient edit_message network error

## Prior & competing PRs

- **#27839: fix(telegram): preserve can_edit after transient network errors in progress edits (#27828)**. closed without merge · fix tier `suggested`
  - maintainer direction: category `merged_via`; implication `superseded`
  - _suggested-tier fix detail withheld; re-request with `?tier=all` to include it._
- **#28484: fix(gateway): keep tool-progress edits alive after Telegram flood control (closes #25188)**. merged to main · fix tier `verified`
  - maintainer direction: category `merged`
  - files: `gateway/run.py`, `scripts/release.py`
  - fix hunks:
  - `gateway/run.py`

    ```diff
    @@ -15463,14 +15463,15 @@ async def _roll_progress_overflow_if_needed() -> bool:
                             if not result.success:
                                 _err = (getattr(result, "error", "") or "").lower()
                                 if "flood" in _err or "retry after" in _err:
    -                                # Flood control hit — disable further edits,
    -                                # switch to sending new messages only for
    -                                # important updates.  Don't block 23s.
    +                                # Flood control hit — backoff but keep editing.
    +                                # Only disable edits for non-recoverable errors.
                                     logger.info(
    -                                    "[%s] Progress edits disabled due to flood control",
    +                                    "[%s] Progress edit flood control, backing off",
                                         adapter.name,
                                     )
    -                            can_edit = False
    +                                _last_edit_ts = time.monotonic()
    +                            else:
    +                                can_edit = False
                                 _flood_result = await adapter.send(
                                     chat_id=source.chat_id,
                                     content=msg,
    ```
  - `scripts/release.py`

    ```diff
    @@ -166,7 +166,7 @@
         "[redacted:email]": "Junass1",
         "[redacted:email]": "Bartok9",
         "bartok9@users.noreply.github.com": "Bartok9",
    -    "pepelax@users.noreply.github.com": "pepelax",  # PR #25419 salvage (send_message TELEGRAM_PROXY)
    +    "[redacted:email]": "erhnysr",  # PR #25198 salvage (tool-progress flood-control)
         "[redacted:email]": "hllqkb",
         "25840394+Bongulielmi@users.noreply.github.com": "Bongulielmi",
         "[redacted:email]": "JTroyerOvermatch",
    ```
- **#9345: fix(gateway): recover progress coalescing after stale edits**. open
  - maintainer direction: category `uncategorized`; implication `needs_llm`
  - files: `gateway/run.py`, `tests/gateway/test_run_progress_topics.py`, `tests/gateway/test_telegram_progress_edit_transient.py`
- **#25198: fix(gateway): keep tool-progress edits alive after Telegram flood control**. closed without merge
  - maintainer direction: category `merged_via`; implication `superseded`; refs `#28484`

## Fix status

- Merged to main in PR #28484 (cited above). No release data is tracked. Verify downstream.
- Fix last verified (merged) `2026-05-19`.
- Subsystem: `gateway`
