Repository navigation
Conversation
|
@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: a503618e7f
ℹ️ 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".
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: fae660296e
ℹ️ 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".
🔐 Codex Security Review
Review SummaryOverall Risk: NONE
FindingsNo concrete security, correctness, or reliability findings were identified. Notes
Generated by Codex Security Review | |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 5b6064229d
ℹ️ 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".
| await expectLater( | ||
| container.read(actionsProvider).joinChannel(_channelId), | ||
| throwsA( |
There was a problem hiding this comment.
Exercise the successful strong-refresh path
Make this test return a matching roster and assert that the subsequent channel-list membership query also carries consistency: strong. It currently forces _confirmJoined to exhaust its retries and throw, so it never exercises _refreshChannelState; removing the strong: strongMemberships propagation would leave the suite green while a lagging replica could keep the footer on Join after confirmation succeeds.
AGENTS.md reference: AGENTS.md:L243-L247
Useful? React with 👍 / 👎.
A nonmember viewing an open channel saw "Join this channel from Manage to participate." with no way to act on it there. The footer now matches desktop: "Join channel to send messages" with a Join button. A private channel preview says it is a preview and offers no Join. Joining also has to show up right away. The relay acknowledges the join before its replicas see the new roster, so the refresh that followed still listed the user as a nonmember and the page stayed on Join. Like desktop's channel lifecycle, joinChannel now confirms the roster with strong (writer-pool) reads, then refreshes memberships with a strong read. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Tom Brow <tomb@squareup.com>
Only the relay's /query bridge honors consistency: strong. A WebSocket REQ reads replicas, so the confirmation could miss a just-accepted join. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Tom Brow <tomb@squareup.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Tom Brow <tomb@squareup.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Tom Brow <tomb@squareup.com>
5b60642 to
1b61947
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 1b619472cd
ℹ️ 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".
| await _ref | ||
| .read(channelsProvider.notifier) | ||
| .refresh(strong: strongMemberships); |
There was a problem hiding this comment.
Propagate the post-join refresh failure
If roster confirmation succeeds but the subsequent channel-list refresh is disconnected, retired by a concurrent refresh, or fails, ChannelsNotifier.refresh intentionally returns normally while retaining the cached isMember: false list. Consequently joinChannel reports success, the footer resets to Join rather than showing the composer, and the user receives no failure feedback. Use the error-propagating fetchFresh(strong: true) path here, or otherwise verify that the joined membership was installed before returning.
AGENTS.md reference: AGENTS.md:L222-L229
Useful? React with 👍 / 👎.



A nonmember viewing an open channel on mobile saw "Join this channel from Manage to participate." in the footer, with nothing to tap and no obvious "Manage". The footer now matches desktop's join notice: Join channel to send messages with a primary-styled Join button (the same primary colors as the composer's send button). A private channel preview says "You're previewing this channel" with no Join, and the archived notice is unchanged.
Joining also needed to take effect on screen. The relay acknowledges the join (kind 9021) before its read replicas see the new roster, so the channel refresh that followed still listed the user as a nonmember and the page stayed on Join; on the Builderlab relay the lag ran to tens of seconds. This affected the existing Channel details "Join channel" row too. Like desktop's channel lifecycle (
channel-lifecycle.ts),joinChannelnow confirms the roster withconsistency: "strong"(writer-pool) reads at 0/250/750/1500 ms, then refreshes memberships with a strong read. If the roster never confirms, the join reports an error instead of silently doing nothing.Before / after
Demo video (search for an open channel, open it, tap Join; the footer becomes the composer, the member count goes from 28 to 29, and the channel appears in the sidebar): shared in Buzz rather than here, since it shows real member names from the test community.
Validation
joinChannelissues strong roster reads and fails when membership never confirms.message_skeleton_geometry_testcase, passed when rerun alone and doesn't touch this change (the suite shared the machine with a simulator build).buzz-review-completed
🤖 Generated with Claude Code