Skip to content

Commit 875f1e6

Browse files
authored
Merge pull request #105 from nikomatsakis/initiatives
introduce new lang team "initiatives" process
2 parents 8e3c501 + db70289 commit 875f1e6

31 files changed

+596
-280
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
---
2+
name: Active initiative tracking issue
3+
about: Issue representing an active initiative
4+
title: "(My meeting proposal)"
5+
labels: lang-initiative, T-lang
6+
assignees: ""
7+
---
8+
9+
# Summary
10+
11+
_Briefly describe the goal of the initiative_
12+
13+
# Info
14+
15+
- Owner: _name here_
16+
- Liaison: _name here_
17+
- Zulip stream [`#project-XXX`](XXX)
18+
- [stage]: Experimental
19+
- Repository [rust-lang/XXX](https://github.com/rust-lang/XXX) (if any)
20+
21+
[Stage]
22+
23+
# What is this issue?
24+
25+
This issue represents an **[active initiative]**. It is meant to be used for
26+
the group to post updates to the lang team (and others) in a lightweight
27+
fashion. Please do not use the comments here for discussion, that should be kept
28+
in the Zulip stream (discussion comments here will be marked as off-topic).
29+
30+
[stage]: https://lang-team.rust-lang.org/initiatives/stages.md
31+
[active initiative]: https://lang-team.rust-lang.org/initiatives.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
---
2+
name: Initiative proposal
3+
about: Propose a new initiative affiliated with the lang-team
4+
title: "(My initiative proposal)"
5+
labels: major-change, T-lang
6+
assignees: ""
7+
---
8+
9+
# Proposal
10+
11+
## Summary and problem statement
12+
13+
_Describe the problem(s) this initiative is trying to solve as concisely as you can._
14+
15+
## Motivation, use-cases, and solution sketches
16+
17+
_Please describe the problem you are trying to solve and give some use-cases that illustrate it._
18+
19+
_Please also sketch out one or more solutions to the problem. You don't have to have all the details worked out, but it should be enough to convey the idea._
20+
21+
## Links and related work
22+
23+
_Provide links to any internal thread(s), github issues, related work from other languages, or other things that are worth following up on._
24+
25+
## Initial people involved
26+
27+
- Owner, if known:
28+
- Liaison
29+
30+
## What happens now?
31+
32+
This issue is part of the lang-team [initiative process]. Once this issue is filed, a Zulip topic will be opened for discussion, and the lang-team will review open proposals in its weekly triage meetings. You should receive feedback within a week or two.
33+
34+
**This issue is not meant to be used for technical discussion. There is a Zulip stream for that. Use this issue to leave procedural comments, such as volunteering to review, indicating that you second the proposal (or third, etc), or raising a concern that you would like to be addressed.**
35+
36+
[forge]: https://forge.rust-lang.org/
37+
[initiative process]: https://lang-team.rust-lang.org/initiatives.md

.github/ISSUE_TEMPLATE/project-group.md

-27
This file was deleted.

.github/ISSUE_TEMPLATE/project_proposal.md

-47
This file was deleted.

.travis.yml

+2-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ rust:
1313
- stable
1414

1515
before_script:
16-
- cargo install --vers "^0.4.5" mdbook
16+
- cargo install --vers "^0.4.10" mdbook
17+
- cargo install --vers "^0.8.3" mdbook-mermaid
1718

1819
script:
1920
- mdbook build && mdbook test

book.toml

+17
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,20 @@ language = "en"
44
multilingual = false
55
src = "src"
66
title = "The Rust Language Design Team"
7+
8+
[output.html]
9+
additional-js =["mermaid.min.js", "mermaid-init.js"]
10+
11+
[output.html.fold]
12+
enable = true
13+
level = 0
14+
15+
[preprocessor]
16+
[preprocessor.mermaid]
17+
command = "mdbook-mermaid"
18+
19+
[output.html.redirect]
20+
"/rust-2018/edition-changes.html" = "index.html"
21+
"/priorities.html" = "initiatives/priorities.html"
22+
"/project_groups.html" = "initiatives/active.html"
23+
"/proposing_a_project.html" = "initiatives/proposing.html"

mermaid-init.js

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
mermaid.initialize({startOnLoad:true});

mermaid.min.js

+32
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/SUMMARY.md

+18-3
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,27 @@
11
# Summary
22

33
- [Welcome](./welcome.md)
4+
- [Initiatives](./initiatives.md)
5+
- [Current priorities](./initiatives/priorities.md)
6+
- [Process](./initiatives/process.md)
7+
- [Roles](./initiatives/process/roles.md)
8+
- [Owner](./initiatives/process/roles/owner.md)
9+
- [Liaison](./initiatives/process/roles/liaison.md)
10+
- [Stages](./initiatives/process/stages.md)
11+
- [Proposal](./initiatives/process/stages/proposal.md)
12+
- [Experimental](./initiatives/process/stages/experimental.md)
13+
- [Development](./initiatives/process/stages/development.md)
14+
- [Feature complete](./initiatives/process/stages/feature_complete.md)
15+
- [Stabilized](./initiatives/process/stages/stabilized.md)
16+
- [Inactive](./initiatives/process/stages/inactive.md)
17+
- [FAQ](./initiatives/faq.md)
18+
- [Lang team "how to" guide](./how_to.md)
19+
- [Nominate an issue](./how_to/nominate.md)
20+
- [Propose an initiative](./how_to/propose.md)
21+
- [Request a design meeting](./how_to/design_meeting.md)
422
- [Chat platform](./chat_platform.md)
523
- [Calendar](./calendar.md)
624
- [Meetings](./meetings.md)
7-
- [Current priorities](./priorities.md)
8-
- [Active project groups](./project_groups.md)
9-
- [Proposing a new project](./proposing_a_project.md)
1025
- [Design notes](./design_notes.md)
1126
- [Allowing integer literals like `1` to be inferred to floating point](./design_notes/int_literal_as_float.md)
1227
- [Generalizing coroutines](./design_notes/general_coroutines.md)

src/calendar.md

-1
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,3 @@ meetings.
1111
[caldav]: https://calendar.google.com/calendar/embed?src=recud4b9o8cmc0m5rmr033p5nk%40group.calendar.google.com
1212
[ics]: https://calendar.google.com/calendar/ical/recud4b9o8cmc0m5rmr033p5nk%40group.calendar.google.com/public/basic.ics
1313
[main meeting]: https://calendar.google.com/event?action=TEMPLATE&tmeid=NmU4ajUyaWpmaHZic2YzYXVxa25rcnIyZHRfMjAxOTA0MTFUMTkwMDAwWiByZWN1ZDRiOW84Y21jMG01cm1yMDMzcDVua0Bn&tmsrc=recud4b9o8cmc0m5rmr033p5nk%40group.calendar.google.com&scp=ALL
14-

src/how_to.md

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# Lang team "how to" guide
2+
3+
This section includes instructions on how to do various interactions with the lang team.

src/how_to/design_meeting.md

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# Proposing a topic for a design meeting
2+
3+
You can propose a topic for a design meeting by opening an [Design
4+
meeting proposal] issue on the lang-team repository. We schedule meetings in our monthly
5+
planning meeting.
6+
7+
[design meeting proposal]: https://github.com/rust-lang/lang-team/issues/new/choose
8+
9+
Every design meeting begins by reading a document and leaving comments. That document
10+
must be prepared 24 hours in advance of the design meeting and posted on the issue.
11+
If you propose an issue, you should be willing to prepare that document, or else indicate
12+
who will do the preparation.
13+
14+
Typically, design meetings are associated with active initiatives: you may wish to
15+
[propose an initiative](./propose.md) instead.

src/how_to/nominate.md

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# Nominate an issue
2+
3+
- Nomination is currently supported on the following repositories:
4+
- rust-lang/rfcs
5+
- rust-lang/rust
6+
- rust-lang/reference
7+
- rust-lang/lang-team
8+
- (this set is defined by the `nominated` list in the [triagebot source code](https://github.com/rust-lang/triagebot/blob/master/src/agenda.rs))
9+
- Tag the issue with the `I-nominated` and `T-lang` labels by issuing the following [rustbot] command:
10+
- `@rustbot label +I-nominate +T-lang`
11+
- Add a comment explaining
12+
- What question you would like answered by the lang team
13+
- Relevant background info or links to relevant info that the lang team can use to get "oriented" in the discussion
14+
15+
[rustbot]: https://github.com/rust-lang/triagebot/wiki

src/how_to/propose.md

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# Propose an initiative
2+
3+
See the [initiative process](../initiatives/process.md) for more details.

src/initiatives.md

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
# Initiatives
2+
3+
A lang team **initiative** is some active effort with a clear goal or deliverable.
4+
Typically initiatives are changes to the language, but they could also be documentation, specifications, or something internal to the lang team.
5+
6+
## Proposed initiatives
7+
8+
You can see the [currently proposed initiatives] on Github.
9+
10+
[currently proposed initiatives]: https://github.com/rust-lang/lang-team/issues?q=is%3Aissue+is%3Aopen+label%3Amajor-change
11+
12+
## Active initiatives
13+
14+
You can see the active initiatives, and their state, on the lang team [project board].
15+
16+
[project board]: https://github.com/rust-lang/lang-team/projects/2
17+
18+
### Learning more about an active initiative
19+
20+
Each initiative has a tracking issue that describes its state in more detail along with regular updates. The tracking issue also identifies two key people for the intiative:
21+
22+
- The [owner], who drives the design.
23+
- The [liaison], who synchronizes with the lang team and helps resolve thorny questions.
24+
25+
If you have questions, the issue also identifies the [Zulip] stream where conversation is taking place. If you look at the comments of the issue, you may also find requests for help or other forms of participation.
26+
27+
[owner]: initiatives/roles/owner.md
28+
[liaison]: initiatives/roles/liaison.md
29+
[zulip]: ./chat_platform.md
30+
31+
## How does one propose a new initiative?
32+
33+
Read more in the [process](./initiatives/process.md) page!

src/initiatives/faq.md

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# "Frequently asked questions" about initiatives
2+
3+
## Does the initiative owner make decisions?
4+
5+
The initiative owner drafts the proposed design and takes feedback from the liaison and team about what direction to take. This feedback can take the form of "you need to do X", but typically it is more about "you need to address this scenario". Or, put another way, if the initiative owner doesn't like the proposed direction, it's up to them to find an alternative that they do like which meets those same constraints, or to argue why the constraints are not necessary.
6+
7+
Note that serving as initiative owner is a high level of responsibility and may not be a good "starting place" for involvement within the Rust project. In practice, initiative owners should be experienced enough that they could mentor others to do the implementation work. If you don't know the language or system well enough to do that, then you probably are not ready to be an owner -- but you may be ready to be mentored by the owner!
8+
9+
## Is the word of a lang team member law?
10+
11+
Of course not. Well, ok, sometimes. For the most part, initiative owners are encouraged to treat lang team members like any other member of the community -- this implies a lot of respect for their opinions, since they are experienced, knowledgeable people, but the initiative owner still ultimately owns the design and should use their own judgement about what things to recommend. However, lang team members do have the option of adding constraints that must be met, and they can override the initiative owner if necessary. That is typically done by raising the concern with the rest of the team/leads in a more formal way.
12+
13+
## What happens if an owner stops working on things?
14+
15+
Initiative owners are often volunteers and may have changes in priorities or find they don't have as much time as they thought they did. In that case, they can simply step back. The liaison can then either find a new initiative owner, or perhaps assume initiative owner duties themselves but find a new liaison. If they are not able to do that, the initiative will be closed as "paused".
16+
17+
## What if we decide a initiative is a bad idea?
18+
19+
Sometimes, in the course of trying to design a initiative, we decide it was the wrong direction. That's ok! At any point the liaison can decide that the initiative isn't working out and close it. However, in doing so, they should document WHY they feel it did not work out -- and identify potential conditions where the idea may make sense later on. This documentation will typically take the form of a [design note] in the lang-team repository.
20+
21+
If there are concerns about this, those concerns can be raised with the lang team leads.
22+
23+
Closed initiatives will be removed from the project board and the code for them will be removed from the compiler.
24+
25+
[design note]: ../design_notes.md
File renamed without changes.

src/initiatives/process.md

+58
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
# Process
2+
3+
This page describes how lang team initiatives work. This is the process to use if you have an idea for a change you would like to make in the language.
4+
5+
## Summary
6+
7+
In a nutshell, the process for a successful initiative is as follows:
8+
9+
- Have an idea
10+
- Talk about it on internals, Zulip, etc to flesh it out a bit
11+
- Ideally, identify a potential [owner]
12+
- Open a [proposal] as an issue on the lang-team repository
13+
- A lang team member can decide to be your [liaison] and [_second_ your proposal][2nd].
14+
- Once that happens, we will create a Zulip stream, tracking issue, and (optionally) repository, etc.
15+
- If warranted, [explore][experimental] the design space and author the RFC
16+
- In this phase, the [owner] works with the [liaison] and other contributors to expore the design space and develop the RFC
17+
- Code can be landed in this phase, but the feature gate is marked as "experimental" and its associated page in the [Unstable Book](https://doc.rust-lang.org/nightly/unstable-book/the-unstable-book.html) also incudes a disclaimer that the content has not been RFC'd.
18+
- Users of the feature gate will get a warning that the RFC is under development
19+
- Once the RFC is ready, it can be opened on the RFC repository and approved by the lang team
20+
- Finish [development]
21+
- At this point, development proceeds but the feature gate does not have to be marked as "experimental" (the unstable book can also be updated).
22+
- The goal here is both to implement the feature and to create an "explainer" that guides people on what it does (this can be located in the unstable book or elsewhere).
23+
- [Feature complete]
24+
- When the liaison feels that the code and explainer are ready, the initiative may be declared "feature complete".
25+
- This is primarily a 'signaling' mechanism to the broader community to encourage testing and feedback.
26+
- This is a good phase in which to write the Rust reference chapter and other supporting documentation.
27+
- Presuming feedback is positive, a stabilization report is prepared and (hopefully) approved.
28+
- [Stabilized]
29+
- Done! The Zulip stream can stick around as a place for further discussion, but the initiative is complete. Any Rust team and repository is typically archived.
30+
- The final step is to conduct a retrospective discussion between the [owner] and [liaison] about how the process went.
31+
32+
[proposal]: ./process/stages/proposal.md
33+
[owner]: ./process/roles/owner.md
34+
[liaison]: ./process/roles/liaison.md
35+
[proposal]: ./process/stages/proposal.md
36+
[2nd]: ./process/stages/proposal.html#exit-seconding-a-proposal
37+
[experimental]: ./process/stages/experimental.md
38+
[development]: ./process/stages/development.md
39+
[feature complete]: ./process/stages/feature_complete.md
40+
[stabilized]: ./process/stages/stabilized.md
41+
42+
## Goals
43+
44+
- **Empower individuals and give ownership:**
45+
- Each initiative in this proposal is ultimately owned by a single person who drafts the proposals and recommendations.
46+
- The role of the lang team is to review the designs, provide feedback, and ultimately decide whether to accept the design.
47+
- The team can introduce constraints and requests that the owner should either satisfy or explain why they are not able to do so.
48+
- **Clarify the role of each individual:**
49+
- As described in the [roles] page, each individual and group involved in an initiative has a clear, defined role in the decision making process.
50+
- **Minimize friction for "reversible" decisions and enable experimentation:**
51+
- We avoid requiring "full checkoff" from team members for things that can be readily reversed.
52+
- We want to make it relatively easy to start hacking and experimenting with an idea. Under this proposal, all it takes is to find an owner, a liaison, and to have the team leads approve.
53+
- Other team members are encouraged to log concerns and constraints that ought to be addressed in the design, rather than blocking experimentation.
54+
- **Ensure that decisions are truly reversible:**
55+
- On the flip side, although we wish to make it easy for ideas to move forward, we recognize that this can create a lot of momentum that allows ideas to force their way through the process.
56+
- This is why code in the [experimental] phase issues a warning, for example.
57+
58+
[roles]: ./process/roles.md

src/initiatives/process/roles.md

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# Roles
2+
3+
There are several key roles for any initiative:
4+
5+
- The [owner] assembles the "menu" of overall solutions to the problem and helps to narrow them down to the most viable.
6+
- Naturally, they are encouraged to make recommendations on what they consider to be the right choice. These recommendations should include an explanation of what analysis they did on the other options that led them to this recommendation.
7+
- The [liaison] represents the lang team:
8+
- They guide the owner in picking from the menu. Naturally they may also make suggestions, ask questions, or request that the owner expand or explore a fresh area.
9+
- They identify when to involve the full team via a [design meeting].
10+
- They keep up to date on the initiative's progress and can summarize its status for other lang team members.
11+
- The **lang team members** make the ultimate decision on what changes to accept.
12+
- They don't typically do the design, though of course they may make suggestions or introduce constriants that the design ought to meet (the owner can argue that these constraints are undesirable).
13+
- The **lang team leads** make the ultimate decisions on prioritiziation (which initiatives to pursue).
14+
- They also help resolve other disputes that fail to come to agreement
15+
16+
The owner and liaison are each a single person, though that person can change over time. They cannot both be the same person.
17+
18+
[owner]: ./roles/owner.md
19+
[liaison]: ./roles/liaison.md
20+
[design meeting]: ../../meetings.md

0 commit comments

Comments
 (0)