Questions About Initiatives

Forwards and backwards are somewhat arbitrary. Let’s consider the case of an AUTHORS edge connecting a post to the person who wrote the post. There are two perspectives we could see it from:

  • we could think of the post as the “source”, and the author as the “destination”. This might make sense because cred mostly flows from the post to the author, rather than vice versa.
  • we could think of the author as the “source”, and the post as the “destination”. This might make sense because the author is the one who created the post

To me, both explanations seem plausible, which makes it hard to have a clear distinction between the “forwards” direction and the “backwards” direction. However, we needed a convention. The convention that @wchargin and myself came up with is:

Edges are named as verbs or verb phrases. For example, “@burrrata AUTHORS a post”, or “this topic REFERENCES another topic”, or “a pull request CONTRIBUTES TO an initiative”. By convention, we will consider the “FORWARD” direction of the edge to be whatever direction flows most naturally when naming the edge type, so that the source of the edge is the subject of the verb phrase, and the destination of the edge is the direct object.

Using our examples above:

Forward Edges

  • (source:author) AUTHORS (destination:post)
  • (source:post) REFERENCES (destination:topic)
  • (source:contribution) CONTRIBUTES TO (destination:initiative)

Backwards Edges

  • (destination:post) IS AUTHORED BY (source:author)
  • (destination:topic) IS REFERENCED BY (source:post)
  • (destination:initiative) IS CONTRIBUTED TO BY (source:contribution)

In general, since the direction of edges is set by semi-arbitrary linguistic convention, we need the ability for cred to flow both ways. In some cases, we really do want a bi-directional flow of cred: it makes sense that a post that I author receives some cred by virtue of having been written by a high-cred contributor, which gives it (including, e.g., its references) more weight than those written by someone who just arrived. However, cred flows more easily from the post to the author than vice-versa, which is accomplished by having a higher weight from post->author than from author->post.

Looking at the declaration, we can see this:

export const authorsPostEdgeType: EdgeType = deepFreeze({
  forwardName: "authors post",
  backwardName: "post is authored by",
  prefix: EdgeAddress.append(edgePrefix, "authors", "post"),
  defaultWeight: {forwards: 1 / 4, backwards: 1},
  description: "Connects an author to a post they've created.",
});

Notice how the forward weight (from author to post) is only 1/4, but the backward weight (from post to author) is a full (standard) 1.

In the case of initiatives and contributions: it makes sense to me that if a high-cred contribution was a contribution to an initiative, then the initiative acquires some cred for having been involved in high-cred activity. However, this could get gamed by people spuriously claiming that important contributions were contributions to their pet initiative; as with anything in SourceCred, we need to work together to ensure the integrity of the cred graph.