Skip to content

Support account migration (FEP-7628) #47

Description

@dahlia

BotKit has no notion of account migration. A bot's actor object carries no alsoKnownAs, the inbox listener chain has no handler for Move, and a bot has no way to point its followers somewhere else. None of the three strings alsoKnownAs, Move, or movedTo appears anywhere in packages/botkit/src/.

The fedidevs repeater account on channel.org is losing its home because the instance shuts down in October, and its maintainer considered rebuilding it as a BotKit bot, but assumed the followers couldn't come along. With the current code that assumption is right, though it doesn't have to be: for a Mastodon account to move to a BotKit bot, the bot only needs to advertise the old account as an alias.

The protocol is the one Mastodon has used since 2019. The old actor sends a Move activity whose object is itself and whose target is the new actor. Followers' servers fetch the target, check that its alsoKnownAs lists the old actor, then follow the new actor and unfollow the old one. The old actor also gets a movedTo property pointing at the new one. FEP-7628 writes this down, adds a pull mode in which the new actor sends the Move, and defines copiedTo for an old actor that stays active after the move. It reached FINAL status on August 26, 2026.

What Fedify already provides

Fedify ships the Move activity class, and its actor classes expose alsoKnownAs as aliases/aliasIds and movedTo as successor/successorId. copiedTo is not in Fedify's vocabulary yet. What's missing is the migration flow and public API in BotKit itself.

Decisions already made

Two actors count as linked when the target's alsoKnownAs contains the origin. This is the check Mastodon runs on every incoming Move, and the one its migration form runs before it lets a user move at all. FEP-7628 also accepts FEP-c390 identity proofs and rel-me links as ways to link actors, but supporting only alsoKnownAs keeps BotKit interoperable with everything that implements migration today.

Only push mode is in scope for now. Mastodon drops any Move whose actor is not its object, so a pull-mode Move would not reach anyone on the largest implementation. copiedTo is out of scope too, both because Fedify doesn't have it and because nothing in this tree needs an old actor that stays active.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Fields

    Priority

    None yet

    Effort

    None yet

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions