T12, T13: Sharkey and Akkoma in the pasture, and two bugs Akkoma found
Sharkey 2025.4.7 is the Misskey peer under another name, image, database, Redis db and home. Its scenario is Misskey's plus edits both ways and the FEP-e232 quote tag: 40 checks pass. Akkoma 3.20.1 publishes no image, so tools/pasture/images/akkoma installs its OTP release, pinned by checksum, and appends Caddy's CA to the CA bundles the release ships. Its scenario has 44 checks, which pass three runs in a row: - follows, posts, CW, followers-only posts and the published time; - replies, likes, boosts and their undos; - EmojiReact both ways and withdrawn; - DMs, polls, quotes, media, edits with history and deletes, both ways; - unfollow, block, unblock and statistics. The two bugs, both fixed: - Followers-only posts arrived as DMs on Pleroma and Akkoma. They call a post private only if an address in `to` contains "/followers" or its cc is not empty. Ours is /groupies, and a post mentioning nobody had an empty cc. The followers collection is now named in cc as well, which tells nobody anything new. - Akkoma's open polls showed as ended and refused votes. Akkoma carries an open poll's end in `closed` and sends no `endTime`. A `closed` in the future is now read as the end. Neither of these is a PrivaPub bug: - Akkoma's Linkify never takes @user@host.test for a mention, so its DM addresses alice with to[]. - Its API never reports a remote blocker as blocked_by, so the block is read from its database. Also in this commit: - The rate limits are configuration (RateLimits: AccountsPerMinute, InboxBurst, InboxPerTenSeconds), with the old values as defaults. The pasture raises the accounts limit, which back-to-back runs from one address had hit. - A new Lemmy never sends what it queued for a server before it started that server's send worker, so the scenario waits for the worker before its first follow. All six peers in one clean pass: GoToSocial 54 (+1 expected), Mastodon 49 (+2), Misskey 35, Sharkey 40, Akkoma 44, and Lemmy 20 (+3) once the worker wait was added. 642 tests pass. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01ELjqpznMFMNrJoJUj6K5p2
This commit is contained in:
1 parent
aa7e43a61e
commit
ab526ed291
22 files changed
+361
-19
No files matched your search
@@ -325,6 +325,11 @@ Firefish is dead (its site has answered 410 since February 2025).
|
||||
|
||||
A new Misskey 2026 starts with `federation: none`.
|
||||
|
||||
**Pasture evidence (2026-10-03, Sharkey 2025.4.7, `tools/pasture/scenarios/sharkey.sh`):** 40 checks pass, the whole
|
||||
Misskey scenario under Sharkey's name and then what only Sharkey does:
|
||||
- its edits arrive as edits, and ours reach it;
|
||||
- its quote carries the FEP-e232 `Link` tag and is understood.
|
||||
|
||||
### Pleroma 2.10.2 and Akkoma 3.20.1
|
||||
|
||||
**Emits**
|
||||
@@ -336,6 +341,7 @@ A new Misskey 2026 starts with `federation: none`.
|
||||
- **Edit history:** `formerRepresentations`, an OrderedCollection of earlier versions.
|
||||
- **Reactions:** `EmojiReact{content: ":name:", tag:[Emoji]}`, several per user; separate from Like.
|
||||
- **Polls:** `votersCount` (Pleroma 2.10.1, Akkoma 3.20). A vote is a `Note{name, inReplyTo, to:[], cc:[owner]}`.
|
||||
An open poll's end is in `closed`, and Akkoma sends no `endTime` (pasture, 3.20.1).
|
||||
- **Pleroma only:**
|
||||
- `ChatMessage`, sent only to actors with `capabilities.acceptsChatMessages`;
|
||||
- `Listen{Audio}`;
|
||||
@@ -348,6 +354,8 @@ A new Misskey 2026 starts with `federation: none`.
|
||||
- **Pleroma's inbox guard answers 400 for unknown activity types:** `Move`, `QuoteRequest` and `Bite` are not on its
|
||||
list (develop, 2026-09-30). Treat that 4xx as final.
|
||||
- **Signatures (Akkoma):** `host` must be signed and match; signatures up to 2 h old and up to 40 min in the future.
|
||||
- **Visibility is guessed from addresses:** a post is private only if an address in `to` contains `/followers` or its
|
||||
`cc` is not empty; otherwise it is direct. Our followers-only posts therefore name `/groupies` in `cc` too.
|
||||
- **Activity ids** must be at least 8 bytes.
|
||||
- **ObjectAgePolicy** (default in both) delists anything older than 7 days, so `published` must be accurate.
|
||||
- **Quotes:** Pleroma's InlineQuotePolicy rewrites incoming quotes into "RT: url" text. **Neither reads FEP-044f
|
||||
@@ -364,6 +372,35 @@ A new Misskey 2026 starts with `federation: none`.
|
||||
| `ChatMessage` in as a direct message (also needed for Lemmy, Mbin and PieFed); advertise `acceptsChatMessages` only once it is answered | P1 (in), P3 (out) | `visibility: direct`, Conversations |
|
||||
| `Listen`, `vcard:bday`, `backgroundUrl` | P3 | own |
|
||||
|
||||
**Pasture evidence (2026-10-03, Akkoma 3.20.1, `tools/pasture/scenarios/akkoma.sh`):** 44 checks pass, three runs in a
|
||||
row. Akkoma publishes no image, so `tools/pasture/images/akkoma` installs its OTP release, pinned by checksum. Covered:
|
||||
- discovery and follows both ways;
|
||||
- posts, CW and followers-only posts;
|
||||
- the `published` time kept;
|
||||
- replies both ways and their notification;
|
||||
- likes and boosts both ways with their undos;
|
||||
- `EmojiReact` both ways and its withdrawal;
|
||||
- DMs both ways and off public timelines;
|
||||
- polls and votes both ways;
|
||||
- quotes both ways (`quote_id` out of its API, `quoteUri` in ours);
|
||||
- images with alt text both ways;
|
||||
- edits with history, and deletes, both ways;
|
||||
- unfollow, block and unblock;
|
||||
- statistics.
|
||||
|
||||
It found two bugs, both fixed:
|
||||
- **Followers-only posts arrived as DMs.** Akkoma, like Pleroma, calls a post private only if an address in `to` contains
|
||||
`/followers` or its `cc` is not empty. Ours is `/groupies` and a post mentioning nobody had an empty `cc`. Followers-only
|
||||
posts now name the followers collection in `cc` as well, which tells nobody anything new.
|
||||
- **Open polls were shown as ended, and votes refused.** An open Akkoma poll carries its end in `closed`, with no
|
||||
`endTime`. A `closed` in the future is now read as the end.
|
||||
|
||||
Seen along the way:
|
||||
- Its Linkify never takes `@user@host.test` for a mention, whatever `validate_tld` says, so in the pasture Akkoma
|
||||
addresses us with Pleroma's `to[]`. Real top-level domains are unaffected.
|
||||
- It records our `Block` (`user_relationships`) but never reports a remote blocker as `blocked_by`.
|
||||
- Its streamer crashes rendering a new DM conversation (`ConversationView`, a nil `last_status`); delivery is unaffected.
|
||||
|
||||
### Lemmy: 0.19.20 live (lemmy.ml); 1.0.0-beta.2 (2026-09-25) in beta since May
|
||||
|
||||
join-lemmy.org's federation page is out of date. Current Lemmy neither sends nor reads `stickied` or `commentsEnabled`
|
||||
@@ -458,6 +495,10 @@ What it showed:
|
||||
- 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`.
|
||||
- **1.0 sends nothing it queued for a server before it started that server's send worker.** A worker starts, up to a
|
||||
minute after the server is first seen, at the newest activity and skips everything older. On a clean pasture its
|
||||
first Follow of our community was lost, so the scenario waits for the worker (`federation_queue_state`). On the
|
||||
public network the same applies to the first thing a Lemmy sends to a PrivaPub it has just discovered.
|
||||
- 0.19 cannot join the pasture: its rustls trusts only its bundled roots, never Caddy's CA.
|
||||
|
||||
### PieFed 1.7.17 and Mbin 1.10.1
|
||||
|
||||
Reference in new issue
Block a user