Skip to content

fix(chat): stop a viewer outside a group from replying to its messages - #1540

Merged
bmc08gt merged 1 commit into
feat/unblur-eligible-groupsfrom
fix/nonmember-message-actions
Sep 23, 2026
Merged

bmc08gt merged 1 commit into
feat/unblur-eligible-groupsfrom
fix/nonmember-message-actions

Conversation

@bmc08gt

@bmc08gt bmc08gt commented Sep 23, 2026

Copy link
Copy Markdown
Collaborator

Stacked on #1537, which lets an eligible non-member read a group's transcript under the Join gate.

resolveCapabilities looks only at the message, so once a non-member had messages to see, every other person's message offered Reply, both by swipe and from the selection bar. The reply went into replyingTo behind the gate, where the viewer couldn't see it, and the composer then opened already quoting that message once they joined. A former member's own messages offered Edit and Delete the same way.

resolveCapabilities now takes canPost. A viewer who can't post keeps only Copy and Report:

Message Can post Can't post
Another participant's text Copy, Reply, Report Copy, Report
Another participant's cash Reply, Report Report
Own text Copy, Reply, Edit, Delete Copy
Own cash Reply none

canPost is !isOutsideGroup, so a group whose membership isn't known yet also counts as can't post. Capabilities are resolved when the transcript is mapped, so the mapping now re-runs when membership changes. Without that, a new joiner wouldn't get Reply back until the next page loaded. The selection bar also applies readOnly() when it opens, the same way it re-applies the edit and delete windows, in case the viewer left after the message was mapped.

Report stays available to non-members. I haven't confirmed that the server accepts a report from someone outside the chat.

With #1537 an eligible non-member reads a group's transcript under the
Join gate, but resolveCapabilities looks only at the message, so every
other person's message offered Reply. Swiping or picking Reply set
replyingTo behind the gate, and the composer later opened quoting it once
the viewer joined. A former member's own messages offered Edit and Delete
the same way.

resolveCapabilities takes canPost, and a viewer who cannot post keeps
only Copy and Report. The transcript mapping re-runs when the viewer
joins or leaves, and the selection bar narrows its set with readOnly() if
they left after the row was mapped, as it already does with the edit and
delete windows.
@bmc08gt bmc08gt self-assigned this Sep 23, 2026
@github-actions github-actions Bot added the type: fix Bug fix label Sep 23, 2026
@bmc08gt
bmc08gt merged commit 1caa6f0 into feat/unblur-eligible-groups Sep 23, 2026
2 of 3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

type: fix Bug fix

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant