Files
SocialPub/tools/pasture/town/gaps.json
T
thepraandClaude Opus 5.5 26346cde30 Mbin joins the pasture; a magazine's own threads and locks are taken
Mbin 1.10.1 runs in the pasture (its image, a messenger worker, a RabbitMQ
of its own, its API limits raised), and peers/mbin_token.py gets mbuser's
token through the authorization-code flow. scenarios/mbin.sh: 24 checks and
one known gap, magazines both ways, titled threads, a Note to a magazine as
a microblog post, comments, favourites and upvotes both ways, a moderator's
lock, unlock and removal, the unfollow and statistics.

What it showed:
- Mbin sends a magazine's threads to its subscribers as the author's Create,
  the magazine as its audience, never announced. A post whose group is
  followed here and lives on the post's own server is now kept as if
  announced; the same from another server is not.
- A moderator's lock is a bare Lock (and Undo{Lock}): LockHandler takes it
  from the post's own server only.
- Mbin takes private messages only as ChatMessage and its actors say
  nothing about it; PrivaPub never decides by a server's software, so this
  stays open as G-0008 for the owner.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LsXgEaXee4GCU1hwYgPJXw
2026-10-05 16:41:50 +02:00

126 lines
5.5 KiB
JSON

[
{
"id": "G-0001",
"title": "Likes, reactions, votes and downvotes from followers on followers-only posts, and from members on circle posts, are dropped",
"match": {
"feature": "count\\.(like|react|vote)\\.(followers|circle)",
"observer": "privapub"
},
"kind": "server",
"phase": "now",
"code": "PrivaPub/Federation/Inbox/Handlers/LikeHandler.cs (MaySee)",
"opened": "2026-10-04",
"status": "closed",
"fixed_in": "128ff89",
"closed": "2026-10-04",
"note": "19 checks passed on the fixed PrivaPub (village, second run)"
},
{
"id": "G-0002",
"title": "A remote Block is not enforced: the blocked persona still sees and reaches the blocker",
"match": {
"feature": "block\\.enforced",
"observer": "privapub"
},
"kind": "server",
"phase": "P7",
"doc": "docs/INTEROP.md (Mastodon gaps)",
"opened": "2026-10-01",
"status": "closed",
"closed": "2026-10-04",
"fixed_in": "d405269",
"note": "checked by the Mastodon scenario (blocked_by)"
},
{
"id": "G-0003",
"title": "Votes and moderation that a Lemmy community relays inside Announce (Like, Dislike, Undo, Delete, Block) are dropped",
"match": {
"feature": "count\\.like\\.community",
"observer": "privapub",
"origin": "lemmy"
},
"kind": "server",
"phase": "P7",
"code": "PrivaPub/Federation/Inbox/Handlers/AnnounceHandler.cs:203",
"opened": "2026-10-01",
"status": "closed",
"note": "Relayed likes count since ed08f80, and a vote turned the other way replaces the first since bbeeda7. A moderator's removal, relayed as Announce{Delete}, was handled all along (believed once Lemmy answers 410); the scenario only gave up before Lemmy's 30-second batch. Locks and community bans are G-0006.",
"closed": "2026-10-05",
"fixed_in": "ed08f80 (relayed votes), bbeeda7 (a vote turned the other way)"
},
{
"id": "G-0004",
"title": "Iceshrimp.NET sends a new note only to its author's followers: a remote account it mentions or answers gets nothing until the note is edited",
"match": {
"feature": "deliver\\..*",
"origin": "iceshrimp",
"how": "addressed only"
},
"kind": "peer",
"phase": "upstream",
"code": "Iceshrimp.NET v2026.1.2-beta NoteService.PublishNoteAsync: recipients from note.Mentions (empty when the Create is queued) and note.Reply.ReplyUserId (the grandparent's author)",
"opened": "2026-10-05",
"status": "open",
"note": "seen in the jobs table: the Create's pre-deliver job has recipientIds [] for every visibility, through the Mastodon and the native API; the Update of the same note lists the mentioned account and reaches PrivaPub"
},
{
"id": "G-0005",
"title": "Misskey keeps a post's renote count when a remote Undo{Announce} deletes the renote, so an undone boost still counts",
"match": {
"feature": "client\\.action\\.boost",
"origin": "misskey"
},
"kind": "peer",
"phase": "upstream",
"code": "misskey-dev/misskey packages/backend/src/core/NoteDeleteService.ts: only repliesCount is decremented on delete",
"opened": "2026-10-05",
"status": "open",
"note": "the renote row is gone after our Undo (checked in its database); renoteCount stays up. Sharkey decrements it."
},
{
"id": "G-0006",
"title": "Locks and community bans that a Lemmy community relays inside Announce (Lock, Block) are dropped",
"match": {
"feature": "moderation\\.(lock|ban)\\.community",
"observer": "privapub",
"origin": "lemmy"
},
"kind": "server",
"phase": "P7",
"code": "PrivaPub/Federation/Inbox/Handlers/AnnounceHandler.cs (the default case)",
"opened": "2026-10-05",
"status": "closed",
"note": "Locks (Announce{Lock}, its Undo, or commentsEnabled false) refuse replies; a ban (Announce{Block} with the community as target, or the moderator's own Block sent straight to us) shows as blocked_by on the community and refuses the persona there until the Undo. Checked live by the Lemmy scenario; no town cell yet.",
"closed": "2026-10-05",
"fixed_in": "A community's moderators lock threads and ban members (2026-10-05)"
},
{
"id": "G-0007",
"title": "Pixelfed files a direct message it fetches (rather than receives) as followers-only, so the sender's followers there can read it",
"match": {
"feature": "hide\\.direct",
"observer": "pixelfed"
},
"kind": "peer",
"phase": "upstream",
"code": "pixelfed 0.14.4 app/Util/ActivityPub/Helpers.php getScope(): anything neither public nor unlisted is 'private'; only the delivery path checks DirectMessageValidator::isDirect",
"opened": "2026-10-05",
"status": "open",
"note": "A delivered DM is handled as one. Resolving its address (a recipient pasting its link; the town's driver does it to reply) makes Pixelfed's instance actor fetch it, which PrivaPub allows since a recipient lives there, and the copy is stored with scope private."
},
{
"id": "G-0008",
"title": "A direct message to an Mbin account never arrives: Mbin takes a private message only as a ChatMessage",
"match": {
"feature": "deliver\\.direct",
"observer": "mbin"
},
"kind": "server",
"phase": "P3",
"code": "mbin 1.10.1 src/Service/ActivityPub/ActivityPubContent.php getVisibility(): a Note neither public nor to the author's followers throws 'PM: not implemented'; only CreateHandler's ChatMessage branch makes a private message",
"opened": "2026-10-05",
"status": "open",
"note": "Mbin's actors advertise nothing that says so, and PrivaPub never decides by a server's software name, so choosing ChatMessage for a recipient waits for the owner. Mbin's API also never starts a conversation with an account elsewhere, so nothing comes the other way through it."
}
]