-
Notifications
You must be signed in to change notification settings - Fork 2.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add Cargo team charter. #12010
Merged
Merged
Add Cargo team charter. #12010
Changes from all commits
Commits
Show all changes
8 commits
Select commit
Hold shift + click to select a range
3a0932f
Add Cargo team charter.
ehuss 427acd9
Use link for cargo email address.
ehuss fcd013e
Remove separate leadership section.
ehuss df51a80
Add link to triagebot.toml
ehuss fb57f5b
Make the member expectations a little clearer.
ehuss 35ed543
Clarify new cargo commands.
ehuss a3e50f4
Leader selection with no objections.
ehuss 60a14a2
Adding a member should check with moderation.
ehuss File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,157 @@ | ||
# Cargo Team | ||
|
||
## Mission | ||
|
||
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. | ||
|
||
[crates.io team]: https://www.rust-lang.org/governance/teams/crates-io | ||
[crates.io]: https://crates.io/ | ||
[Design Principles]: design.md | ||
|
||
## Team membership | ||
|
||
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]. | ||
|
||
[Rust team database]: https://github.com/rust-lang/team/blob/master/teams/cargo.toml | ||
|
||
### Membership expectations | ||
|
||
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. | ||
|
||
- Attending meetings | ||
- Reviewing contributions (auto-assignment is managed in [triagebot.toml]) | ||
- Triaging and responding to issues | ||
- Mentoring new contributors | ||
- Shepherding major changes and RFCs | ||
- Coordinating interaction with other Rust groups and outside interests | ||
- Managing and updating the policies of the Cargo Team itself | ||
- Keeping up with maintenance of the Cargo codebase, ensuring it stays functional and that infrastructure and team processes continue to run smoothly | ||
|
||
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: | ||
|
||
- Represent the Rust project in a way that upholds the [Rust code of conduct][coc] to a high standard. | ||
- Represent the Cargo Team in a way that upholds the expectations of this charter, and be friendly, welcoming, and constructive with contributors and users. | ||
|
||
Members are given privileges, such as: | ||
weihanglo marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
- Merge permissions (bors rights) | ||
- Issue and project management (GitHub permissions) | ||
- Voting and decision making (RFCs, major changes) | ||
- Access to private communications related to team management and security discussions | ||
|
||
[coc]: https://www.rust-lang.org/policies/code-of-conduct | ||
[triagebot.toml]: https://github.com/rust-lang/cargo/blob/master/triagebot.toml | ||
|
||
### Meetings | ||
|
||
The team meets on a weekly basis on a video chat. | ||
If you are interested in participating, feel free to contact us on [Zulip]. | ||
|
||
### Becoming a member | ||
|
||
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](#membership-expectations). | ||
|
||
Members may leave at any time, preferably by letting the team know ahead of time. | ||
|
||
## Decision process | ||
|
||
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: | ||
- Bug fixes that do not introduce backwards-incompatible changes, and adhere to Cargo's expected behavior. | ||
- Addition of new warnings, or other diagnostic changes. | ||
- New or updated documentation. | ||
- Localized refactorings (that is, those that do not have a significant, wide-ranging impact to the usage and maintenance of the codebase). | ||
- Minor or planned changes to Cargo's console output. | ||
- Beta backports that clearly address a regression, and are expected to be low-risk. | ||
- Development of a previously approved unstable feature that matches the expected development of that feature. | ||
|
||
- 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: | ||
- Addition of a new, minor command-line argument, or an addition of an option to an existing one. | ||
weihanglo marked this conversation as resolved.
Show resolved
Hide resolved
|
||
- Addition of new fields and values to JSON outputs. | ||
- A bug fix or change that may technically involve a backwards-incompatible change. | ||
See the [Backwards compatibility] section for some examples. | ||
- Documentation changes that may substantially change the expected usage of Rust and Cargo. | ||
For example, the [SemVer chapter] contains subjective prescriptions for how users should develop their code. | ||
- A significant change in Cargo's console output. | ||
- A significant change to Cargo's code structure, or how maintenance or usage of the Cargo codebase is handled. | ||
- Beta backports that are risky or have any uncertainty about their necessity. | ||
- [Stable backports]. | ||
These usually also require involvement with the Release team. | ||
- A significant change to the management of the Cargo team itself or the processes it uses, such as significant updates to this document. | ||
- Addition of new members to the Cargo team, or other actions involving the team membership. | ||
These decisions are usually processed via private channels by the entirety of the team. | ||
- A change that is a "one-way door". | ||
That is, something that is difficult to reverse without breaking backwards compatibility. | ||
|
||
- 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: | ||
- Major changes or new features or options in `Cargo.toml` or the config files. | ||
- Changes to the registry index or API. | ||
- New or changed CLI options that are expected to have a significant impact on how Cargo is used. | ||
- New `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. | ||
|
||
[rfcbot]: https://github.com/rust-lang/rfcbot-rs | ||
[RFC process]: https://github.com/rust-lang/rfcs/ | ||
[Rust Internals]: https://internals.rust-lang.org/ | ||
[Unstable]: process/unstable.md | ||
[Backwards compatibility]: design.md#backwards-compatibility | ||
[Stable backports]: process/release.md#stable-backports | ||
[SemVer chapter]: https://doc.rust-lang.org/cargo/reference/semver.html | ||
|
||
## Contacting the team | ||
|
||
The team may be contacted through several channels: | ||
|
||
- If you have a **security concern**, please refer to Rust's [security policy] for the correct contact method. | ||
- Issues and feature requests can be submitted to [Cargo's issue tracker]. | ||
Please see the [Issues chapter] for more detail. | ||
- The [`t-cargo` Zulip channel][Zulip] stream is the chat platform the Cargo Team uses to coordinate on. | ||
- The <[email protected]> email address can be used to contact the team. | ||
However, using one of the other channels is strongly encouraged. | ||
|
||
[Zulip]: https://rust-lang.zulipchat.com/#narrow/stream/246057-t-cargo | ||
[security policy]: https://www.rust-lang.org/security.html | ||
[Cargo's issue tracker]: https://github.com/rust-lang/cargo/issues/ | ||
[Issues chapter]: issues.md |
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should we have anything on being clear in representations that reflect the team vs the individual?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can you say more about what your thoughts are here? I think I have a vague idea of what you're getting at here, but I'm not sure how to put it into words. I assume this is trying to make the distinction of making some public statement, and wanting to distinguish between "I'm speaking for the whole team" and "I'm just giving my personal viewpoint"?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thats it. I'm not sure what to even put down for a policy, if anything. Its just something I try to keep in mind
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We would always be recognized as “Cargo team member” or whatever your strongest public image when interacting with the community. That's a thing one can never shave off even after stepping down.
For example, when one team member talks about
cargo-eval
pre-RFC, even when they state it's their own personal opinion. They still have a vote to affect the decision. People then tend to see it as a portion of the team's opinion if they find the connection.That's an inevitable consequence of being a formal member.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In terms of making a statement for the whole team, we usually start like “after the team's recent discussion, we….” I think that kind of speaking gives enough information to the audience to decide where it comes from.
Just be clear. I am fine with not having a policy here for now.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It's absolutely the case that we'll be perceived as Cargo team members, but with some care we can make sure to state when we're speaking for the team, and when we're specifically not speaking for the team.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Following today's episode of the rust drama... being unclear about whether someone was speaking on behalf of the team or just expressing their own opinion may have been a key contributor to this round of drama.