Presuming that an initiative continues successfully, it will go through the following stages:
|Proposal||Find a team liaison||Discussion||Team member seconds, thereby agreeing to act as liaison|
|Refine the design and work towards an RFC||Active zulip stream; tracking issue / repository; code can land under "unstable" feature gate||RFC is approved by team|
|Development||Finalize design and implementation||Removing the "experimental" tag on a feature||Liaison declares the proposal feature complete|
|Feature complete||Gathering feedback||Advertisting the initiative as "feature complete"||Stabilization proposal approved|
|Stabilized||Use on stable branch||(none)|
The "experimental" stage can be skipped if the initiative is sufficiently simple that a RFC doesn't seem necessary; see "simple initiatives" below.
Initiatives can also become inactive for a variety of reasons.
The above process is the ideal, but there are alternative routes that occur in practice for simple initiatives. The most common is one that begins with a PR:
- Implement the idea and open a PR.
- Nominate the PR to the lang team's attention.
- The lang team may opt to either approve the PR (skip directly to "feature complete"), assign an owner (skip directly to "development"), or to request a proposal.
Some initiatives are broader in scope and are tagged as "umbrella initiatives". These are far-reaching tasks like "async I/O". While they have goals, they don't have a clear stage. Instead, they have project boards (and potentially subinitiatives) of their own that track their state.
graph TD HaveGoodIdea[Have a good idea] FileLangProposal[File proposal issue<br>on lang-team repository] RejectWithExplanation[Proposal closed,<br>with an explanation of why] Experimental[Expermental: Iterate on design and develop an RFC] Development["Develop implementation"] FeatureComplete["Feature complete"] Stabilized["Stabilization is approved"] HaveGoodIdea-- Idea seems ready -->FileLangProposal HaveGoodIdea-- iterate on internals/zulip/etc -->HaveGoodIdea FileLangProposal-- Concept declined by lang team -->RejectWithExplanation FileLangProposal-- Liason seconds, no RFC required-->Development FileLangProposal-- Liason seconds, RFC required -->Experimental Experimental-- RFC is approved -->Development Development -- Iterate and improve design --> Development; Development -- Ready for people to experiment --> FeatureComplete; FeatureComplete -- Decide to make changes --> Development; FeatureComplete -- Prepare stabilization report --> Stabilized;