|
|
@@ -0,0 +1,631 @@
|
|
|
+<!--
|
|
|
+Part of the Carbon Language, under the Apache License v2.0 with LLVM Exceptions.
|
|
|
+See /LICENSE for license information.
|
|
|
+SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
|
+-->
|
|
|
+
|
|
|
+# Carbon: Governance and Evolution
|
|
|
+
|
|
|
+The Carbon project aims to provide consistent and clear governance and language
|
|
|
+evolution over time. We want to provide a reasonably broad representation for
|
|
|
+the community contributing to Carbon, including their diverse backgrounds and
|
|
|
+expertise. The governance also needs to remain scalable and effective. It is
|
|
|
+essential to be able to make even controversial decisions in a reasonable and
|
|
|
+bounded timeframe.
|
|
|
+
|
|
|
+## Governance Structure
|
|
|
+
|
|
|
+Our governance structure supports
|
|
|
+[consensus decision-making](consensus_decision_making.md):
|
|
|
+
|
|
|
+* Community members write proposals.
|
|
|
+* [Review managers](#review-managers) escort proposals through our consensus
|
|
|
+ decision process.
|
|
|
+* A [core team](#core-team) makes consensus decisions about Carbon's
|
|
|
+ evolution.
|
|
|
+* Three [arbiters](#arbiters) respond to escalations about lack of consensus,
|
|
|
+ making decisions through majority vote.
|
|
|
+* One [painter](#painter) who, where a consensus exists that multiple
|
|
|
+ competing options are reasonable, decides between the provided options.
|
|
|
+
|
|
|
+## Evolution process
|
|
|
+
|
|
|
+Any substantive change to Carbon (whether the language, project, infrastructure,
|
|
|
+or otherwise) must be made through a process designed to both engage with the
|
|
|
+broader community and come to reasonable decisions in a timely fashion. We have
|
|
|
+guidelines for
|
|
|
+[when to follow the evolution process](#when-to-follow-the-evolution-process).
|
|
|
+
|
|
|
+The process is:
|
|
|
+
|
|
|
+1. [Draft the proposal](#draft-the-proposal)
|
|
|
+
|
|
|
+ 1. [(optional) Discuss the idea early](#optional_discuss-the-idea-early)
|
|
|
+ 2. [Make a proposal](#make-a-proposal)
|
|
|
+ 3. [(optional) Elicit early, high-level feedback on the proposal](#optional_elicit-early_high_level-feedback-on-the-proposal)
|
|
|
+
|
|
|
+2. [Solicit and address proposal feedback](#solicit-and-address-proposal-feedback)
|
|
|
+
|
|
|
+ 1. [Request comments](#request-comments)
|
|
|
+ 2. [Community and reviewing team comments on proposal](#community-and-reviewing-team-comments-on-proposal)
|
|
|
+ 3. [(optional) Pause for a major revision](#optional_pause-for-a-major-revision)
|
|
|
+ 4. [Request a review manager](#request-a-review-manager)
|
|
|
+
|
|
|
+3. [Reviewing team makes a proposal decision](#reviewing-team-makes-a-proposal-decision)
|
|
|
+
|
|
|
+ 1. [Prepare the document for a proposal decision](#prepare-the-document-for-a-proposal-decision)
|
|
|
+ 2. [Ask the reviewing team for a proposal decision](#ask-the-reviewing-team-for-a-proposal-decision)
|
|
|
+ 3. [(optional) Use the meeting to make a proposal decision](#optional_use-the-meeting-to-make-a-proposal-decision)
|
|
|
+
|
|
|
+4. [Finalize the proposal decision](#finalize-the-proposal-decision)
|
|
|
+
|
|
|
+ 1. [Publish the proposal decision](#publish-the-proposal-decision)
|
|
|
+ 2. [Community comments on proposal decision](#community-comments-on-proposal-decision)
|
|
|
+ 3. [(optional) Rollback the decision](#optional_rollback-the-decision)
|
|
|
+ 4. [Execute on proposal decision](#execute-on-proposal-decision)
|
|
|
+
|
|
|
+## Coordination Tools
|
|
|
+
|
|
|
+We use several tools to coordinate changes to Carbon:
|
|
|
+
|
|
|
+* **Discourse Forum** topics will be used for the early idea discussion, any
|
|
|
+ deeper discussions, or more high-level and meta points.
|
|
|
+* **Discord Chat** can be used for quick and real-time chats and Q&A.
|
|
|
+ * If there are important technical points raised or addressed, they should
|
|
|
+ get summarized on a relevant Discourse Forum topic.
|
|
|
+* **Google Docs** is used for writing and reviewing proposals. This
|
|
|
+ facilitates collaborative editing and easy commenting about wording issues.
|
|
|
+* **Google Hangouts Meet** will be used for VC meetings, typically for
|
|
|
+ decisions.
|
|
|
+ * Meetings should typically be summarized on a relevant Discourse Forum
|
|
|
+ topic.
|
|
|
+* **Google Calendar** will be used to track team meeting and vacation times.
|
|
|
+* **GitHub issues** track the proposal process and life cycle. These are only
|
|
|
+ used to track the process, and should not be used for discussion. All Google
|
|
|
+ Docs and Discourse Forum topics should be linked from the issue for easy
|
|
|
+ indexing.
|
|
|
+
|
|
|
+## Governance structure
|
|
|
+
|
|
|
+### Review managers
|
|
|
+
|
|
|
+Review managers exist to help ensure proposals are reviewed in a timely fashion,
|
|
|
+regardless of whether it came from a long-time contributor or someone new to the
|
|
|
+community. They are expected to set aside personal opinions when ensuring a
|
|
|
+proposal is correctly reviewed, including abstaining from managing their own
|
|
|
+proposals. Proposal authors can always contact review managers if they're not
|
|
|
+sure what to do with a proposal.
|
|
|
+
|
|
|
+The number of review managers isn't tightly restricted. Community members may
|
|
|
+volunteer their assistance as a way of contributing to Carbon, although the Core
|
|
|
+team will still review participation.
|
|
|
+
|
|
|
+Our current review managers are:
|
|
|
+
|
|
|
+* [jperkins@google.com](mailto:jperkins@google.com)
|
|
|
+* [shummert@google.com](mailto:shummert@google.com)
|
|
|
+
|
|
|
+### Core team
|
|
|
+
|
|
|
+The core team is responsible for [setting Carbon's roadmap](roadmap_process.md)
|
|
|
+and managing evolution. This team should broadly understand both the users of
|
|
|
+Carbon and the project itself in order to factor different needs, concerns, and
|
|
|
+pressures into a
|
|
|
+[consensus decision-making process](consensus_decision_making.md).
|
|
|
+
|
|
|
+The team is expected to remain relatively small for efficiency, although members
|
|
|
+may be added when necessary to expand representation.
|
|
|
+
|
|
|
+Our current core team members are:
|
|
|
+
|
|
|
+* austern@google.com
|
|
|
+* chandlerc@google.com
|
|
|
+* dmitrig@google.com
|
|
|
+* gromer@google.com
|
|
|
+* joshl@google.com
|
|
|
+* palmer@google.com
|
|
|
+* richardsmith@google.com
|
|
|
+* titus@google.com
|
|
|
+
|
|
|
+**TODO**: We want this team to eventually include non-Googlers for a broader set
|
|
|
+of perspectives.
|
|
|
+
|
|
|
+#### Subteams
|
|
|
+
|
|
|
+As Carbon grows, the core team may decide to form subteams that provide
|
|
|
+leadership for specific areas. These subteams are expected to largely organize
|
|
|
+in a similar fashion to the core team, with a more narrow focus and scope. The
|
|
|
+escalation path for subteams goes first to the core team and then to the
|
|
|
+arbiters.
|
|
|
+
|
|
|
+### Arbiters
|
|
|
+
|
|
|
+There may be issues where the core team cannot reach consensus even after
|
|
|
+careful discussion. In some cases, this simply means that the status quo must
|
|
|
+hold until a more compelling case for change has been made. However, to avoid
|
|
|
+important issues being unable to progress, any member of the community may
|
|
|
+request that an issue which failed to gain consensus be considered by the
|
|
|
+arbiters.
|
|
|
+
|
|
|
+When acting as arbiters, the arbiters are only empowered to select between
|
|
|
+different options among which none achieved consensus, including maintaining
|
|
|
+status quo. All options must first be deliberated by the core team.
|
|
|
+
|
|
|
+It is even more important that arbiters set aside any personal perspectives to
|
|
|
+the extent possible and make decisions in the interest of the project. They
|
|
|
+should typically bias towards maintaining the status quo and letting the
|
|
|
+proposal come back with more information rather than overriding it. It is
|
|
|
+expected to be relatively rare that the arbiters need to take on this role.
|
|
|
+
|
|
|
+Arbiters may make a decision with a majority (two-to-one) vote. If they cannot
|
|
|
+reach a majority vote, e.g. due to an arbiter being unavailable, the decision
|
|
|
+returns to the core team.
|
|
|
+
|
|
|
+There should always be three arbiters.
|
|
|
+
|
|
|
+Our current arbiters are:
|
|
|
+
|
|
|
+* chandlerc@google.com
|
|
|
+* richardsmith@google.com
|
|
|
+* titus@google.com
|
|
|
+
|
|
|
+### Painter
|
|
|
+
|
|
|
+Whenever possible, we want Carbon to make syntax and other decisions based on
|
|
|
+understanding its users, data, and the underlying goals of the language.
|
|
|
+However, there will be times when those don't provide a clear cut rationale for
|
|
|
+any particular decision -- all of the options are fine/good and someone simply
|
|
|
+needs to choose which color to paint the bikeshed. The goal of the painter role
|
|
|
+is to have a simple way to quickly decide these points.
|
|
|
+
|
|
|
+Any team may defer a decision to the painter if there is a consensus that it is
|
|
|
+merely a bikeshed in need of paint. The team may also open an issue to revisit
|
|
|
+the color with data and/or user studies of some kind. This allows progress to be
|
|
|
+unblocked while also ensuring we return to issues later and attempt to find more
|
|
|
+definite rationale.
|
|
|
+
|
|
|
+The painter is a single person in order to keep decisions around taste or
|
|
|
+aesthetics reasonably consistent.
|
|
|
+
|
|
|
+The current painter is:
|
|
|
+
|
|
|
+* [chandlerc@google.com](mailto:chandlerc@google.com)
|
|
|
+
|
|
|
+### Adding and removing governance members
|
|
|
+
|
|
|
+Any member of Carbon governance may step down or be replaced when they are no
|
|
|
+longer able to contribute effectively. The core team can nominate and decide on
|
|
|
+adding, removing, or replacing members using the usual evolution processes.
|
|
|
+
|
|
|
+## Evolution process
|
|
|
+
|
|
|
+### When to follow the evolution process
|
|
|
+
|
|
|
+Any substantive change to Carbon (whether the language, project, infrastructure,
|
|
|
+or otherwise) should follow the evolution process. The meaning of "substantive"
|
|
|
+is subjective, but will generally include:
|
|
|
+
|
|
|
+* Any semantic or syntactic language change that isn't fixing a bug.
|
|
|
+* Major changes to project infrastructure (including additions and removals).
|
|
|
+* Changes to the process itself.
|
|
|
+* Rolling back a finalized decision (even if never executed).
|
|
|
+
|
|
|
+Changes which generally will not require this process are:
|
|
|
+
|
|
|
+* Fixing typos or bugs that don't change the meaning and/or intent.
|
|
|
+* Rephrasing or refactoring documentation for easier reading.
|
|
|
+* Minor infrastructure updates, improvements, setting changes, tweaks.
|
|
|
+
|
|
|
+If you're not sure whether to follow the process, please err on the side of
|
|
|
+following it. A team can always ask for a change to be made directly if they
|
|
|
+believe it doesn't need review. Conversely, a reviewer might also ask that a
|
|
|
+pull request instead go through the full evolution process.
|
|
|
+
|
|
|
+### Draft the proposal
|
|
|
+
|
|
|
+#### (optional) Discuss the idea early
|
|
|
+
|
|
|
+We encourage proposal authors to discuss problems they're trying to solve and
|
|
|
+their ideas for addressing it with the community early using any of our
|
|
|
+coordination tools. The goal should be to get a feel for any prior work, as well
|
|
|
+as other ideas or perspectives on both the problem and ways of approaching it.
|
|
|
+
|
|
|
+These discussions can also help socialize both the problem and ideas with the
|
|
|
+community, making subsequent discussions around a concrete proposal more
|
|
|
+efficient.
|
|
|
+
|
|
|
+##### Actions
|
|
|
+
|
|
|
+* **Author**: Create an `Evolution > Ideas` forum topic to discuss the issue
|
|
|
+ before writing the proposal.
|
|
|
+* **Community**: Provide [constructive commentary](commenting_guidelines.md)
|
|
|
+ for ideas when feedback is solicited.
|
|
|
+
|
|
|
+#### Make a proposal
|
|
|
+
|
|
|
+The first part of making a proposal is to write up a Google Doc explaining,
|
|
|
+roughly in the following order:
|
|
|
+
|
|
|
+* **Problem**: Information about the problem the proposal is trying to solve.
|
|
|
+* **Background**: Background on the problem and information needed to
|
|
|
+ understand the proposed solution.
|
|
|
+* **Proposal**: An overview of the solution.
|
|
|
+* **Details**: Details of how the proposed solution should be implemented.
|
|
|
+* **Alternatives**: Information about alternative solutions or details that
|
|
|
+ were considered and rejected.
|
|
|
+
|
|
|
+We use a
|
|
|
+[template for proposals](https://docs.google.com/document/d/1sqEnIWWZKTrtMz2XgD7_RqvogwbI0tBQjAZIvOabQsw/template/preview)
|
|
|
+to make it easier for readers to recognize the style and structure. If you
|
|
|
+already have a non-templated Doc, create a Doc using the template and copy
|
|
|
+content over (without the original formatting) so that things like the license
|
|
|
+header are present.
|
|
|
+
|
|
|
+Also create
|
|
|
+[the initial GitHub tracking issue](https://github.com/carbon-language/carbon-proposals/issues/new?template=proposal.md).
|
|
|
+Don't worry about whether the proposal will go anywhere; issues are cheap.
|
|
|
+GitHub issues are expected to be used as an index of different in-flight
|
|
|
+proposals, and may be helpful when trying to find others with similar ideas.
|
|
|
+
|
|
|
+When writing a proposal, try to keep it brief and focused to maximize the
|
|
|
+community's engagement in it. Beyond the above structure, try to use
|
|
|
+[Inverted Pyramid](https://en.wikipedia.org/wiki/Inverted_pyramid_\(journalism\))
|
|
|
+or [BLUF](https://en.wikipedia.org/wiki/BLUF_\(communication\)) writing style to
|
|
|
+help readers rapidly skim the material.
|
|
|
+
|
|
|
+Where parts of a proposal may have several ways to address them, feel free to
|
|
|
+list options and mark them as "open questions". When describing an open
|
|
|
+question, it is a good idea to describe a proposed solution as well as other
|
|
|
+options, compare their advantages, disadvantages, and non-trivial consequences.
|
|
|
+These may be resolved during discussion, or be left for decision by the
|
|
|
+reviewing team.
|
|
|
+
|
|
|
+Where the proposal makes a decision between multiple options, move them to the
|
|
|
+"alternatives" section so that it's clear why a given choice was made.
|
|
|
+
|
|
|
+##### Actions
|
|
|
+
|
|
|
+* **Author**:
|
|
|
+ * Write the proposal using
|
|
|
+ [the template](https://docs.google.com/document/d/1sqEnIWWZKTrtMz2XgD7_RqvogwbI0tBQjAZIvOabQsw/template/preview).
|
|
|
+ * The template has additional items under "TODO: Initial proposal
|
|
|
+ setup".
|
|
|
+ * Note that Google Doc and GitHub issue templates have the status set
|
|
|
+ to `WIP`.
|
|
|
+
|
|
|
+#### (optional) Elicit early, high-level feedback on the proposal
|
|
|
+
|
|
|
+Authors may continue to use the `Evolution > Ideas` forum topic to advertise the
|
|
|
+proposal and elicit early, high-level feedback. Community commenters should
|
|
|
+favor the forum topic (vs Doc comments) for high-level discussion.
|
|
|
+
|
|
|
+##### Actions
|
|
|
+
|
|
|
+* **Author**: Update (or create if needed) the `Evolution > Ideas` forum topic
|
|
|
+ to advertise the proposal and elicit early, high-level feedback.
|
|
|
+ * Add the topic's link to the GitHub issue.
|
|
|
+* **Community**: Provide [constructive commentary](commenting_guidelines.md)
|
|
|
+ for ideas when feedback is solicited.
|
|
|
+
|
|
|
+### Solicit and address proposal feedback
|
|
|
+
|
|
|
+#### Request comments
|
|
|
+
|
|
|
+Once authors feel the proposal is in good shape for wider evaluation from the
|
|
|
+relevant reviewing team (the core team, at present), they begin the more formal
|
|
|
+process of evaluation by creating an `Evolution > Proposal Reviews` forum topic
|
|
|
+for technical review of the proposal.
|
|
|
+
|
|
|
+The topic should start off with a brief summary of the proposal and any prior
|
|
|
+discussion, as well as links to prior discussion topics.
|
|
|
+
|
|
|
+##### Actions
|
|
|
+
|
|
|
+* **Author**:
|
|
|
+ * Set both the Google Doc status and GitHub issue status label to `RFC`.
|
|
|
+ * Create an `Evolution > RFC` forum topic.
|
|
|
+ * Summarize the discussion points, along with a link to the Google Doc
|
|
|
+ and GitHub issue.
|
|
|
+ * Add the topic's link to the GitHub issue.
|
|
|
+
|
|
|
+#### Community and reviewing team comments on proposal
|
|
|
+
|
|
|
+Anyone in the community is welcome to
|
|
|
+[respond on an RFC](commenting_guidelines.md). The reviewing team is _expected_
|
|
|
+to participate at least enough to provide any relevant feedback.
|
|
|
+
|
|
|
+Proposal authors should actively engage in the discussion and incorporate
|
|
|
+changes to reflect feedback. Work to improve the proposal through incorporating
|
|
|
+feedback. Authors should explicitly mention when they believe a comment has been
|
|
|
+addressed, and commenters should be clear and explicit about whether they
|
|
|
+believe more changes are needed.
|
|
|
+
|
|
|
+When significant alternatives are pointed out, include them in the proposal
|
|
|
+regardless of whether they're adopted. The "alternatives" section should be used
|
|
|
+to document rejected alternatives as well as the original approach when an
|
|
|
+alternative is adopted, with pros and cons either way. New "open questions" may
|
|
|
+also be added where the author isn't confident about the best approach.
|
|
|
+
|
|
|
+##### Actions
|
|
|
+
|
|
|
+* **Author**:
|
|
|
+ * Update the Doc and/or comment in the topic to address feedback.
|
|
|
+ * Create GitHub issues for any open questions to be revisited later.
|
|
|
+* **Reviewing team and community**: Provide
|
|
|
+ [constructive commentary](commenting_guidelines.md) for proposals.
|
|
|
+
|
|
|
+#### (optional) Pause for a major revision
|
|
|
+
|
|
|
+Significant changes to the proposal may become necessary as a result of the
|
|
|
+discussion. At that point, the authors should clearly state that they are
|
|
|
+planning a revision and the issue should be marked as `WIP` again. At this
|
|
|
+point, the community should prioritize giving the authors time and space to work
|
|
|
+on the revision rather than sending more feedback.
|
|
|
+
|
|
|
+The author should treat this as going back to the draft phase. When a new
|
|
|
+revision is ready, the authors start a new
|
|
|
+[request for comments](#request-comments) with an updated summary of the
|
|
|
+discussion points thus far (with links to those prior topics).
|
|
|
+
|
|
|
+##### Actions
|
|
|
+
|
|
|
+* **Author**:
|
|
|
+ * Announce to the Discourse Forum topic that the proposal is undergoing
|
|
|
+ major revision.
|
|
|
+ * Set both the Google Doc status and GitHub issue status label to `WIP`.
|
|
|
+* **Reviewing team and community**: Refrain from commenting until the author
|
|
|
+ solicits feedback again.
|
|
|
+
|
|
|
+#### Request a review manager
|
|
|
+
|
|
|
+Once discussion settles down and all comments have been resolved, the author
|
|
|
+should request a review manager by creating a `Evolution > Review manager
|
|
|
+requests` topic. A review manager should respond within a day or two. This may
|
|
|
+not be needed if a review manager has already taken ownership.
|
|
|
+
|
|
|
+The review manager is responsible for validating that the proposal is ready for
|
|
|
+the reviewing team to make a decision. They will ensure that at least a couple
|
|
|
+members of the reviewing team have reviewed the document before it leaves RFC.
|
|
|
+
|
|
|
+If the proposal is ready, the review manager will put out a last call for
|
|
|
+community comments on the main discussion topic. If nothing significant arises,
|
|
|
+the reviewing team will be asked to start making a decision after a day.
|
|
|
+
|
|
|
+##### Actions
|
|
|
+
|
|
|
+* **Author**:
|
|
|
+ * Ensure all comments are resolved.
|
|
|
+ * Create a `Evolution > Review manager requests` topic asking for a review
|
|
|
+ manager, providing a link to the proposal's Doc and GitHub issue.
|
|
|
+ * Add the topic's link to the GitHub issue.
|
|
|
+* **Review manager**:
|
|
|
+ * Ask reviewing team members to review the proposal when needed.
|
|
|
+ * Double-check that comment threads are addressed by the proposal.
|
|
|
+ * Update the `Evolution > RFC` topic with a last call for comments.
|
|
|
+
|
|
|
+### Reviewing team makes a proposal decision
|
|
|
+
|
|
|
+#### Prepare the document for a proposal decision
|
|
|
+
|
|
|
+Going into a decision, it's expected that no more significant changes will be
|
|
|
+made. The review manager should ask the proposal author to transfer ownership of
|
|
|
+the proposal's Doc to the review manager. The review manager should then change
|
|
|
+all "edit" access to "comment".
|
|
|
+
|
|
|
+For the rest of the review, the review manager should reject all non-typo
|
|
|
+suggestions to the proposal. Although the author should continue to respond to
|
|
|
+reviewing team comments, if any significant changes need to be made, the
|
|
|
+decision should be cancelled and the proposal should be returned to the author
|
|
|
+for major revision.
|
|
|
+
|
|
|
+##### Actions
|
|
|
+
|
|
|
+* **Author**:
|
|
|
+ [Transfer ownership](https://support.google.com/docs/answer/2494892) of the
|
|
|
+ proposal's Doc to the review manager.
|
|
|
+* **Review manager**: Change all edit access on the proposal to comment-only.
|
|
|
+
|
|
|
+#### Ask the reviewing team for a proposal decision
|
|
|
+
|
|
|
+The review manager should ask the reviewing team for a decision by creating an
|
|
|
+`Evolution > Proposal decisions` forum topic asking for consensus. The proposal
|
|
|
+should also be added as a topic to the team's meeting agenda one week in advance
|
|
|
+(or four working days, if longer). The agenda item gives a deadline for a
|
|
|
+decision if no consensus can be reached on the Discourse Forum, and can be
|
|
|
+removed if a decision is made before the meeting.
|
|
|
+
|
|
|
+Team members should familiarize themselves with the proposal and related
|
|
|
+discussion. Try to respond to the Discourse Forum topic promptly with:
|
|
|
+
|
|
|
+* A position (either affirming or objecting) is strongly preferred, although
|
|
|
+ standing aside is allowed.
|
|
|
+ * Rationales for positions should be based on discussion on the proposal's
|
|
|
+ `Evolution > RFC` topic, and providing links helps write the decision.
|
|
|
+* A request for more time to review materials, to make it clear the intent is
|
|
|
+ to participate in the decision.
|
|
|
+* Discussion regarding positions or the decision itself.
|
|
|
+ * The reviewing team will participate in the proposal community comment
|
|
|
+ period, so that substantive feedback can be incorporated by the author
|
|
|
+ prior to requesting a decision.
|
|
|
+* A request to use the meeting for discussion.
|
|
|
+ * All topics for discussion will be captured either in the agenda or as a
|
|
|
+ comment on the Doc, to ensure they're ready for the meeting.
|
|
|
+
|
|
|
+The review manager should monitor the forum topic for consensus. If a decision
|
|
|
+is made before the meeting, the item should be removed from the meeting agenda.
|
|
|
+If no decision can be reached before the meeting, the meeting will be used to
|
|
|
+make decisions.
|
|
|
+
|
|
|
+##### Actions
|
|
|
+
|
|
|
+* **Author**:
|
|
|
+ * Respond to comments.
|
|
|
+* **Review manager:**
|
|
|
+ * Set both the Google Doc status and GitHub issue status label to `needs
|
|
|
+ decision`.
|
|
|
+ * In the Doc history, label the latest revision as `needs decision`
|
|
|
+ * Create an `Evolution > Proposal decisions` topic for pre-meeting
|
|
|
+ discussion.
|
|
|
+ * Tentatively add the decision to the meeting one week in advance (or four
|
|
|
+ working days, if longer), and use that meeting if necessary to reach
|
|
|
+ consensus.
|
|
|
+ * Monitor the topic for a consensus decision.
|
|
|
+ * If a consensus is reached, ensure there's enough information to
|
|
|
+ write a decision.
|
|
|
+* **Every reviewing team member:**
|
|
|
+ * Review the proposal again and make comments if needed.
|
|
|
+ * Participate in reaching a consensus, or explicitly stand aside.
|
|
|
+ * Offer justifications towards a decision.
|
|
|
+
|
|
|
+#### (optional) Use the meeting to make a proposal decision
|
|
|
+
|
|
|
+If the reviewing team fails to reach consensus before the meeting, the
|
|
|
+[weekly meeting](consensus_decision_making.md#meetings) should be used to reach
|
|
|
+consensus. The review manager is encouraged to volunteer as the note taker for
|
|
|
+the meeting, and should help ensure there's a moderator. The author and other
|
|
|
+community members may attend, but should behave as observers unless explicitly
|
|
|
+called on to answer a question by the core team.
|
|
|
+
|
|
|
+The reviewing team is responsible for producing a decision at the end of the
|
|
|
+meeting, even if it is to defer the proposal. The review manager should verify
|
|
|
+they understand the decision, because they will be responsible for publishing
|
|
|
+it.
|
|
|
+
|
|
|
+* **Author**: (optional) Consider attending the meeting to better understand
|
|
|
+ the proposal decision.
|
|
|
+* **Review manager**:
|
|
|
+ * Help identify a
|
|
|
+ [moderator and note taker](consensus_decision_making.md#roles) for the
|
|
|
+ meeting, possibly volunteering as note taker.
|
|
|
+ * Ensure the meeting provides enough information to write a decision.
|
|
|
+* **Reviewing team**:
|
|
|
+ * Participate in reaching a consensus, or explicitly stand aside.
|
|
|
+ * Offer justifications towards a decision.
|
|
|
+
|
|
|
+### Finalize the proposal decision
|
|
|
+
|
|
|
+#### Publish the proposal decision
|
|
|
+
|
|
|
+Once a decision has been reached, the review manager will draft a
|
|
|
+[formal decision](consensus_decision_making.md#formal-decision-content) based on
|
|
|
+Discourse Forums discussion and (if relevant) the meeting notes. They should
|
|
|
+prepare a pull request with a PDF of the proposal for reference of what was
|
|
|
+approved. They will post the draft decision to the `Evolution > Announcements`
|
|
|
+forum within two working days. The post will start the proposal decision comment
|
|
|
+period.
|
|
|
+
|
|
|
+In some cases, the proposal may end up going back to the author for additional
|
|
|
+changes. In these cases, the review manager should grant edit access to the
|
|
|
+author again. It's not necessary to switch ownership back.
|
|
|
+
|
|
|
+##### Actions
|
|
|
+
|
|
|
+* **Review manager**:
|
|
|
+ * If the proposal needs more changes:
|
|
|
+ * Grant the author edit access to the Doc again.
|
|
|
+ * Set both the Google Doc status and GitHub issue status label to
|
|
|
+ `WIP`.
|
|
|
+ * If the proposal is done changing:
|
|
|
+ * Set both the Google Doc status and GitHub issue status label to
|
|
|
+ `<decision>`.
|
|
|
+ * In the Doc history, label the latest revision as `<decision>`.
|
|
|
+ * Write the
|
|
|
+ [formal decision](consensus_decision_making.md#formal-decision-content),
|
|
|
+ possibly with help from the reviewing team.
|
|
|
+ * (optional): Create a GitHub issue for issues that should be
|
|
|
+ revisited in the future. Link to these from the main GitHub issue.
|
|
|
+ * Create an `Evolution > Announcements` forum topic with the decision and
|
|
|
+ a summary of the rationale.
|
|
|
+ * Add the topic's link to the GitHub issue.
|
|
|
+* **Reviewing team**: Help draft any rationale needed by the review manager
|
|
|
+ for the decision.
|
|
|
+
|
|
|
+#### Community comments on proposal decision
|
|
|
+
|
|
|
+When the proposal decision is published, it enters a comment period. The comment
|
|
|
+period lasts two weeks, ensuring at least five working days. During this period,
|
|
|
+the decision is in effect, although dependent changes should be made only if
|
|
|
+they are easy to roll back.
|
|
|
+
|
|
|
+When commenting on the decision, the community should keep in mind that the goal
|
|
|
+of the decision is to continue to evolve Carbon in a positive direction.
|
|
|
+Constructive criticism can improve the framing of the decision. The comment
|
|
|
+period should not be used to continue to debate decisions unless raising
|
|
|
+specific new information. When commenting, some questions you might want to
|
|
|
+address are:
|
|
|
+
|
|
|
+* Is the decision clear in its conclusion?
|
|
|
+* Does the decision explain its rationale well?
|
|
|
+* Have concerns or alternatives been effectively understood, acknowledged, and
|
|
|
+ addressed to the extent possible?
|
|
|
+
|
|
|
+If the decision is to approve the change, the author may start making changes
|
|
|
+described in the proposal which are easy to roll back before the decision review
|
|
|
+ends. If the author starts making changes, they must agree to help roll back
|
|
|
+changes if the decision is rolled back. This does not mean that the decision is
|
|
|
+final; however, we prefer to maintain velocity and roll back when needed. The
|
|
|
+reviewing team may additionally decide that some changes _must_ wait until the
|
|
|
+decision review is complete, e.g. if members are concerned that rollback costs
|
|
|
+are non-obvious.
|
|
|
+
|
|
|
+##### Actions
|
|
|
+
|
|
|
+* **Author:** (optional) Start making dependent changes which are easy to roll
|
|
|
+ back, and be prepared to roll back if needed.
|
|
|
+* **Review manager:** Respond to comments and bring any significant issues to
|
|
|
+ the reviewing team's attention.
|
|
|
+* **Community and reviewing team**: Provide
|
|
|
+ [constructive commentary](commenting_guidelines.md) for the proposal
|
|
|
+ decision.
|
|
|
+
|
|
|
+#### (optional) Rollback the decision
|
|
|
+
|
|
|
+If important new information is provided, the reviewing team will engage and, if
|
|
|
+necessary, rollback their decision. Any reviewing team member may start this by
|
|
|
+stating their new position on the reviewing team's decision topic, although this
|
|
|
+should be exceptional.
|
|
|
+
|
|
|
+##### Actions
|
|
|
+
|
|
|
+* **Author**: Roll back any dependent changes.
|
|
|
+* **Reviewing team member**: State new, non-consensus position on `Evolution >
|
|
|
+ Decisions` forum topic.
|
|
|
+* **Review manager**: Return to
|
|
|
+ [asking the reviewing team for a proposal decision](#ask-the-reviewing-team-for-a-proposal-decision).
|
|
|
+
|
|
|
+#### Execute on proposal decision
|
|
|
+
|
|
|
+When the comment period ends without objections from the reviewing team, the
|
|
|
+review manager should finalize the decision (approved, rejected, deferred,
|
|
|
+etc.). The review manager should commit the proposal PDF for archival purposes.
|
|
|
+
|
|
|
+If the decision is to approve the change, the author may make the changes
|
|
|
+described in the proposal. There may still be review comments, but those should
|
|
|
+exclusively deal with the **document** (formatting, structure, links, etc.), and
|
|
|
+not the proposal. The issue should **not** be re-argued on the pull request or
|
|
|
+other code reviews.
|
|
|
+
|
|
|
+That does not mean that all decisions are final! Everyone involved in a decision
|
|
|
+is human and we all make mistakes. However, once there is a clear decision,
|
|
|
+reversing or reconsidering it should take the form of a new proposal and follow
|
|
|
+the process of a new proposal. It may be substantially shorter to write up, but
|
|
|
+often it will be important to clearly and carefully explain the reason to
|
|
|
+revisit the decision.
|
|
|
+
|
|
|
+##### Actions
|
|
|
+
|
|
|
+* **Review manager**:
|
|
|
+ * Commit the proposal PDF to the GitHub decision repository.
|
|
|
+ * Once committed, add a link to the PDF in the GitHub issue.
|
|
|
+ * Move the Doc to the archive folder.
|
|
|
+ * Update the `Evolution > Announcements` forum topic with the final
|
|
|
+ decision.
|
|
|
+ * Close the GitHub issue.
|
|
|
+* **Author**: Start making dependent changes to apply the proposal.
|
|
|
+
|
|
|
+## Acknowledgements
|
|
|
+
|
|
|
+Our governance and evolution process is influenced by the
|
|
|
+[Rust](https://github.com/rust-lang/rfcs),
|
|
|
+[Swift](https://swift.org/contributing/), and C++ processes. Many thanks to
|
|
|
+these communities for providing a basis.
|