Voting user
In the project, there's the concept of voting (which can be many types of voting: majority, consensus, quadratic, etc etc). Modeling this in the core will be difficult because the core is *chain agnostic and each chain has its own primitives for keys and crypto which we cannot make assumptions about.
So to skirt the issue, I'm proposing an idea called the voting user which would effectively be a hardcoded superadmin user type that can act on behalf of a company to do things like assign permissions, transfer resources, etc. The purpose of this is that voting would be handled by another system, but the voting user could be used to signal to the core that a vote occurred and could be verified against the company its enacted on.
This allows the core to stay storage agnostic while also accepting the result of votes as a matter of fact. It would not need to know the method of voting, its implementation details, or even the outcome of the vote...these things would all be details in another system. All it needs to know is that this other system called a vote and now wishes to enact the result via the basis core.
While the core does a lot of security checks, it does assume the information being passed in is legitimate (does not validate users, etc) and this would be yet another case of this: another system passing in data it knows the be correct that the core cannot verify. This is only as insecure if the layer implementing the core does so incorrectly, so while it's important to design the vote user api in such a way that it makes it difficult to misuse, it should not be any less secure than other parts of the core.
This allows modeling voting and democracy without needing to know the implementation details of it.
I believe this is core to #74, #86, and probably #72 (in regards to deciding various memberships).