Closed
Description
Background: https://bsky.social/ , https://atproto.com/docs, https://github.com/bluesky-social/atproto.
...switched to the now label for tracking roadmap and current tasks.
Blocking:
- ATProto: render DIDs on user pages as handles #948
- Cron jobs for /queue/atproto-poll-notifs, -commits #942
- Opt in/out prompt #880
- Polish AP and Bluesky user pages #825
- Bluesky: update docs #823
- Change Bluesky abbreviation from
atproto
tobsky
#961 - Support for moderation activities granary#596
- Bluesky: truncate string values to length limits granary#717
- Entryway PDS resolves handles after account migration bluesky-social/atproto#2280
Nice to have:
- Protocol icons #939
- ActivityPub => ATProto @-mentions #957
- ActivityPub => ATProto hashtags #980
- ATProto => ActivityPub link previews #958
- ActivityPub => ATProto profile update #960
- Opt in via follow or DM should override profile opt-outs (#nobridge, #nobot, Bluesky "hide from logged out view") #974
- Follows from non-opted-in users don't work #975
- Only deliver a reply to a given protocol if its in-reply-to is also on that protocol #981
- ActivityPub => ATProto: handle usernames with _ and ~ chars #982
- ATProto: convert polling for posts/notifs to task per user #943
- Use Bluesky firehose instead of polling #978
- DM bot user to prompt remote users to enable (opt into) the bridge #966
- AP and web => ATProto: Support custom handle domains for bridged accounts #826
Manual tests:
-
user pages
- ActivityPub
- ATProto
- support handle in URL as well as DID
-
web => ATProto
-
ATProto => web
-
ActivityPub => ATProto
- create bridged user in Bluesky (original)
- ...with complete profile (name, bio, picture, banner, links)
- update profile, ActivityPub => ATProto profile update #960
- follow (original)
- post, with image (original)
- reply (original)
- ...with @-mention: ActivityPub => ATProto @-mentions #957
- like (original)
- repost (original)
Haven't gotten this working yet, not sure why. Tried reposting this post and this post on indieweb.social, UI shows that it works fine, but BF never got inbox delivery of theFinally got one! Maybe indieweb.social's queue was just backed up.Announce
s, and when I click the boosts link on those posts in indieweb.social, eg here, they don't show any reposts. Especially odd since likes are working, and reposts are so similar. - @-mention (original)
- create bridged user in Bluesky (original)
-
ATProto => ActivityPub
- discover user (original)
- follow (original)
- post (original)
- ...with image (original)
- ...with link preview: ATProto => ActivityPub link previews #958
- reply (original)
- like (original)
- repost (original)
- @-mention, ATProto => ActivityPub @-mentions #959
Implementation tasks:
- Fully implement
ATProto
protocol class - Separate service for serving ATProto's
subscribeRepos
#630[ ] port arroba's websocket server to asyncio?- Look into Eventarc for delivering new commits to websocket subscribers arroba#6
- map object ids to originals with
Object.copies
. (inObject.as1
? orProtocol._targets
? or...?) - add
User.copies
, use it similarly to mapactor
/author
etc targets -
receive
task queue. (later hopefully we'll migrate incoming webmentions and AP inbox deliveries to this too, but that's complicated.) - poll for notifications periodically, per user (How do federated notifications work? bluesky-social/atproto#1538 (reply in thread) )
- Poll for posts in pull-oriented protocols #694
- convert ids and handles, both directions
- serve WebFinger for ATP users
- milestone: BF user profiles are visible in the fediverse
- User discovery for push based protocols #647 (Will user search/discovery in clients ever trigger handle resolution? bluesky-social/atproto#1650)
- create
_atproto
TXT DNS records on the fly in GCP DNS (000b08f) - send
requestCrawl
to the BGS on startup -
ATProto.send
: ignoreAccept
s ofFollow
s - milestone: successfully federate a non-Bluesky user into the federation sandbox
- milestone: successfully federate a Bluesky user to another protocol
- milestone: successfully federate a non-Bluesky post into the federation sandbox
- milestone: successfully federate a federation sandbox post to another protocol
- decide whether we have a BF protocol per lexicon/app, eg Bluesky, or just one for all of ATProto. We'd prefer the latter, but we need some app-specific semantics. Not sure yet if we can avoid all of those...
- Event subscription handler hangs after a while lexrpc#8
[ ] backfillk256_pem
into existingWeb
andActivityPub
users- XRPC: https://lexrpc.readthedocs.io/, https://github.com/snarfed/lexrpc
[ ] Validate data against lexicon schemas (optional)
- Data conversion to/from
app.bsky
lexicons in granary: - Bridgy Fed serves most
app.bsky
read XRPCs, eg https://fed.brid.gy/xrpc/app.bsky.feed.getAuthorFeed?author=snarfed.org - finish unifying
protocol.receive
across protocols? - Federation
- MST
- signed commit chain
- blob serving
- guarantee that commit chains we serve are immutable (except for rebases)
ingest/sync other PDSes' repos[ ] DID resolution[ ] did:web serving?com.atproto.sync
XRPC methods:[ ] getBlob[ ] getBlocks- getCheckout
[ ] getCommitPath- getHead
- getRecord
- getRepo
[ ] listBlobs- listRepos
[ ] notifyOfUpdate[ ] requestCrawl[ ] subscribeRepos
com.atproto.server
XRPC methods:[ ] createAccount- createSession
- getSession
- refreshSession
com.atproto.repo
XRPC methods:- applyWrites
- createRecord
- deleteRecord
- describeRepo
- getRecord
- listRecords
- putRecord
[ ] rebaseRepo[ ] uploadBlob
- UI
- support multiple user (protocol) types
- support
Follower
s with different protocols