Channels: inbound message left as stale composer render with empty input buffer (lost-Enter ghost) — never submits, retry re-ghosts

Open 💬 0 comments Opened Jun 12, 2026 by lucgrn3

Environment

  • Claude Code CLI 2.1.169 (Linux, headless: systemd unit running claude --channels plugin:telegram@claude-plugins-official inside tmux, pipe-pane logging)
  • Telegram channels plugin 0.0.6

Summary

An inbound channel message is sometimes left painted in the composer (❯ <text>) with an EMPTY input buffer — a stale render. The message never submits, and because the buffer is empty no Enter keypress (from the plugin or injected via tmux send-keys) can ever submit it.

Evidence that it's a render artifact, not a staged draft

  1. Composer shows ❯ Yes fix it (an inbound channel message that never produced a user turn in the transcript).
  2. tmux send-keys Enter → nothing happens, text still displayed.
  3. tmux send-keys -l 'x' → composer re-renders as ❯ x (not ❯ Yes fix itx) — the buffer held nothing; the text was only painted.
  4. C-u is a no-op (empty buffer = no redraw), which makes the ghost look "stuck" to any watchdog that tries to clear it.

Additional behavior

  • The plugin retries delivery of the unacked message after a session restart — and the retry ghosts again, deterministically, for the same message.
  • Frequency is intermittent and worst under rapid consecutive inbound messages.

Impact

Unattended sessions silently miss messages. There is no programmatic recovery: the text exists only as pixels in the pane; the only options are OCR-from-pane or asking the sender to resend.

Ask

Is this fixed in ≥2.1.170? If the injection path wrote the buffer and submitted atomically (or verified submission and re-staged on failure), this class would disappear.

View original on GitHub ↗