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
- 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
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