Title: Govern OpenCollective using SourceCred
Use Case Overview
OpenFoobar is an open source org that’s using open collective to raise money to support the development of their software. Currently the founder of the project, Anne, has total control over which invoices get approved, aka who money contributed to the project goes to. She wants to let the community decide, but only community members who are genuinely invested in the project, not random people or total newcomers.
She decides to use SourceCred to determine who should be given decision-making power in the community, and picks a number of metrics, like PRs contributed and props received, that seem reasonable to her. Now she needs to connect SourceCred to OpenCollective.
Example User Flows
Flow 1
Trigger: a user requests to join the group of people who decide on approving invoices
Preconditions:
- the OpenFoobar group has already been set up on OpenCollective, SourceCred and Metagov Prototype, and the accounts connected
Steps:
- a user, Bose, requests on PolicyKit to be added to the community (not sure how roles work in PolicyKit, but if there’s the concept of ‘people with role X can vote in a given situation’, then say they request to be given role X)
- the OpenFoobar community on PolicyKit has a policy saying that anyone with SourceCred above N can have that role/join that community
- the PolicyKit community queries the Metagov Prototype asking “what is the cred of Bose in our corresponding SourceCred community?” MetaGov queries the appropriate community and returns the answer to PolicyKit
- given that information, PolicyKit is able to reject or accept Bose’s request
Flow 2
Trigger: a user submits an invoice to OpenCollective
Preconditions
- the OpenFoobar group has already been set up on OpenCollective, SourceCred and Metagov Prototype, and the accounts connected
- at least one person has gotten enough “cred” in SourceCred to qualify
- there is existing money in OpenCollective to be distributed
Steps
- a user submits an invoice to OpenCollective
- OpenColletive notifies the Metagov Prototype
- The Metagov Prototpe notifies PolicyKit
- PolicyKit hosts a vote on whether to approve the invoice
- PolicyKit notifies MetaGov of the outcome of the vote
- Metagov Prototype messages OpenCollective to approve or reject the invoice
Thinking through the above steps as an engineer because I can’t help myself
- a user, Clarisa, submits an invoice to OpenCollective
- OpenCollective knows somehow to check the Metagov Prototype instead of just asking Anne (so this will definitely require some changes by OpenCollective). It sends a notification to the Metagov Prototype server that an invoice has been submitted. (Alternatively, it might use a Metagov Protocol to store locally the information about which governance platform to ask for approval, but for now let’s assume a server.)
- Either the Metagov server matches all actions from the OpenCollective OpenFoobar group to their corresponding PolicyKit community, or perhaps it matches the action ‘approve invoices’ specifically, but in either case it sends a message to a PolicyKit server saying essentially, “An invoice has been submitted, is it approved?”
- The PolicyKit community has a policy which says anyone with role X in the community can vote on the invoice, so it starts a vote of those people. When the vote is complete, it sends a message either to OpenCollective directly or via the Metagov prototype saying Clarisa’s request is approved or not approved.