src/doc/contrib/src/team.md
The Cargo Team is a group of volunteers that support the Rust community in developing and maintaining Cargo, the Rust package manager and build tool. The team is responsible for deciding how Cargo and its related libraries operate and evolve. The team has a shared responsibility with the crates.io team for the design and usage of Cargo's index format and its registry API as it relates to the crates.io service.
The team is expected to keep Cargo in an operational state, to support Rust's 6-week release cycle, and to uphold the Design Principles of Cargo.
The Cargo Team consists of team members with one serving as a team leader. The team leader is responsible for coordinating the team and providing a contact point with other teams. The leader is selected by consensus of the existing members with no objections.
Membership is maintained in the Rust team database.
Team members are expected to participate in voting on RFCs and major change proposals
Team members are expected to regularly participate in at least some of the following membership-related activities. Members are not expected to participate in all of these activities, but exhibit some interest and involvement in the project that covers some of these activities.
Breaks and vacations are welcome and encouraged. If a member is no longer participating after a few months, they may be asked to step down.
Members are required to always:
Members are given privileges, such as:
The primary focus of team meetings is for unblocking designs, including discussing
rust-lang/rustGenerally, topics for the agenda should be posted a day in advance to give people the opportunity to review them before the meeting.
The team meets on a weekly basis (ics) on a video chat. Members of the community are welcome to attend. Minutes for all meetings are recorded on HackMD. After the meeting, meeting notes are permanently recorded in https://github.com/rust-lang/cargo-team/tree/main/meetings/sync-meeting.
For discussing contributions, Office Hours would be more appropriate venue.
A contributor can become a member of the Cargo Team by requesting a review or being nominated by one of the existing members. They can be added by unanimous consent of the team. The team lead or another member of the team will also confirm with the moderation team that there are no concerns involving the proposed team member.
Contributors who wish to join the team should exhibit an interest in carrying the design principles of Cargo and participate in some of the activities listed above in Membership Expectations.
Members may leave at any time, preferably by letting the team know ahead of time.
The Cargo team has various permissions on GitHub:
rust-lang/cargo --- The primary repository for Cargo development.rust-lang/cargo-team --- The repository for the Cargo team, primarily hosting meeting notes.rust-lang/rust --- The primary repository for Rust releases. The cargo team has "write" permission, and also permission to approve merges via bors (primarily for submodule updates).rust-lang/annotate-snippets-rs --- The diagnostic formatting library shared between rustc and cargo.rust-lang/git2-rs --- The bindings to the libgit2 library used by cargo.rust-lang/jobserver-rs --- The jobserver library.rust-lang/wg-cargo-std-aware --- Repository used to coordinate the efforts to support building std with cargo.The Cargo team has several streams on Zulip:
#t-cargo --- General public channel for discussing any topics related to Cargo.#t-cargo/build-integration --- Discussions about integration with build systems.#t-cargo/PubGrub --- Discussions about the PubGrub project.The following are private streams for the Cargo team. The team should avoid using this unless necessary (for example, discussing a security issue or team and meeting organization).
#t-cargo/private --- Private channel for discussions among the team.#t-cargo/meetings --- Private channel for discussions about team meetings, including non-members who regularly attend the meetings.The Cargo team has a shared, public workspace on HackMD at https://hackmd.io/@rust-cargo-team for drafting documents and recording meeting minutes.
Since this HackMD workspace is using the free service, it does not support private documents. If you need to draft a private document, create it in your personal workspace and use private channels to share the link.
The Cargo team has permissions and access to various services provided by the Rust organization:
The team uses a consensus-driven process for making decisions ranging from new features and major changes to management of the team itself. The degree of process is correlated with the degree of change being proposed:
Bug fixes, refactorings, documentation updates, and other small changes are usually delegated to a single team member (who is not the author) to approve based on their judgement. Team members may also solicit feedback from other members or the whole team for any change should they want to gather other perspectives from the team.
Some examples of what this might cover are:
Small features or changes, large refactorings, or major changes to Cargo's codebase or process require an approval by the team via consensus. These decisions can be done via the FCP process of rfcbot, or in an ad-hoc manner such as during a team meeting. rfcbot FCP requests do not require waiting for the 10-day feedback window if there is a complete team consensus, as this process is mostly aimed at polling the team rather than publicly soliciting feedback. Though, public feedback is welcome at any time.
Some examples of what this might cover are:
Larger features should usually go through the RFC process. This usually involves first soliciting feedback from the Cargo team and the rest of the community, often via the Rust Internals discussion board, Cargo's issue tracker, and the Zulip channel. If there is positive feedback to the idea, the next step is to formally post an RFC on the RFC repo. The community and the Cargo team will have an opportunity to provide feedback on the proposal. After some period of time, the Cargo team may decide to either accept, postpone, or close a proposal based on the interest in the proposal and the team's availability.
Some examples of what this might cover are:
Cargo.toml or the config files.cargo commands that are not trivial.
In some cases, the team may decide to adopt a pre-existing external command without an RFC if the command has already been broadly adopted.Stabilization of Unstable features requires an approval via the FCP process of rfcbot. This provides a final opportunity to solicit feedback from the public, and for the Cargo team to agree via consensus.
The team may decide to experiment with larger features without starting the RFC process if it is an initiative that the team has consensus that it is something they want to pursue. This is usually reserved for something that has an unclear path that the RFC process is not expected to provide feedback that would substantially move the process forward. Such experiments are expected to be nightly-only (see the Unstable chapter), and involve efforts to shape the final result via exploration, testing, and public involvement. Any such features must ultimately have an RFC approved before they can be stabilized.
Per the Rust crate ownership policy, the Cargo team's "Intentional Artifacts" include:
The team may be contacted through several channels:
t-cargo Zulip channel stream is the chat platform the Cargo Team uses to coordinate on.