Files
buzz/mobile/lib/features
Tom Brow e558f15faa Mobile: one New chat screen (#9079)
Mobile had two New chat screens.
[#8884](https://github.com/block/buzz/pull/8884) made the Flutter draft
page (first send creates and names the chat) the New chat screen, but
kept the older create form (a native iOS sheet, with a Flutter bottom
sheet on Android) for one case: resuming a creation that an older build
had saved with a chat name and no first message. Nothing creates that
state anymore, so the old form only appeared for users with an
interrupted creation from before that change.

This removes the old form. Every New chat, including that resume case,
now opens the draft page:

- **New chat**: unchanged.
- **Resuming an interrupted creation**: after the existing Resume /
Discard setup / Later prompt, the draft page shows the saved chat with
its agent and workspace locked and a Retry button, the same choices the
old sheet offered when it locked its fields. A creation saved with a
first message resumes exactly as before. One saved without a message
finishes without one, because a saved creation can't change after its
first relay write.

The iOS editor's chat-only code (`presentChat`, `updateChatAssistants`,
the agent list, and its avatar loader) goes too. The same editor still
handles profile fields, channel details and workspace names. The native
test and CI step that covered only the removed chat form are removed.

### Screenshots

Resuming an interrupted creation saved without a first message:

| Before: old native sheet (removed) | After: draft page (kept) |
| --- | --- |
| <img
src="https://raw.githubusercontent.com/block/buzz/5d0a502e92fc3dfeffbe4fa95d63ba8f73d1e612/pr-9079--01-before-resume-native-sheet.png"
width="300"> | <img
src="https://raw.githubusercontent.com/block/buzz/5d0a502e92fc3dfeffbe4fa95d63ba8f73d1e612/pr-9079--02-after-resume-draft-page.png"
width="300"> |

A brand new chat already opened the draft page and is unchanged:

<img
src="https://raw.githubusercontent.com/block/buzz/5d0a502e92fc3dfeffbe4fa95d63ba8f73d1e612/pr-9079--03-new-chat-draft-page.png"
width="300">

### Validation

- Changed tests: `me_page_test` checks that Resume and Discard setup
both open the draft page and that no native sheet is requested.
`solo_creation_tags_test` checks that recovering an interrupted named
creation through the draft page's Retry continues with member setup,
keeps the saved name and agent, and adds no first message.
- Full mobile Flutter suite (4,431 passed) and `flutter analyze`
(clean). iOS debug simulator build succeeds.
- Automated simulator run (iPhone 17 Pro, iOS 27, signed-in account):
New chat opened the draft page, the agent picker selected an agent, and
the first send created the chat, which then appeared under Solo. New
workspace still opened the native editor, enabled Create once named, and
showed the Discard changes prompt on cancel. The recording isn't
attached here because it shows internal account content.
- Resuming an interrupted
pre-[#8884](https://github.com/block/buzz/pull/8884) creation can't be
produced by the current build. For the screenshots above, a
capture-only, uncommitted patch to a `main` build seeded one; the branch
build installed over it resumed it on the draft page. The widget tests
cover finishing it.
- `solo_creation_tags_test` also covers a conflicting pending Solo
organization edit during that Retry: the draft offers the Conflicting
Solo changes dialog, keeps the saved creation, and the next Retry
finishes it.

🤖 Generated with [Claude Code](https://claude.com/claude-code)


buzz-review-completed

---------

Signed-off-by: Tom Brow <tomb@squareup.com>
Co-authored-by: Tom Brow <tomb@squareup.com>
Co-authored-by: studio <dc2fc481343672df31a689840c09299972e704dac592e0da6f18486646a7ee3e@buzz.block.builderlab.xyz>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-04 16:34:05 -08:00
..