Relays: PrivaPub reads from the relays its configuration names

Federation:Relays names relays by their actor (or inbox) address; the instance actor follows Public at each, as Mastodon
subscribes, a minute after start and every six hours (asked again a day after no answer or a refusal, undone when a
relay is no longer named). What an accepted relay passes on comes to the federated timeline and nobody's home: a public
post it forwards (Activity-Relay), read again from its origin like any forwarded post, and a post it announces
(aode-relay), kept as its author's and never as the relay's boost. Nothing of a persona's is sent to a relay; sending
public posts there waits for the owner.

The pasture gains both relays (peers/relay.sh, peers/aoderelay.sh) and scenarios/relay.sh, 13 checks. The village
backlog is clean: 2574 checks pass, one known gap (Misskey's).

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 23:11:59 +02:00
1 parent 1c7d1ece9c
commit f6fc0c535c
22 files changed
+542 -24

No files matched your search

+3 -8
View File
@@ -1,17 +1,12 @@
# Interop backlog
Generated by `tools/pasture/town.sh backlog --write` from `village-20261005-111857` on 2026-10-05. Do not edit by hand: fix the cause, or record a known gap in `tools/pasture/town/gaps.json`, and generate it again.
Generated by `tools/pasture/town.sh backlog --write` from `village-20261005-220341` on 2026-10-05. Do not edit by hand: fix the cause, or record a known gap in `tools/pasture/town/gaps.json`, and generate it again.
Checks: 2558 pass, 6 fail, 1 known gaps, 0 known gaps now passing.
Checks: 2574 pass, 0 fail, 1 known gaps, 0 known gaps now passing.
## New failures
- **`count.boost.public|*|misskey|control`**: 1 failing. Example: p19 expected `>=1`, got `0`.
- **`count.like.community|*|mastodon|control`**: 1 failing. Example: p161 expected `>=1`, got `0`.
- **`count.boost.public|*|sharkey|control`**: 1 failing. Example: p175 expected `>=1`, got `0`.
- **`edit.text|privapub|gts|out`**: 1 failing. Example: p4 expected `(edited)`, got `l market harvest rain quiet tide garden festival bridge (p4)`.
- **`client.render.image.followers|privapub|decepub|local`**: 1 failing. Example: p15 expected `None`, got `picture 'picture 1 of p15' did not load`.
- **`client.render.image.public|privapub|decepub|local`**: 1 failing. Example: p33 expected `None`, got `picture 'picture 1 of p33' did not load`.
None.
## Known gaps still failing
+14
View File
@@ -753,6 +753,20 @@ 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.
### Relays: Activity-Relay 2.0.9 and aode-relay 0.3.129
- **Activity-Relay** takes a subscription as a `Follow` of `Public` from an actor with a shared inbox (Mastodon's way)
and passes every public activity a subscriber sends on to the others as it came, signed with the relay's key; only a
follower whose actor ends in `/relay` (LitePub's way) gets an `Announce` instead.
- **aode-relay** takes either kind and announces the post from its own actor.
- A forwarded post carries its author's LD signature when Mastodon wrote it; PrivaPub does not verify LD signatures,
so it reads every relayed post again from its origin (one signed request each). Verifying them, or FEP-8b32 proofs,
would save that request.
- **Pasture evidence (2026-10-05, `tools/pasture/scenarios/relay.sh`):** 13 checks pass: PrivaPub's instance actor
subscribes to each relay and takes its Accept; Mastodon subscribes; a public post of a Mastodon account nobody here
follows reaches the federated timeline, forwarded by Activity-Relay and announced by aode-relay (as its author's,
never as the relay's boost), and nobody's home; nothing of a persona's goes to a relay.
### 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
+3 -1
View File
@@ -682,7 +682,9 @@ it, raw where it doesn't.
- FEP-8b32 proof verification;
- `hs2019` with SHA-512.
- **Discovery:**
- a relay client for both relay styles;
- a relay client for both relay styles: **reading done 2026-10-05** (`Federation:Relays`; forwarded posts read again
from their origin, announces unwrapped; checked live against Activity-Relay and aode-relay); sending public posts to
relays waits for the owner;
- instance actor discovery (FEP-d556, FEP-2677);
- `implements` (FEP-844e).
- **Mastodon API:** ~~streaming WebSocket~~ (done 2026-10-05: `/api/v1/streaming` as a WebSocket and as server-sent