Pasture: Smithereen 1.0.3, and failed server descriptions retried

Smithereen joins the pasture (tools/pasture/peers/smithereen.sh): its image on the shared MySQL, with imgproxy and a
file server behind Caddy, a JDK trust store with the pasture's CA, accounts from its signup form, and a password grant
for a local application. scenarios/smithereen.sh drives its VKontakte-like API: friends as mutual follows, wall posts,
comments, likes, reposts (quotes there), polls, edits, deletions, private messages, the unfollow and statistics, 30
checks. A post on someone else's wall never reaches PrivaPub, since Smithereen sends it only to servers whose actors
publish a wall: G-0009, waiting for the owner.

PrivaPub: a server description that failed (Smithereen serves no NodeInfo until it has a description) frees its week,
so the server's next arrival asks again instead of a week later.

The shared Postgres takes 400 connections: at 100 the village seed ran it dry (Sharkey's API answered 500, Misskey
dropped deliveries). The seeder records a follow that stands from an earlier seed when the step itself fails, so the
checker no longer expects that follower to see nothing.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LsXgEaXee4GCU1hwYgPJXw
This commit is contained in:
thepraandClaude Opus 5.5 committed 2026-10-05 22:03:35 +02:00
1 parent 7b0377c85f
commit 5f150b7a59
12 files changed
+367 -5

No files matched your search

+25
View File
@@ -753,6 +753,31 @@ PeerTube's own instance account announces each new video too, which we drop: nob
follow only PeerTube-like channels and accounts, never a persona. It checks the `Host` header against its own name,
without a port, before it gives out its OAuth client.
### Smithereen 1.0.3
- **Walls:** a post is a `Note`; one written on someone else's wall carries the wall (`sm:wall`, FEP-400e) as its
`target`, and the wall's owner tells its followers with `Add{Note}`. Smithereen sends both only to servers whose
actors have a wall (`Server.Feature.WALL_POSTS`, learnt from an actor's `sm:wall`), so PrivaPub never sees a post on
someone else's wall (G-0009: a persona's wall waits for the owner). Comments are replies addressed to the post's
author, never to followers.
- **Friends are mutual follows.** A request is an `Offer{Follow}` sent only to actors with
`sm:supportsFriendRequests`; anyone else gets a plain `Follow`, so a persona is followed, and following back makes
them friends there.
- **A repost is a quote:** a `QuoteRequest` to the quoted author, then a `Create{Note}` quoting the post. Its API
answers 500 when `wall.repost` has no `message`, even an empty one.
- **Private messages** are `Note`s to their recipients, in threads.
- **Polls:** a vote is a `Note` with `name` and `inReplyTo`, as Mastodon's.
- **Running it:** its NodeInfo throws until the server has a short description (`Objects.requireNonNull` where
`requireNonNullElse` was meant); its HTTP client refuses private addresses; its schema updater makes stored
functions, which MySQL takes only with `log_bin_trust_function_creators`. A database whose first update failed is
left without its triggers, and the server then answers 404 to activities about anything it knows.
- **Pasture evidence (2026-10-05, Smithereen 1.0.3, `tools/pasture/scenarios/smithereen.sh`):** 30 checks pass and one
gap is expected (G-0009): smuser follows alice and she follows back, which makes them friends there; wall posts both
ways; comments both ways; likes both ways; smuser's repost is a quote alice's policy lets in, and alice's boost is a
repost there; smuser's poll and alice's vote; edits and deletions both ways; private messages both ways; the
unfollow; statistics. PrivaPub changed for it: a server description that failed is asked again on the server's next
arrival instead of a week later.
### Loops (1.0.0-beta.14) and Pixelfed (0.14.4)
- **Loops:**
+4
View File
@@ -278,6 +278,10 @@ and circles (see Owner decisions).
| An account a persona follows moves | **Move the follow, as Mastodon does.** After a verified `Move` the persona follows the new account (a Follow to its server) and unfollows the old, in the same lists; a mute or a block of the old account carries over. |
| Should PrivaPub pass on replies to a persona's posts? | **Yes, "the fediverse is broken without".** A public or unlisted reply that someone on another server writes to a persona's post goes on to the persona's followers, as Mastodon forwards it: the activity as its author signed it, never to the replier's own server, never for a post that is local-only, in a group or not shown to followers. Its edits and deletion follow the same way. |
**Waiting for the owner:** a persona's wall (G-0009). Smithereen sends a post written on someone else's wall only to
servers whose actors publish a wall (`sm:wall`, FEP-400e). Publishing one would also let Smithereen's users write on a
persona's wall, and PrivaPub would then host their posts and announce them with `Add{Note}`.
## Libraries (researched; no maintained .NET ActivityPub library exists, so Letterbook and Iceshrimp.NET both wrote their own)
| Area | Choice |