Pixelfed 0.14.4 (FrankenPHP with Horizon and the scheduler, on the shared Postgres and Redis) and WordPress 6 with ActivityPub 9.3.1 (on a new shared MySQL, WP-Cron run by a sidecar) are peers now, each with its scenario: Pixelfed 26 checks (photos both ways with alt text, its place arriving as Rome with its coordinates, comments, likes, a boost, edits and deletes), WordPress 17 (an Article with its title, our reply, like and boost kept as comments of their kinds, its edit and removal). Pixelfed has a town driver and a pair spec: 145 checks pass, 2 expected (G-0007). What they showed: Pixelfed names our posts by their page (fixed in26dac40); on PostgreSQL its migration making caption nullable never runs, so every remote boost failed (the pasture applies it); it files a DM it fetches as followers-only (G-0007, upstream); Passport refuses a token whose user id equals its client's id. WordPress signs with RFC 9421 first, which PrivaPub now verifies (c5a69d2). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LsXgEaXee4GCU1hwYgPJXw
112 lines
4.7 KiB
JSON
112 lines
4.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."
|
|
}
|
|
]
|