A community's moderators lock threads and ban members

Lemmy's moderation reached PrivaPub only as removals. Now a remote
community's lock and ban, relayed in its Announce, apply too:

- a lock (Announce{Lock}, or commentsEnabled false on the post) refuses
  replies to the thread, ours included, until Undo{Lock}; statuses say so
  in privapub.locked;
- a ban of a persona (Announce{Block} with the community as target, or the
  moderator's own Block sent straight to us, which is the community's ban
  and never the moderator's block of the persona) shows as blocked_by on
  the community and refuses the persona's posts and replies there until
  the Undo.

The Lemmy scenario's removal was an expected failure only because it gave
up before Lemmy's 30-second batch; it now waits, and checks the lock and
the ban live (Lemmy refuses a lock or an unban without a reason): 29
checks, none expected to fail. G-0003 and G-0006 are closed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LsXgEaXee4GCU1hwYgPJXw
This commit is contained in:
thepraandClaude Opus 5.5 committed 2026-10-05 06:10:33 +02:00
1 parent 4a9a3d3235
commit 34c0f696af
16 files changed
+231 -20

No files matched your search

+7 -3
View File
@@ -512,7 +512,9 @@ on a Page: pins live in `featured`, locks in `Lock`.
| Read 1.0 `context`, grouped by root post; cross-post detection by URL | P3 | — |
**Pasture evidence (2026-10-03, Lemmy 1.0.0-beta.2, `tools/pasture/scenarios/lemmy.sh`):** 20 checks pass and 3 are
expected failures:
expected failures. On 2026-10-05 the scenario runs 29 checks, all passing: the relayed votes, and a moderator's lock
(refusing our reply, then lifted), a ban of alice (`blocked_by` on the community, refusing her reply, then lifted) and a
removal. The 2026-10-03 run covered:
- communities both ways: Lemmy follows ours and alice follows Lemmy's, each Accept arriving;
- a Lemmy thread in our community arrives with its title, and our titled community post reaches Lemmy;
- the Lemmy community's Announce brings its thread to alice's home;
@@ -529,8 +531,10 @@ What it showed:
- **Every bare `Announce{object}` is answered 400** (`Failed to parse object`: Lemmy dereferences it expecting an
activity), as Lemmy answers the compatibility `Announce(Page)` it sends itself. Both 400s show up as dead deliveries
in the statistics.
- **Votes travel only to the community**, which relays them as `Announce{Like}` and `Announce{Dislike}`. They are
dropped as `unsupported` until P7 (expected failures), as is a moderator's removal.
- **Votes travel only to the community**, which relays them as `Announce{Like}` and `Announce{Dislike}`: counted since
ed08f80, and a vote turned the other way replaces the first since bbeeda7. A moderator's removal, lock and ban come
the same way and are applied since 2026-10-05 (the removal was applied all along; the scenario gave up before Lemmy's
30-second batch).
- Lemmy logs no refused activity at `warn`; the reason is in the 400's body, which our delivery does not keep. The
scenario's API notes: `sort` values are lowercase (`new`), private messages and mentions are in
`account/notification/list`, and `resolve_object` takes both `!community@host` and `@user@host`.
+2 -1
View File
@@ -618,7 +618,8 @@ it, raw where it doesn't.
- group by the root post;
- publish our own `context` and a paged `replies`.
- **Lemmy, PieFed and Mbin:**
- the moderation set: removals, locks, bans, featured, moderators, `Warn`, `Resolve`;
- the moderation set: removals, locks, bans (**done 2026-10-05**, relayed by the community: a lock refuses replies, a
ban of a persona refuses its posts there and shows as `blocked_by`), featured, moderators, `Warn`, `Resolve`;
- votes in and out; link posts; flairs; `Feed` actors; community polls; post `Move`;
- the outbound shape Lemmy requires;
- communities we host announce to the author's own instance too;