Files
SocialPub/tools/pasture/town/gaps.json
T
thepraandClaude Opus 5.5 c47b6e5533 Personas have walls their followers write on
Owner decision of 2026-10-06 (G-0009, FEP-400e). A persona's actor names its wall (…/graffiti, sm:wall) and, in
Smithereen's privacySettings, that its followers may write on it. A public post that is not a reply, sent with the wall
as its target by an account following the persona, is hosted: the persona is notified, it reaches the persona's and its
followers' homes, and the followers' servers and the author's are told with Add{Note}. The persona deletes it with
DELETE /api/v1/statuses/:id, which sends Remove{Note}; Smithereen deletes the post then. The wall lists the persona's
public posts that start a thread and what was written on it.

Elsewhere: an account's Add{Note} on its own wall shows the post to its followers here as on that wall (privapub.wall on
the status), and its Remove takes it away. An Add or Remove naming a collection of the account's own server PrivaPub
does not know has its document read again first, at most hourly: accounts kept before walls were read had none.

Checked live: Smithereen 40 checks (G-0009 closed); GoToSocial and Mastodon unchanged (121).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LsXgEaXee4GCU1hwYgPJXw
2026-10-06 08:17:10 +02:00

142 lines
6.7 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 first direct message to a Lemmy 0.19 or Mbin account never arrives: both take a private message only as a ChatMessage",
"match": {
"feature": "deliver\\.direct",
"observer": "(mbin|lemmy19)"
},
"kind": "server",
"phase": "P3",
"code": "lemmy 0.19.20 crates/apub/src/protocol/objects/chat_message.rs: ChatMessageType has ChatMessage alone, so a Create{Note} to a person answers 400 (Lemmy 1.0 takes a Note); mbin 1.10.1 src/Service/ActivityPub/ActivityPubContent.php getVisibility(): a Note neither public nor to the author's followers throws 'PM: not implemented'",
"opened": "2026-10-05",
"status": "closed",
"note": "Closed by the owner's decision of 2026-10-05: a direct message to one account goes as a ChatMessage when the account writes to us that way, or when its server's NodeInfo names Lemmy before 1.0 or Mbin (the one place PrivaPub decides by software). Checked live: Lemmy 0.19's first message and Mbin's thread both ways.",
"closed": "2026-10-05"
},
{
"id": "G-0009",
"title": "A post someone writes on a Smithereen user's wall never reaches that user's followers here: Smithereen sends wall posts only to servers whose actors have a wall",
"match": {
"feature": "wall\\.others",
"observer": "smithereen"
},
"kind": "server",
"phase": "P3",
"code": "smithereen 1.0.3 ActivityPubWorker.sendAddPostToWallActivity and sendActivityForPost: requireFeature(Server.Feature.WALL_POSTS), which ObjectLinkResolver.maybeUpdateServerFeaturesFromActor sets only for a server whose actors have sm:wall",
"opened": "2026-10-05",
"status": "closed",
"note": "Closed by the owner's decision of 2026-10-06: a persona's actor names its wall (sm:wall, FEP-400e), so Smithereen sends PrivaPub what is written on its users' walls (Add{Note}, shown to their followers here as on that wall), and its users may write on a persona's wall when they follow it. Checked live: Smithereen 1.0.3 scenario, 40 checks.",
"closed": "2026-10-06"
}
]