You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: src/docs/feature-launch-process.md
+8-54Lines changed: 8 additions & 54 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -126,6 +126,10 @@ All *features* must be fuzzed for a minimum period of 4 weeks, with all fuzz bug
126
126
127
127
## Steps {#steps}
128
128
129
+
All features and their current step must be consistently tracked in [`src/flags/FEATURES.md`](https://cs.chromium.org/chromium/src/v8/src/flags/FEATURES.md) where you can also find more information on the code changes required for moving through the steps.
130
+
131
+
This file also serves as a reference for *Chrome Security* and others to determine the state of a *feature* at a specific point in the Git history.
132
+
129
133
### Inception
130
134
131
135
This is the *step* in which implementation in V8 is starting, but there might not be a [Chrome feature entry](https://chromestatus.com/features) or even a proper name for the *feature*. Code might be in local branches only or submitted to the main branch, guarded behind a *feature flag*.
@@ -160,30 +164,10 @@ After 1-2 milestones, we can remove the *feature flag*, outdated code and do oth
160
164
161
165
# Pre-staging { #pre-staging }
162
166
163
-
## When to pre-stage a feature
164
-
165
167
Pre-staging allows getting early feedback from fuzzing and ensuring that there are no obvious bugs left from fuzzing before opening up the *feature* further in staging.
166
168
167
169
This should happen two weeks before staging at latest to give the fuzzers enough time to find bugs, but can happen as soon as any fuzzer coverage is available and fuzzing can meaningfully test the code, even while the *feature* is still in development.
168
170
169
-
## How to pre-stage a feature
170
-
171
-
### Pre-staging a JavaScript or V8 feature
172
-
173
-
Pre-stage the *feature* to collect fuzzer coverage for at least two weeks, if not pre-staged earlier in feature development.
174
-
175
-
- In [`src/flags/flag-definitions.h`](https://cs.chromium.org/chromium/src/v8/src/flags/flag-definitions.h) add an implication from `experimental_fuzzing` to the *feature flag* using `DEFINE_WEAK_IMPLICATION()`.
176
-
177
-
### Pre-staging a WebAssembly feature
178
-
179
-
Pre-stage the *feature* to collect fuzzer coverage for at least two weeks, if not pre-staged earlier in feature development.
180
-
181
-
- In [`src/wasm/wasm-feature-flags.h`](https://cs.chromium.org/chromium/src/v8/src/wasm/wasm-feature-flags.h), move the *feature flag* from the `FOREACH_WASM_EXPERIMENTAL_FEATURE_FLAG` macro list to the `FOREACH_WASM_PRE_STAGING_FEATURE_FLAG` macro list.
182
-
- In [`tools/wasm/update-wasm-spec-tests.sh`](https://cs.chromium.org/chromium/src/v8/tools/wasm/update-wasm-spec-tests.sh), add the proposal repository name to the `repos` list of repositories.
183
-
- Run [`tools/wasm/update-wasm-spec-tests.sh`](https://cs.chromium.org/chromium/src/v8/tools/wasm/update-wasm-spec-tests.sh) to create and upload the spec tests of the new proposal.
184
-
- In [`test/wasm-spec-tests/testcfg.py`](https://cs.chromium.org/chromium/src/v8/test/wasm-spec-tests/testcfg.py), add the proposal repository name and the *feature flag* to the `proposal_flags` list.
185
-
- In [`test/wasm-js/testcfg.py`](https://cs.chromium.org/chromium/src/v8/test/wasm-js/testcfg.py), add the proposal repository name and the *feature flag* to the `proposal_flags` list.
186
-
187
171
# Staging { #staging }
188
172
189
173
## When to stage a feature
@@ -201,23 +185,6 @@ The staging of a *feature* defines the end of its implementation phase. The impl
201
185
202
186
Note that the *phase/stage* of the *spec feature* in the standardization process does not matter for staging the *feature* in V8. The proposal should, however, be mostly stable.
203
187
204
-
## How to stage a feature
205
-
206
-
To inform the Chrome Security team of the new state, move the tracking issue to the "V8 Feature staged" hotlist. This signals that the *feature* has reached some level of external scrutiny. To link the *feature* to the command line flag, make sure that the corresponding field in the issue is set correctly.
207
-
208
-
### Staging a JavaScript or V8 feature
209
-
210
-
After at least two weeks of fuzzer coverage in pre-staging, we can stage the *feature* to open it to the VRP, encouraging external bug reporting.
211
-
212
-
- Switch the flag definition from `DEFINE_EXPERIMENTAL_FEATURE` to `DEFINE_BOOL` with a `false` default.
213
-
- In [`src/flags/flag-definitions.h`](https://cs.chromium.org/chromium/src/v8/src/flags/flag-definitions.h), move the feature flag implication from the `experimental_fuzzing` to `future` (pure performance optimizations) or to `wasm_staging` (other changes). Either implication will continue fuzzing coverage, but an implication from `future` will also enable it for benchmarking which might or might not be desired.
214
-
215
-
### Staging a WebAssembly feature
216
-
217
-
After at least two weeks of fuzzer coverage in pre-staging, we can stage the *feature* to open it to the VRP, encouraging external bug reporting.
218
-
219
-
- In [`src/wasm/wasm-feature-flags.h`](https://cs.chromium.org/chromium/src/v8/src/wasm/wasm-feature-flags.h), move the feature flag from the `FOREACH_WASM_PRE_STAGING_FEATURE_FLAG` macro list to the `FOREACH_WASM_STAGING_FEATURE_FLAG` macro list.
220
-
221
188
# V8 launch review { #v8-launch-review }
222
189
223
190
V8 launch reviews are held before a *feature* reaches the general public, i.e. before it either goes into an origin or Finch trial or gets launched. The goal is to ensure that all necessary and useful steps were taken beforehand. Any *spec feature*, but also major refactorings like launching a new compiler phase, qualifies for this process.
@@ -301,7 +268,7 @@ To get the experiment going, do the following
301
268
- Request all required reviews for experimentation on the Chromestatus entry.
302
269
- Send *intent to experiment* (up to 6 months/milestones) to Blink API Owners and get one LGTM.
303
270
- Inform the origin trial team and wait for the resolution.
304
-
-Inform the Chrome Security Team about the pending experiment by moving the tracking issue to the "V8 Feature in trial" hotlist and linking the origin trial in a comment. Remove the issue from the "V8 Feature staged" hotlist.
271
+
-Update the step in [`src/flags/FEATURES.md`](https://cs.chromium.org/chromium/src/v8/src/flags/FEATURES.md)to `Origin trial`and link the trial registration for reference.
305
272
- Distribute the signup link to interested partners.
306
273
307
274
To get an extension (up to 3 months/milestones)
@@ -319,7 +286,7 @@ When a *feature* does not require any changes to user code, V8 can decide to run
319
286
320
287
- Consider adding GWS ids and inform partners of the experiment to track any changes in application metrics that are not covered by Chrome (e.g. performance metrics).
321
288
-[Submit a configuration](https://uma.googleplex.com/p/chrome/variations/creator/) to be tested in the Chrome repository.
322
-
-Make the Chrome Security Team aware of the pending experiment by moving the tracking issue to the "V8 Feature in trial" hotlist and linking the Finch configuration in a comment. Remove the issue from the "V8 Feature staged" hotlist.
289
+
-Update the step in [`src/flags/FEATURES.md`](https://cs.chromium.org/chromium/src/v8/src/flags/FEATURES.md)to `Finch trial`and link the Finch configuration for reference.
323
290
- Enable the Finch experiment, starting with 50% of canary/dev users.
324
291
- Inform potentially affected partners of the upcoming change, especially if they should monitor changes in GWS metrics more closely.
325
292
- Consider announcing the upcoming experiment with details on how to test them in the [Chrome Enterprise release notes](https://support.google.com/chrome/a/answer/7679408?hl=en&co=CHROME_ENTERPRISE._Product%3DChromeBrowser).
@@ -346,30 +313,17 @@ The optional longer experimentation time for critical features at 10% of stable
346
313
- All spec tests ([JavaScript](https://github.com/tc39/test262), [WebAssembly](https://github.com/WebAssembly/spec/tree/master/test)) pass.
347
314
- For *WebAssembly features*, the [Chromium DevTools checklist](https://chromium.googlesource.com/devtools/devtools-frontend/+/main/docs/checklist/webassembly.md) is satisfied.
348
315
349
-
## How to ship a feature
350
-
351
316
### Prerequisites
352
317
353
318
- Request all required reviews for shipping on the Chromestatus entry.
354
319
- Send *intent to ship* to Blink API Owners and get three LGTMs.
355
320
356
-
### Ship WebAssembly feature flags
357
-
358
-
- In [`src/wasm/wasm-feature-flags.h`](https://source.chromium.org/chromium/chromium/src/+/master:v8/src/wasm/wasm-feature-flags.h), move the *feature flag* from the `FOREACH_WASM_STAGING_FEATURE_FLAG` macro list to the `FOREACH_WASM_SHIPPED_FEATURE_FLAG` macro list.
359
-
- Additionally, enable the feature by default by changing the third parameter in `FOREACH_WASM_SHIPPED_FEATURE_FLAG` to `true`.
360
-
361
-
### Ship JavaScript and V8 feature flags
362
-
363
-
- In [`src/flags/flag-definitions.h`](https://cs.chromium.org/chromium/src/v8/src/flags/flag-definitions.h), remove any implication from `future` and `wasm-staging`.
364
-
- Set the default value of the *feature* in [`src/flags/flag-definitions.h`](https://cs.chromium.org/chromium/src/v8/src/flags/flag-definitions.h) to `true`.
365
-
366
-
### After enabling the feature
321
+
## After enabling the feature
367
322
368
323
- Ensure to add a blink CQ bot on the CL to check for [blink web test](https://v8.dev/docs/blink-layout-tests) failures caused by enabling the *feature* (add this line to the footer of the CL description: `Cq-Include-Trybots: luci.v8.try:v8_linux_blink_rel`).
369
324
- If the *feature* has been tried in a Finch experiment, you can soft-launch the *feature* via Finch by setting its experiment to 100% of users. This allows faster shipping and can be rolled back easily.
370
325
- Set a reminder to remove the *feature* flag, the Finch configuration and outdated code after two milestones.
371
326
372
-
###Disabling an already shipped feature
327
+
## Disabling an already shipped feature
373
328
374
329
If there are any issues during early stages, a *reverse Finch trial* can disable the *feature* if the flag has not been removed yet and the Finch config is still there. After a prolonged time, this might not be a viable option anymore even if the *feature flag* is still active, because the alternative code path is no longer tested and poses a higher risk.
0 commit comments