Repository navigation
mobile: add follow and remind actions to inbox row menu - #9142
Conversation
Long-pressing an Inbox row now offers Follow/Unfollow thread (the conversation's thread root, or the message itself for top-level rows; hidden for grouped DM conversations) and Remind me (the shared reminder sheet for the row's latest message; hidden when signed out). The sheet scrolls so the extra rows fit on short screens and large text. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Tom Brow <tomb@squareup.com>
|
@codex review |
Codex Review Summary: ✅ CompletedThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: b0ade6a182
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| showRemindMeLaterSheet( | ||
| context: context, | ||
| ref: ref, | ||
| target: ReminderTarget( |
There was a problem hiding this comment.
Refresh the cached reminders after creation
When remindersProvider has already been initialized—for example, after opening Reminders and returning to All—this call publishes the reminder but neither refreshes nor invalidates that non-auto-dispose provider. Switching back to Reminders therefore renders the cached pre-creation list even after the “Reminder set” confirmation, until the user manually pulls to refresh. Refresh or invalidate the provider after successful creation, and extend the journey to assert that the new reminder becomes visible rather than only inspecting the capturing service.
AGENTS.md reference: AGENTS.md:L828-L830
Useful? React with 👍 / 👎.
Remind me on an Inbox row now loads the reminder list first and, when the message already has a pending reminder, republishes it under the same d tag (keeping its note) instead of adding a second reminder. Follow is no longer offered on Solo chat rows, which have no threads. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Tom Brow <tomb@squareup.com>
🔐 Codex Security Review
Review SummaryOverall Risk: MEDIUM
Findings[MEDIUM]
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 99b2418a01
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| import '../../shared/reminders/remind_me_later_sheet.dart'; | ||
| import '../../shared/reminders/reminder_service.dart' | ||
| show ReminderTarget, reminderServiceProvider; | ||
| import '../channels/thread_follows/thread_follows_provider.dart'; |
There was a problem hiding this comment.
Move thread-follow state behind a shared boundary
Move threadFollowsProvider out of the channels feature, or expose this operation through a shared abstraction, rather than adding another direct activity → channels dependency. The repository explicitly prohibits feature modules from importing other feature modules, and this import couples the inbox action to another feature's internal state implementation.
AGENTS.md reference: AGENTS.md:L789-L790
Useful? React with 👍 / 👎.
| existing: existing == null | ||
| ? null | ||
| : (dTag: existing.id, note: existing.note), | ||
| onSaved: () => unawaited(ref.read(remindersProvider.notifier).refresh()), |
There was a problem hiding this comment.
Capture the reminder notifier before awaiting the relay
When relay acknowledgement is slow and the user switches to the Reminders filter or otherwise removes this row after choosing a time, the _InboxRow is disposed before onSaved runs. This closure then calls ref.read on a disposed WidgetRef; the synchronous error is caught by the sheet as though creation failed even though the relay already accepted the reminder, and the reminder list is not refreshed. Capture a notifier or container while the row is still mounted so the post-save callback does not depend on the row's lifecycle.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
[P2] Keep callback failures separate from reminder publication
A live message can re-key and dispose this row while the sheet stays open. Besides capturing the notifier before opening the sheet, could onSaved run outside the publication error handler? Otherwise a refresh callback exception reports a successful save as failed and encourages duplicate retries.
Posted by Codex (gpt-6.1-sol) on behalf of kylez
| String? get _followRootId { | ||
| if (channel?.isSolo ?? false) return null; | ||
| if (item.conversationId.startsWith('dm:')) return null; | ||
| return item.conversationId; |
There was a problem hiding this comment.
Hide Follow until channel metadata is available
On a cold start where the activity feed resolves before channelsProvider, channel is null and this condition treats the row as non-Solo; top-level DM rows are also not yet grouped under a dm: conversation ID. Long-pressing during that window therefore exposes Follow for Solo chats or DMs and can persist a meaningless thread follow. Treat unresolved channel metadata as ineligible for Follow, or defer the action until the channel type is known.
Useful? React with 👍 / 👎.
kazemek21
left a comment
There was a problem hiding this comment.
Kyle reviewed this PR and the Nexus review-tracker notes. Approved with the non-blocking C1 feedback in the existing reminder callback thread.
Posted by Codex (gpt-6.1-sol) on behalf of kylez
…ction-p * origin/main: (111 commits) feat(mobile): tag the reacted-to message author on reactions (#9141) fix(mobile): steady New DM picker rows and animate picks (#9249) perf(mobile): keep remote images on disk and show small ones as thumbnails (#9158) fix(relay): deliver slow cross-node events late instead of closing their recipients (#9235) fix(mobile): read only shown events from filtered Activity rows (#9215) fix(mobile): show the channel name as the notification subtitle (#9173) fix(mobile): keep Home's header clean under sheets (#9152) fix(mobile): show already-loaded custom emoji in the iOS reactions sheet (#9150) mobile: add follow and remind actions to inbox row menu (#9142) fix(mobile): start no threads in Solo chats (#9123) mobile: persist user profiles so names and avatars render on launch (#9116) fix(mobile): keep a sent thread reply above the composer (#9026) [buzz] Recover database pool capacity after stalled connections (#9267) feat: send a User-Agent on relay WebSocket upgrades (#9246) Record why relay connections close and quiet close warnings (#9245) fix(relay): say "channel owner or admin" in the call_webhook save refusal (#9169) feat(mobile): consolidate Solo chat settings in one sheet (#9255) fix(cli): preserve attachments across successive edits (#9226) fix(mobile): swipe left to reply so swipe-back keeps rightward drags (#9127) mobile: long-press a message link for open, copy and share (#9135) ... Signed-off-by: Matthew Boston <mboston@squareup.com>
…-profile * origin/main: (307 commits) fix: inline ARM64 atomics in Sprig image build (#9291) fix(mobile): show observed thread replies in Activity (#9286) Enable mobile huddles with Codex agents (#9269) fix(mobile): read mentions taller than the screen (#9243) test(relay): give every media e2e upload its own blob hash (#9272) Add invite preview video and fallback poster (#9282) NEXUS-4336: Wait for desktop-provider socket ownership proof (#9270) fix: unblock image audit with patched MCP SDK (#9287) feat(ci): allow admin dispatch of desktop candidate validation (#9288) feat(mobile): tag the reacted-to message author on reactions (#9141) fix(mobile): steady New DM picker rows and animate picks (#9249) perf(mobile): keep remote images on disk and show small ones as thumbnails (#9158) fix(relay): deliver slow cross-node events late instead of closing their recipients (#9235) fix(mobile): read only shown events from filtered Activity rows (#9215) fix(mobile): show the channel name as the notification subtitle (#9173) fix(mobile): keep Home's header clean under sheets (#9152) fix(mobile): show already-loaded custom emoji in the iOS reactions sheet (#9150) mobile: add follow and remind actions to inbox row menu (#9142) fix(mobile): start no threads in Solo chats (#9123) mobile: persist user profiles so names and avatars render on launch (#9116) ... Signed-off-by: Franco Sola <fsola@squareup.com> # Conflicts: # docs/nips/NIP-FA.md # docs/nips/NIP-FI.md
…e-mode * origin/main: (36 commits) feat(relay): let an operator mint invites for a community owner or admin (#9265) fix: inline ARM64 atomics in Sprig image build (#9291) fix(mobile): show observed thread replies in Activity (#9286) Enable mobile huddles with Codex agents (#9269) fix(mobile): read mentions taller than the screen (#9243) test(relay): give every media e2e upload its own blob hash (#9272) Add invite preview video and fallback poster (#9282) NEXUS-4336: Wait for desktop-provider socket ownership proof (#9270) fix: unblock image audit with patched MCP SDK (#9287) feat(ci): allow admin dispatch of desktop candidate validation (#9288) feat(mobile): tag the reacted-to message author on reactions (#9141) fix(mobile): steady New DM picker rows and animate picks (#9249) perf(mobile): keep remote images on disk and show small ones as thumbnails (#9158) fix(relay): deliver slow cross-node events late instead of closing their recipients (#9235) fix(mobile): read only shown events from filtered Activity rows (#9215) fix(mobile): show the channel name as the notification subtitle (#9173) fix(mobile): keep Home's header clean under sheets (#9152) fix(mobile): show already-loaded custom emoji in the iOS reactions sheet (#9150) mobile: add follow and remind actions to inbox row menu (#9142) fix(mobile): start no threads in Solo chats (#9123) ... Signed-off-by: Will Pfleger <wpfleger@block.xyz>
Long-pressing an Inbox row opened a sheet with only Mark as read/unread and Open conversation. To follow a thread or set a reminder, you had to open the conversation and long-press the message itself.
The row sheet now also offers:
dtag (an addressable replace) and keeps its note, so you don't get a second reminder. It loads the reminder list first, because otherwise the list loads only with the Reminders filter. It's hidden when signed out, like the message sheet.The sheet is now scrollable so the four rows fit on short screens and at large text sizes (without it, the new test overflowed at the default test surface).
Demo
Long-press a channel mention row in the Inbox, follow the thread, reopen the sheet (now Unfollow thread), then set an "In 1 hour" reminder. The rows are agent test chatter from a pilot community.
demo.mp4
Validation
dtag, note kept, "Reminder updated"), hiding Follow in a Solo chat, and hiding Remind me when signed out. Thetest/features/activity,test/shared/remindersand message-actions suites pass.🤖 Generated with Claude Code