Skip to content

Commit 9ab5446

Browse files
authored
Rebase the Phase Process description on the CG's current process (#549)
* Rebase the Phase Process description on the CG's current process The [CG Phase Process document] has recently split out the entry requirements for each stage from the activities that happen within each stage, fixing an ambiguity about what happens before a stage and what happens within a stage. It also contains a number of generally useful updates. This PR updates the WASI Phase Process using wording derived from the CG Phase Process, adapting it to meet WASI's needs. The resulting process is roughly the same as the existing process, however I've made it more specific in a few areas: - Phase 2 requires a wit description. - Phase 3 requires there be a plan for how the phase 4 accpetance criteria will be met. [CG Phase Process document]: https://github.com/WebAssembly/meetings/blob/main/process/phases.md * Fix a typo. * Rename "phase 4 acceptance criteria" to "portability criteria". * Re-introdce "two or more implementations" language.
1 parent 4712d49 commit 9ab5446

File tree

1 file changed

+77
-27
lines changed

1 file changed

+77
-27
lines changed

Contributing.md

+77-27
Original file line numberDiff line numberDiff line change
@@ -3,58 +3,108 @@
33
Interested in participating? Please follow
44
[the same contributing guidelines as the design repository][].
55

6-
[the same contributing guidelines as the design repository]: https://github.com/WebAssembly/design/blob/master/Contributing.md
6+
[the same contributing guidelines as the design repository]: https://github.com/WebAssembly/design/blob/master/Contributing.md
77

88
Also, please be sure to read [the README.md](README.md) for this repository.
99

