Port ActivityPub multikey delivery fix #210
Labels
No labels
activitypub
admin
api
architecture
articles
auth
bug
cleanup
cli
comments
compatibility
config
contacts
content
database
deployment
design
dev-env
diagnostics
docs
documentation
email
enhancement
feature
federation
feed
health
homepage
implementation
integration
logging
mastodon
media
navigation
npm-packages
openapi
opengraph
packages
passkeys
preview
priority:high
priority:low
priority:medium
production
proof
proxy
public-routes
public-ui
release
safety
slug-api
slug-auth
slug-core
slug-federation
slug-media
slug-template
social
sources
status:active
status:canceled
status:done
status:inprogress
status:waiting
syndication
tailwind
template
test
web
webauthn
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
erik/slugkit#210
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Generated Slugkit template sites need the ActivityPub delivery key-id fix proven in the
slugkit.comgenerated site. Mastodon 4.7 can store Fedify 2 actor keys fromassertionMethodas#multikey-1, while Fedify's default{ identifier }send path signs outbound requests as#main-key. This caused Mastodon to reject deliveredAcceptandCreateactivities withPublic key not found for key ...#main-key.Reference implementation
Use the working generated-site code in
/Users/erik/Private/code/forgejo/slugkit.comas the primary reference.Relevant commits:
9f5e309(Sign ActivityPub sends with multikey id)4c302d6(Sign follower fanout with multikey id)Relevant files in that repo:
src/federation/keys.tssrc/federation/follow.tssrc/federation/delivery.tssrc/federation/routes.tssrc/federation/__tests__/routes.test.tssrc/federation/__tests__/delivery.test.tsRequirements
Followactivities are accepted with an outboundAcceptsigned using the Fedify 2 multikey id (#multikey-1) rather than the default legacy#main-keysender path.#multikey-1.publicKey.idunless a separate key-alignment task explicitly requires it.Acceptand follower fanout use#multikey-1and do not use#main-keyfor HTTP signature sender key ids.context.sendActivity({ identifier: ... })paths in the template site's ActivityPub code and either convert them or document why they are safe.Acceptance criteria
Acceptdelivery withhttps://<site>/users/<actor>#multikey-1.https://<site>/users/<actor>#multikey-1.publicKeyoutput remains compatible unless intentionally changed.Dependencies
Synced from todu comment by @todu on 2026-06-27T15:35:35.588Z
Review update
Acceptance criteria: 6/6 met. Blocking issues: 0. Warnings: 0.
Synced from todu comment by @todu on 2026-06-27T15:40:34.401Z
Close gate result
Readiness: READY
Evidence:
fix: sign ActivityPub delivery with multikey id) has been merged intomainand localmainis fast-forwarded at merge commite3013ff.#multikey-1signing intemplate/site/src/federation/keys.ts, outbound delivery paths indelivery.ts/follow.ts/routes.ts, and regression assertions inroutes.test.tsanddelivery.test.tsverify#multikey-1and not#main-key.publicKeycompatibility is preserved intemplate/site/src/federation/config.tsand actor route tests still assert#main-keypublicKey output.