Description
Outbound Follow activities from my instance are never answered with Accept or
Reject by Loops-operated servers. The same code path completes successfully
against Mastodon, so this does not appear to be a signing or reachability
problem on my end.
Two cases:
-
Official relay. Subscribed to https://relay.loopsplatform.com/actor. The
Follow was delivered and the HTTP request succeeded. The subscription has
been pending since 2026-08-29 10:47:26 UTC. No Accept, no Reject, and no
inbound request of any kind from the relay.
-
Direct user follow. Followed dansup@loops.video at 11:42:30 UTC. Two seconds
later loops.video resolved my instance successfully:
11:42:32Z GET /.well-known/webfinger -> 200
11:42:32Z GET /ap/actor -> 200
11:42:34Z GET /.well-known/nodeinfo -> 200
11:42:34Z GET /nodeinfo/2.1 -> 200
from 64.225.4.82, UA: Loops/1.0.0-beta.14 (Laravel/13.x; +https://loops.video)
So the Follow arrived and discovery completed, four requests, all 200. Then
nothing. following_state is still 0 and no Accept was ever delivered.
Because a normal user follow is affected as well as the relay, this looks like
inbound Follow handling rather than anything relay-specific.
Expected: the Follow is answered with Accept (or Reject), and the relay
subscription moves from pending to active.
Actual: the remote completes discovery, then the Follow is silently dropped. No
Accept, no Reject, no error surfaced to the sending instance. The admin UI shows
"Awaiting acceptance" indefinitely, which is indistinguishable from the request
never having been processed.
Ruled out on my side:
- Instance keypair matches the published publicKeyPem
- Instance-actor key signature accepted 202 by mastodon.social (this is the key
RelayService::deliverActivityAsInstance signs relay Follows with)
- User key signature accepted 202 by mastodon.social, and Mastodon's Accept was
delivered back to my inbox and processed 202
- Signature format: (request-target) host date digest, rsa-sha256, Digest present
- /ap/actor valid, correct inbox / sharedInbox / publicKey
- /ap/actor/inbox and /ap/inbox reachable, correctly 401 unsigned POSTs
- nodeinfo valid, reports "name": "loops", "version": "1.0.0-beta.14"
- Reverse proxy access logging is enabled, so the absence of an Accept is
measured, not inferred
Full round trip with Mastodon works in both directions. Only Loops-operated
endpoints are silent.
Searched existing issues. #583, #527, #392 and #60 are related but all closed,
and none covers a Follow to the official relay staying pending after a
successful actor fetch.
Deployment: Docker, Caddy reverse proxy, Horizon running, federation enabled.
Instance: loops.dembo.io (single user, no local posts yet).
Reverse proxy access logs available on request.
Running the latest release (v1.0.0-beta.14, 2026-08-03). loops.video reports the
same version via nodeinfo, so both ends of the failing follow are on identical code.
Steps to reproduce
- Stand up a fresh Loops instance (1.0.0-beta.14) with federation enabled and
a valid instance actor.
- Subscribe to the official relay: RelayService::subscribe('https://relay.loopsplatform.com/actor')
- Observe the Follow is delivered and the subscription row is created with
status pending.
- Wait. No Accept or Reject is received; status stays
Awaiting Acceptance indefinitely.
- Separately, follow any loops.video account (e.g. dansup@loops.video) from a
local user.
- Check reverse proxy access logs: loops.video fetches webfinger, /ap/actor and
nodeinfo, all 200.
- Observe that no Accept is ever delivered and following_state remains 0.
Loops version
1.0.0-beta.14
Acknowledgements
Yes
Description
Outbound Follow activities from my instance are never answered with Accept or
Reject by Loops-operated servers. The same code path completes successfully
against Mastodon, so this does not appear to be a signing or reachability
problem on my end.
Two cases:
Official relay. Subscribed to https://relay.loopsplatform.com/actor. The
Follow was delivered and the HTTP request succeeded. The subscription has
been
pendingsince 2026-08-29 10:47:26 UTC. No Accept, no Reject, and noinbound request of any kind from the relay.
Direct user follow. Followed dansup@loops.video at 11:42:30 UTC. Two seconds
later loops.video resolved my instance successfully:
So the Follow arrived and discovery completed, four requests, all 200. Then
nothing. following_state is still 0 and no Accept was ever delivered.
Because a normal user follow is affected as well as the relay, this looks like
inbound Follow handling rather than anything relay-specific.
Expected: the Follow is answered with Accept (or Reject), and the relay
subscription moves from pending to active.
Actual: the remote completes discovery, then the Follow is silently dropped. No
Accept, no Reject, no error surfaced to the sending instance. The admin UI shows
"Awaiting acceptance" indefinitely, which is indistinguishable from the request
never having been processed.
Ruled out on my side:
RelayService::deliverActivityAsInstance signs relay Follows with)
delivered back to my inbox and processed 202
measured, not inferred
Full round trip with Mastodon works in both directions. Only Loops-operated
endpoints are silent.
Searched existing issues. #583, #527, #392 and #60 are related but all closed,
and none covers a Follow to the official relay staying pending after a
successful actor fetch.
Deployment: Docker, Caddy reverse proxy, Horizon running, federation enabled.
Instance: loops.dembo.io (single user, no local posts yet).
Reverse proxy access logs available on request.
Running the latest release (v1.0.0-beta.14, 2026-08-03). loops.video reports the
same version via nodeinfo, so both ends of the failing follow are on identical code.
Steps to reproduce
a valid instance actor.
status
pending.Awaiting Acceptanceindefinitely.local user.
nodeinfo, all 200.
Loops version
1.0.0-beta.14
Acknowledgements
Yes