Hubzilla 11.4.1 with its pubcrawl addon (peers/hubzilla.sh): the hlhd image on the shared MySQL, a cron sidecar, hzuser
and hzfriend made through Hubzilla's own PHP as public channels that speak ActivityPub. scenarios/hubzilla.sh, 20
checks: follows, posts, comments, likes, edits and deletions both ways, and a third channel's comment that the thread's
owner passes on, which PrivaPub takes on its FEP-8b32 proof. Known gap G-0010 (upstream): Hubzilla 11 keeps a follower
after its Undo{Follow}.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LsXgEaXee4GCU1hwYgPJXw
156 lines
7.4 KiB
JSON
156 lines
7.4 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"
|
|
},
|
|
{
|
|
"id": "G-0010",
|
|
"title": "Hubzilla keeps an ActivityPub follower after its Undo{Follow}: the follower's permissions stay granted",
|
|
"match": {
|
|
"feature": "unfollow",
|
|
"observer": "hubzilla"
|
|
},
|
|
"kind": "peer",
|
|
"phase": "upstream",
|
|
"code": "hubzilla 11.4.1 Zotlabs/Lib/Activity.php unfollow(): AbConfig::Delete($channel, $xchan, 'system', 'their_perms'), while Hubzilla 11 keeps a connection's permissions one per row under the category their_perms",
|
|
"opened": "2026-10-06",
|
|
"status": "open",
|
|
"note": "The Undo is verified and handled; nothing changes. PrivaPub drops what Hubzilla goes on sending, as from an account no persona follows."
|
|
}
|
|
]
|