Thanks for all the feedback!
Wanted to chime in on two things in particular that I’ve seen come up a few times:
The reason for the extra segment is so that you can differentiate between a public record ref & a space reference. For instance
Record ref: at://did:ex:ample/com.example.coll/blah/
Space ref: at://did:ex:ample/com.example.space/blah/
Without the extra segment, there is no way to tell what is on the other side of these URIs (is it a record or a space?) without first doing a network request to resolve the relevant Lexicon. Space refs turn out to be very common in the code & I think it’s pretty important to avoid this sort of confusion.
Not trying to be cheeky, but this also depends on what you mean by “protocol”. Even though we commonly refer to atproto as a “protocol”, I actually think it’s a framework composed of several distinct protocols (DID, repo, sync, OAuth, etc) + a schema language (Lexicon).
In that sense, this is a distinct protocol. It is a new way of storing & syncing data that is distinct from the public protocol. However it shares all the other foundations (DIDs, OAuth, Lexicon, etc) with the public broadcast protocol. In that sense, it’s a part of the same framework which we refer to as “AT Protocol”.
I know this reads as annoying semantics, but it’s kinda the thrust of my point. I really don’t want this to be viewed as a separate, new thing, different from atproto. It’s part of atproto! Despite being a distinct data/sync protocol.