We will structure the compiler team as a set of members as well as a set off elected officers.
Membership. The compiler team "members" and "contributor" levels are merged and simply called members; being a member gives you the same benefits as a contributor today (r+ rights, review privileges, membership in the rust org, etc) as well as the right to serve as an officer and to vote in officer elections.
Officers. We have a number of officers with specific roles. These officers are typically elected from the set of compiler team members, though the leads may agree to permit a non-member in exceptional cases. One person may fulfill multiple offices but this is discouraged. The roles include:
Rotation and outgoing officers. Note that each office has an "even number" of people occupying it. The idea is that each election we elect one new person to the office, and they will serve for two terms. During the second term, they are termed the "outgoing officer", and they have the responsibility of mentoring and training the new officer (as well as helping out). In the case of the technical leads, there are two outgoing officers.
We hold elections every year. The term of office is therefore two years in total, with the second year being in "outgoing" capacity.
The slate of candidates is selected via nomination. There is a 1 week nomination period in which members of the team can nominate other members for a particular office. The nominee must agree to the nomination. The same person can be nominated for any number of offices.
Elections are held by "approval voting". This means that each member may vote for any number of candidates within a given election. The candidate with the highest number of votes wins. Ties are resolved via random selection or by mutual agreement of the candidates.
If the same person wins multiple offices, then they will typically resign from all but one, and the next highest vote count will be selected as winner. – what happens if there is no next highest vote in more than one election?
In cases where an office resigns or is removed from office, we hold a special election. The procedure is the same as above except that the election is held for only one office. The winner will serve out the remainder of the term for the officer that they replaced.
Outgoing officers are strongly discouraged from running for the same office again, but it is not strictly forbidden. This policy does not apply if the outgoing officer was voted into the office in a special election owing to resignation or removal of the previous officeholder.
??? – should we forbid it, at least in cases where there is another candidate? Requires the team leads to sign off on it? Forbid it completely for team leads, perhaps?
Officers may resign at any time, in which case a special election is held to select their replacement. That replacement will serve out the remainder of their term and may then run again as normal in the ordinary elections.
If an officer is removed from the compiler team because of Code of Conduct violations or any other reason, they are also removed from their post as officer and a special election is held to select their replacement. If the officer leaves the compiler team in an amicable fashion, however, the team leads may opt to permit them to serve out their term.
XXX do we need a policy for removing an officer that is not tied to code of conduct? Maybe. If we see that someone is not doing their duty, I think we would first encourage them to resign. The question is what they refuse to do so but still continue not to do their duty.
Perhaps we have designated term durations with the possibilty of doing multiple terms in a row. Colead terms would be offset from each other so that we don't have two new coleads both starting at the same time.
We could also define a series of recomendations that still align with our goals but are not hard rules.