feat: board-level author-only reply policy - #433
Open
shamblashini wants to merge 1 commit into
Open
Conversation
A board's access block gains an optional replyPolicy key
('anyone' | 'author-only'; absent = 'anyone', so no migration). On an
author-only board only each post's own author and team members can
comment, while everyone the view tier admits still reads every thread —
each thread stays a publicly readable conversation between its author
and the team.
Enforced centrally in canCreateComment (covers portal, widget, REST v1,
and MCP), surfaced per-post to the portal and widget composers via a new
canCommentOnPost capability, and configured from the board's Access
settings tab. Portal/widget show an explanatory notice in place of the
composer; strings added to all nine locale catalogs.
Author
|
I see that the branch now has conflicts with main, I will resolve them if needed. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
Communities/teams running public report or support boards want threads readable by everyone (for transparency) but writable only by the reporter and staff.
What
A board's access block gains an optional replyPolicy key ('anyone' | 'author-only'; absent = 'anyone', so no migration). On an author-only board only each post's own author and team members can comment, while everyone the view tier admits still reads every thread — each thread stays a publicly readable conversation between its author and the team.
Backward compatibility: the key is optional and absent on every existing board. Absent reads as 'anyone', the stored column default is byte-unchanged (still pinned to its original migration by the existing schema test), and normalization never injects the key so no migration is needed and existing boards behave exactly as before. This is covered by an explicit test ("an absent replyPolicy key behaves as 'anyone' (today's boards are unchanged)") plus schema tests asserting the key is never injected into legacy rows.
settings UI screenshot


the view of a locked-out user
How
Enforced centrally in canCreateComment (covers portal, widget, REST v1, and MCP), surfaced per-post to the portal and widget composers via a new canCommentOnPost capability, and configured from the board's Access settings tab. Portal/widget show an explanatory notice in place of the composer; strings added to all nine locale catalogs.
Testing
bun run testfully green; the Playwright suites touching these surfaces (admin boards, public portal, widget) pass locally. I didn't add a new browser E2E spec since the closest existing features (comment locks, moderation rules) are tested at the policy/component level too (can add one if needed).How to test
Create a board, enable "Only the post author and team members can reply" (Admin > Settings > Feedback & Roadmaps > Boards > Access), then: