Proposals, Approvals and Stabilization

It is very common to need to gather feedback and approval when contributing to the compiler, either for permission to proceed with an experiment or refactoring, or when stabilizing a feature. Before submitting substantial changes, we encourage contributors to contact the team on Zulip in order to discuss such changes before submitting them for review. This document aims to summarise the various processes that the compiler team has for making approval decisions and when each should be used.

Approvals

There are three mechanisms that the team can use to approve a proposal (not all approval mechanisms are suitable for each method of making a proposal - see below):

Proposals

There are three ways to propose a change to the compiler team. The appropriate choice depends on the nature of the proposal, described below.

How do I submit an MCP?

What kinds of comments should go on a MCP in the compiler-team repo?

Please direct technical conversation to the Zulip stream. The compiler-team repo issues are intended to be low traffic and used for procedural purposes.

It is recommended that any team member who wishes to "second" a proposal be familiar with the relevant code. Anyone can note concerns that shouldn't be overlooked.

It is expected that team members raising concerns later follow-up when the proposal is changed and resolve the concern.

How does one raise an objection?

These types of procedural comments can be left on the issue (it's also good to leave a message on Zulip). See the previous section. It is important to remember that concerns are blocking, therefore they should be filed as soon as possible and in the most unambiguous way ("mild concerns" not registered are not considered blocking).

To facilitate a machine parsable scanning of the concerns please use the following syntax to formally register a concern:

@rustbot concern reason-for-concern

<long description of the concern>

And the following syntax to lift a concern when resolved:

@rustbot resolve reason-for-concern

How does one second an MCP?

It is generally advisable to wait for a bit of time (say a few days) before approving (seconding) an MCP to allow people on different timezones and working schedules to look at it. Unless the proposal is so straightforward and clear that approving is a no-brainer.

MCPs can be seconded using:

@rustbot second
Who decides whether a concern is unresolved?

Usually the experts in the given area will reach a consensus here, but if there is some need for a "tie breaker" vote or judgment call, the compiler team leads make the final call.

When should MCPs be closed?

MCPs can be closed:

What happens if someone makes a contribution that requires an approval and doesn't have one?

If the approval required for the contribution requires an MCP or an RFC, then the contribution should be closed or marked as blocked, with a request to create an MCP or RFC first. If approval of a PR is acceptable for the specific contribution (see below), then the approval process can begin.

Can I work on code experimentally before a approval is gained?

Of course! You are free to work on PRs or write code. But those PRs should be marked as experimental and they should not land, nor should anyone be expected to review them (unless folks want to). Also, try to get a feel of how the team feels about the proposal: we appreciated code demonstrating the proposal but at the same time we don't want you to work on somehing that might not get approved, so keep in mind that a proof-of-concept or more elaborate patches can facilitate but are not a guarantee for approval.

What makes a good proposal?

A good proposal will address the following:

What proposal/approval do I need?

This section aims to exhaustively detail which proposal and approval is necessary for any given circumstance.

Internal

Compiler flags

Attributes

Features

Targets

See the Target Tier Policy for detailed requirements for different Target Tiers.

Promoting targets

Quick overview for target promotions:

Current target tier Goal target tier Proposal Required approvals
N/A (proposing a new target) 3 PR r+ (compiler leads)
3 2 MCP FCP
2 1 RFC FCP

Demoting or removing targets

Quick overview for target demotions and removals:

Current target tier Goal target tier Proposal Required approvals
1 2 (or removal) RFC FCP
2 3 (or removal) MCP FCP
3 N/A (removing a tier 3 target) PR r+ (compiler leads)

Other kind of target changes

Lints, errors and warnings

Licensing

Stable/beta channel backport nominations of compiler changes

See Backports.

Adding ecosystem/integration test jobs/components to rust-lang/rust CI

See Adding ecosystem/integration test jobs/components to rust-lang/rust CI.