Skip to content

Fediverse: publish a drive's public actor over ActivityPub (federates end to end) - #217

Merged
michielbdejong merged 6 commits into
mainfrom
claude/server-fediverse
Sep 29, 2026
Merged

michielbdejong merged 6 commits into
mainfrom
claude/server-fediverse

Conversation

@michielbdejong

Copy link
Copy Markdown
Contributor

Stacked on #215 (the candidate16 pin); retarget to main once #215 merges.

What it does: the drive publishes a public ActivityPub actor.

  • Discovery: WebFinger and NodeInfo 2.1, and a Service actor with the host-held RSA key.
  • Collections: outbox, objects and activities from public posts.
  • POST /ap/outbox (auth: atomic, configured publishers only): stores a Message and queues a signed Create(Note) for each follower's shared inbox.
  • POST /ap/inbox (http-signature, the actor must be the signer): Follow is auto-accepted with a signed Accept; Undo, and Delete of the actor, remove the follower; a reply to our posts is stored once, as plain text.

Evidence: the real-host e2e passes at candidate16 against a local HTTPS ActivityPub peer: Follow, signed Accept, signed Create delivery, a stored reply, and Undo. There are 21 node tests. It hasn't been tried against real Mastodon.

Shared tooling, unified here for all four server-plugin PRs:

  • one serverEnv lane field (ATOMIC_*, reserved names excluded, port placeholders filled in);
  • manifest-http.mjs updated to candidate16's fetches and authOptional rules;
  • fixtures/plugin-manifest/ copied byte-for-byte from atomic-server 38306758.

The catalog entry stays enabled: false.

Limits: only shared inboxes at /inbox can be delivered to (not GoToSocial's per-user inboxes); no Update/Delete federation of posts; no publish UI; posts created directly in the folder aren't delivered (no afterCommit yet).

🤖 Generated with Claude Code

Michiel de Jong and others added 6 commits September 29, 2026 14:16
Brings integrations/fediverse/ over from origin/codex/plugin-fediverse
(98e709c) onto main, without the remoteStorage plugin that branch also
merged in. The files are unchanged; the catalog and lane entries follow
with the federation work.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ish via the host queue

WIP: the handler, manifest, node tests, peer fixture and real-host e2e,
plus lanes.json serverEnv plumbing for debug-build test seams. The e2e
needs atomic-server branch claude/plugin-fediverse-host.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… ATOMIC_PLUGIN_E2E_PEER_CA

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…t in the e2e

Also ports WebFinger match.rels (atomic-server claude/plugin-fediverse-host)
into integrations/tooling/manifest-http.mjs with the host's shared fixtures,
so catalog-requires and certify accept the manifest.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…iverse

Conflict: integrations/tooling/lanes.test.mjs (the shared-change
needsPluginRoutesBuild assertion) — took main's version, which already
derives the expectation from lanes.json.

Shared tooling unified for all server-plugin lanes landing on
candidate16 (fediverse, open-cloud-mesh, solid, atproto, remotestorage):
- lanes.json `serverEnv`: one rule — a non-empty object of ATOMIC_* names
  to strings that never sets SERVER_ENV_RESERVED (the plugin-routes gates
  and what serve.mjs derives from ports and store); covers the debug-build
  ATOMIC_PLUGIN_E2E_* seams and host settings such as
  ATOMIC_SOLID_OIDC_ISSUERS. serve.mjs `laneServerEnv` fills in
  {atomicServer}/{devServer}/{mockProxy}; run-lane.mjs passes it to the
  server and to the e2e specs.
- manifest-http.mjs: route field `fetches` (declared GET operations with
  effect read, gate surface "fetch `<id>`" at read-write, wildcard-host
  operations listed in enqueues or fetches) and authOptional on bearer,
  dpop or atomic, with candidate16's exact error texts.
- fixtures/plugin-manifest: every file copied byte for byte from
  atomic-server 38306758 testdata/plugin-manifest; source.json names it.

Fediverse README and catalog limitation: its host branch is in
candidate16. Catalog entry stays enabled: false.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant