block / block/buzz

iOS App Store 0.4.12: composer text is lost when navigating away from a channel — draft persistence (#2889) has never shipped in a release

Open
#5,259 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Rust
Stars
32.7k
Forks
4.3k
Avg merge
1d 13h
Merged PRs (30d)
253

Description

**Describe the bug**

On the current iOS App Store release (0.4.12), text typed into the channel composer is lost when you navigate away from the channel. Returning to the channel shows an empty composer — the unsent text is gone entirely (it also never appears in the Activity inbox Drafts filter).

Composer draft persistence *does* exist on `main`: it landed in #2889 (`9d36778c3`, 2026-07-27, `mobile/lib/features/activity/compose_drafts_provider.dart` + the restore path now in `mobile/lib/features/channels/compose_bar/draft_lifecycle.dart` after the #4512 refactor). But the `mobile-v0.4.12-rc.2` tag was cut on **2026-07-25 — two days before the feature merged** — and `git ls-tree mobile-v0.4.12-rc.2` confirms neither file exists in that release. So every App Store user today has a composer whose text lives only in the widget's `TextEditingController` and is destroyed on navigation.

**Steps to reproduce**

1. Install Buzz from the iOS App Store (0.4.12).
2. Open any channel and type a message into the composer without sending.
3. Navigate back to the channel list (or anywhere else in the app).
4. Return to the same channel.
5. The composer is empty — the drafted text is gone.

**Expected behavior**

Unsent composer text persists per-channel (and per-thread) across navigation, like Desktop and stock iMessage — i.e., the behavior already implemented on `main` by #2889.

**Version and platform**

- Buzz version: iOS app 0.4.12 (App Store)
- OS: iOS 26.5.2

**Logs / additional context**

- Ask: cut a new iOS App Store release that includes #2889 — the fix is already merged, it just hasn't shipped. (Related: #4604 also reports against the aging 0.4.12 App Store build.)
- For anyone verifying on `main`: the restore path is `_useComposeDraftLifecycle` in `mobile/lib/features/channels/compose_bar/draft_lifecycle.dart`, backed by the SharedPreferences store in `mobile/lib/features/activity/compose_drafts_provider.dart` (identity-namespaced by relay + pubkey, 50-draft cap).

Contributor guide

Open the contributing guide

Research direction

Compare the mobile-v0.4.12-rc.2 tag with main, focusing on mobile/lib/features/activity/compose_drafts_provider.dart and mobile/lib/features/channels/compose_bar/draft_lifecycle.dart. Verify the _useComposeDraftLifecycle restore path and then follow the iOS release process; done means a new App Store release includes #2889 and preserves unsent drafts per channel and thread.

Written by the indexing model from the issue text.

Assessment

Tech stack
dart, flutter
Domain
mobile, release
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Quiet
Clarity
Clearly specified
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.