radicle-link icon indicating copy to clipboard operation
radicle-link copied to clipboard

Feature: replicate Person data

Open rudolfs opened this issue 3 years ago • 3 comments

On a high level as a user of the protocol, I want Person data to be replicated whenever a project is replicated.

For example: a maintainer creates a project and that project gets replicated onto a seed node. Then a contributor follows this project and replicates it onto their machine. In this case I expect the maintainer's Person data to be available on the contributor's machine in the state::list_users list.

Required by: https://github.com/radicle-dev/radicle-upstream/pull/1912.

rudolfs avatar Jun 18 '21 10:06 rudolfs

\cc @CodeSandwich

rudolfs avatar Jun 18 '21 10:06 rudolfs

I want Person data to be replicated whenever a project is replicated.

Just to clarify here, Person data is replicated it's just that when we replicate a remote that isn't a delegate we only have their Person data under rad/self. It should be the case that rad/id is created and a symref made between rad/id and rad/self.

In this case I expect the maintainer's Person data to be available on the contributor's machine in the state::list_users list.

This should be already the case. It's when a maintainer (or someone else who is not a maintainer) decides to replicate a non-delegate.

FintanH avatar Jun 18 '21 10:06 FintanH

Unfortunately, this turns out to be a bug-turned-feature:

let A be some arbitrary project let P be some peer let M be a personal identity

If we are fetching A, and creating M implicitly (either because A/P/self exists, or because M is an indirect delegation of A), we will be replicating all of M. This may include M's blog, collection of animated GIFs, etc.

Most definitely, this is not what we want -- the user told us to replicate A, not M.

OP asked to be able to include self claims when iterating over personal identities. This can't be done in constant memory, because multiple self pointers can resolve to the same identity. It is also rather arbitrary to expect this to work: again, A is tracked, not M. It is easy to navigate to self refs in the context of A, and read the Person metadata from there. It is also easy to ask the user if they want to track M, because it appears in A.

However, the reason we track indirect delegations implicitly is the idea that they can revoke keys without having to update all projects for which they are in the delegations set. If we want to retain this, I think the only solution is to allow partial replication akin to fetchspecs.

kim avatar Sep 22 '21 14:09 kim