10-
## Championing a Proposal
10+
To contribute to an [existing proposal](https://github.com/WebAssembly/WASI/blob/main/Proposals.md),
11+
refer to the linked proposal repository.
1112

12-
If you want to champion a new proposal, here's what you need to do in each phase:
13+
The start a new proposal, the first step is to file an issue in the
14+
[WASI repository](https://github.com/WebAssembly/WASI/issues) presenting
15+
the idea. A good API proposal should discuss the scope of the API,
16+
the use cases, and the places it would be expected to be implemented.
17+
Then proceed with the rest of the steps in phase 0 described below.
1318

14-
### Phase 0: Gauge interest
19+
If you have any questions about any step of the process, please reach out
20+
to one of the WASI Subgroup (SG) chairs.
1521

16-
You have an idea for an API. To see whether others are interested in pursuing the idea, you should work up a rough description of the API and post it somewhere that is publicly visible. This could be in the WASI issue queue, or in a gist or as its own repo. You can use the [proposal template] if you like, but it's not required in this phase.
22+
## The Phase Process
1723

18-
Once you've done this, you can optionally have the subgroup discuss the idea by adding a discussion item to the [WASI meeting agenda].
24+
The following process is modeled after [WebAssembly CG's Phase Process],
25+
though it differs in several areas, to reflect the unique needs of APIs.
1926

20-
Once you feel ready, you can add a vote to the [WASI meeting agenda] to move to the next stage.
27+
Something is out-of-scope if it doesn't fit the [WASI Subgroup's charter](https://github.com/WebAssembly/WASI/blob/main/Charter.md) and there's agreement that the charter should not be amended to cover the proposal.
2128

22-
### Phase 1: Write spec text
29+
In general, the process moves forward through a series of numbered phases.
30+
However, if issues are uncovered or consensus devolves,
31+
proposals should back up to the appropriate prior step.
2332

24-
At this point, the WASI SG chair will create a new repo for the proposal in the WebAssembly GitHub org. This will follow the conventions of the [proposal template] and [Wit in WASI](docs/WitInWasi.md). If you have any questions about how to fill in the spec template, you can reach out to the WASI SG chair.
33+
No vote is required for a proposal to enter phase 0. To advance from one phase
34+
to another, a vote proposing the advancement is added to a
35+
[WASI Subgroup meeting](https://github.com/WebAssembly/meetings/tree/main/wasi) agenda
36+
through a pull request, and the SG votes on whether to approve it, evaluating
37+
whether the new phase's entry requirements have been met.
2538

26-
As part of moving to the next phase, the champions need to define the acceptance criteria for Phase 4. This is because WASI includes APIs that cover a diversity of different domains and use cases, so the acceptance criteria can be very different between different proposals.
39+
### 0. Pre-Proposal [Individual Contributor]
2740

28-
Some examples of potential criteria:
41+
Entry requirements:
2942

30-
- multiple independent production implementations
31-
- implementations on multiple host platforms
32-
- polyfill implementations
33-
- bindings in toolchains and libraries
43+
* A WASI Subgroup (SG) member has an idea. Notably, no SG vote is required to begin phase 0.
3444

35-
Note: portability requirements may vary between proposals, as not all features will necessarily make sense in all host environments.
45+
During this phase:
3646

37-
With all this in place, you can add a vote to [WASI meeting agenda] to move to the next stage.
47+
1. An issue is filed on the [WASI repository](https://github.com/WebAssembly/WASI/issues) to present the idea.
48+
1. Discussion on the API occurs on the issue.
49+
1. A champion or champions emerge. They may add the proposal to the [proposal list](https://github.com/WebAssembly/WASI/blob/main/Proposals.md) at phase 0.
50+
1. The champion(s) put together a description of the API in their own GitHub repository or on the issue. You can use the [proposal template] if you like, but it's not required in this phase.
3851

39-
### Phase 2: Work with implementers to prototype and refine the design
52+
### 1. Feature Proposal [WASI Subgroup]
4053

41-
At this point, you should be prototyping the API to make sure it works in practice, and you should develop a test suite which can be used by other implementations to validate their spec compliance.
54+
Entry requirements:
4255

43-
Once the implementation has stabilized, it's again time to add a vote to [WASI meeting agenda] to move to the next stage.
56+
* There is general interest within the SG in this API.
57+
* The SG believes the API is in-scope and will plausibly be workable.
4458

45-
### Phase 3: Validate the design through multiple implementations
59+
During this phase:
4660

47-
At this point, you'll need to get more implementers involved. How many implementations you need depends on the Phase 4 acceptance criteria that you set in Phase 2.
61+
1. If the proposal is not already listed, it should be added to the [proposal list](https://github.com/WebAssembly/WASI/blob/main/Proposals.md) at this time.
62+
1. A new repository, forking the [proposal template] repo, is created by one of the SG chairs, or transferred to the WebAssembly organization by the champion.
63+
1. The champion will attempt to reach broad consensus in the Subgroup.
64+
1. Pull requests and issues are used to iterate on the design of the API. Specifically, an overview document must be produced that specifies the API with reasonably precise and complete language before attempting to move to phase 2 (meaning it is sufficiently precise to be implemented following this description, without obvious holes or ambiguities).
65+
1. If relevant to demonstrate the viability of a API, prototype implementations of the API are implemented by interested embedders (possibly on a branch).
4866

49-
You may need to make changes in response to implementer feedback, but we expect the API to be pretty stable by this point. If implementors uncover especially challenging design issues, the proposal may be sent back to Phase 2 for more development.
67+
Additionally during this phase:
5068

51-
Once the implementations are in place, you can add the final WASI SG vote to [WASI meeting agenda]. After this, the proposal advances to a vote in the broader WebAssembly CG.
69+
* The champions define the *portability criteria* for Phase 4.
5270

53-
### Phases 4 & 5: Push it over the finish line
71+
This is intended to translate the spirit of the CG Phase Process' "Two or more Web VMs" requirement to meet WASI's needs. The criteria should establish at least:
72+
- Two or more implementations: Each proposal should say what kinds of implementations.
73+
- Portability: WASI APIs should be portable, however that can mean different things to different use cases, and no one definition covers everything. Consequently, each proposal should define criteria establishing its specific portability requirements.
74+
- Practicality: It's important that WASI APIs be implementable and usable in real-world use cases, so each proposal should define criteria establishing a sufficient level of confidence.
75+
- Testing: APIs will have different needs in terms of environments needed to test them, so each proposal should define criteria establishing what form the testing will take.
5476

55-
The specific process in Phases 4 and 5 will be determined when we have a proposal ready for them.
77+
### 2. Feature Description Available [WASI Subgroup]
5678

57-
Note: While we mostly follow the [WebAssembly CG's Phase Process], the requirements around Web VM implementation, formal notation and the reference interpreter don't apply in the context of WASI.
79+
Entry requirements:
80+
81+
* The portability criteria are documented in the proposal.
82+
* Precise and complete overview document is available in a proposal repo around which a reasonably high level of consensus exists.
83+
* A [wit](https://github.com/WebAssembly/component-model/blob/main/design/mvp/WIT.md) description of the API exists.
84+
* All dependencies of the wit description must have reached phase 2.
85+
86+
During this phase:
87+
88+
* One or more implementations proceed on prototyping the API.
89+
* A plan is developed for how the portability criteria will be met.
90+
91+
## 3. Implementation Phase [WASI Subgroup]
92+
93+
Entry requirements:
94+
95+
* The portability criteria must be either met or there must be a plan for how they're expected to be met.
96+
* All dependencies of the wit descriptions must have reached phase 3.
97+
98+
During this phase, the following proceeds in parallel:
99+
100+
* Implementations are built
101+
* Toolchains, libraries, and other tools using the API are built
102+
* Remaining open questions are resolved.
103+
* The plan for satisfying the portability criteria is followed, though the plan may change over time.
104+
105+
### Phases 4 & 5: To be determined
106+
107+
Phases 4 and 5 are where a feature is finished and standardized. As WASI matures, the WASI Subgroup will coordinate with its parent WebAssembly Community Group and the WebAssembly Working Group to define a process for standardization.
58108

59109
[proposal template]: https://github.com/WebAssembly/wasi-proposal-template
60110
[WASI meeting agenda]: https://github.com/WebAssembly/meetings/tree/main/wasi

0 commit comments

Comments
 (0)