From 5f17741fd7c73119a8e25270ca2070d04d73cc0c Mon Sep 17 00:00:00 2001 From: Patrick Brosset Date: Fri, 5 Jul 2024 16:56:35 +0200 Subject: [PATCH 1/8] Draft contribution docs --- docs/CONTRIBUTING.md | 150 +++++++++++++++++++++++++++--- docs/README.md | 211 +------------------------------------------ docs/guidelines.md | 208 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 350 insertions(+), 219 deletions(-) create mode 100644 docs/guidelines.md diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md index 8f007b32ead..8300a91f84c 100644 --- a/docs/CONTRIBUTING.md +++ b/docs/CONTRIBUTING.md @@ -1,21 +1,147 @@ -# Contributing +# Contributing to the web-features project -Thanks for your interest in contributing to this project! -Before you contribute, consider the following: +Thanks for your interest in contributing to this project! Before you contribute, consider the following: -- Help us create a kind, welcoming, and productive project. +* Help us create a kind, welcoming, and productive project. + You can do this in part by following the [W3C Code of Ethics and Professional Conduct](https://www.w3.org/Consortium/cepc/), which governs conduct on this project. -- All contributions to this project are licensed under the terms of the Apache License, Version 2.0. +* All contributions to this project are licensed under the terms of the Apache License, Version 2.0. + [Read `LICENSE.txt` for details](../LICENSE.txt). -## Get started +There are multiple ways to contribute to the web-features repository, such as: -The project is in its early stages, so we’re still developing tools and processes to help improve and expand our work. -To get started contributing, take a look the following: +* Adding a missing feature to the repository, from scratch. +* Adding a missing feature to the repository, by updating a feature that was already drafted. +* Updating an existing feature, for example to change its name, description, support data, or other fields. +* Reviewing a pull request that was submitted by someone else, to check if the feature is correctly authored. -* Go to [feature guidelines](./README.md#feature-guidelines). -* Go to [open issues](https://github.com/web-platform-dx/web-features/issues) to propose new feature groups or report a bug. -* Go to [open PRs](https://github.com/web-platform-dx/web-features/pulls) to review incoming feature groups and updates. +In any case, **thank you** for wanting to help. This document will guide you through the process of contributing to the web-features repository. -Also consider joining [the WebDX Community Group](https://www.w3.org/community/webdx/). +Also consider joining the [WebDX Community Group](https://www.w3.org/community/webdx/). + +## What makes a feature + +Think of features as individual components of the web platform that web developers can use to achieve specific tasks. + +As such, a feature has no specific size. Some features might cover single CSS properties while other features cover entire JavaScript APIs with multiple interfaces, methods, and properties. As long as a web developer would use this to achieve a specific goal, it's a feature. + +For example, the `fetch` API is a feature, the `:has()` CSS pseudo-class function too, and so is the Web Audio API. + +### Feature file name and format + +Features in this repository are authored as **YAML files** that are stored in the [`features`](https://github.com/web-platform-dx/web-features/tree/main/features) directory. Each file corresponds to a single feature, and contains metadata about the feature, such as its name, description, specification, or support data. + +For example, the `fetch` API feature is described in the [`features/fetch.yml`](https://github.com/web-platform-dx/web-features/blob/main/features/fetch.yml) file. + +The name of the file also constitutes the unique ID of the feature. In the example above, the unique ID of the feature is `fetch`. + +Feature IDs must be unique as they are used in other projects to reference the feature. For example, the [browser-compat-data](https://github.com/mdn/browser-compat-data/) project references feature IDs in their compatibility data. + +### Feature dist files + +The YAML files that are used to author features are also used to generate _dist_ files. Dist files are also YAML files, but they end with the `.yml.dist` extension. + +For example, the `fetch` feature file is `features/fetch.yml`, and its dist file is `features/fetch.yml.dist`. + +You **never edit a dist file** directly. Dist files are generated from the authored YAML files, and are used at build time to generate the final data bundle that's used by other projects. + +It's important to note that, even if dist files are generated artifacts, they are still checked-in to the repository. This is normal and expected. Because dist files contain the compatibility data and status information for a feature, we review them as part of the pull request process. + +## Finding features to work on + +In some cases, you will already have an idea for a feature to add to the repository. This could be because you've just heard about a feature on a blog post, documentation website, or other source, and noticed it was missing from this repository. + +In other cases, you might want to help but don't have a specific feature in mind. That's okay too. You can find inspiration in the following places: + +* [The list of issues with the **feature definition** label](https://github.com/web-platform-dx/web-features/issues?q=is%3Aopen+is%3Aissue+label%3A%22feature+definition%22). +* [The list of draft features](https://github.com/web-platform-dx/web-features/tree/main/features/draft). + +A third case is if you've found a feature that's incorrectly defined. For example if its description is misleading, or you believe the browser support data is incorrect. + +In any case, before starting to work on a feature, make sure it isn't already being worked on by checking the list of [pull requests with the **feature definition** label](https://github.com/web-platform-dx/web-features/pulls?q=is%3Aopen+is%3Apr+label%3A%22feature+definition%22). + +## Contributing to the repository + +Use the sections below to help you get started with the different ways to contribute to the web-features repository. + +### Fork the repository and set up your local environment + +Before being able to contribute to the repository, you need to fork it, and get accustomed to the GitHub pull request workflow: + +1. Go to the [web-features repository home page](https://github.com/web-platform-dx/web-features). +1. Click **Fork** in the top-right corner of the page. GitHub creates a fork of the repository under your GitHub account. +1. Clone the forked repository locally on your computer. + +To learn more about the fork and pull request process, see [Fork a repository](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/fork-a-repo). + +When you have the repository cloned locally, set up your local environment: + +1. [Install Node.js](https://nodejs.org). +1. At a command line prompt, navigate to the root of the repository. + + `cd path/to/web-features` + +1. Install the project dependencies. + + `npm install` + +### Create a new feature from scratch + +To create a new feature from scratch: + +1. Go through the steps in [Fork the repository and set up your local environment](#fork-the-repository-and-set-up-your-local-environment). + +1. Decide what the unique ID for your new feature should be. To help you, check the [Identifiers](./guidelines.md#identifiers) section of the feature guidelines. + +1. Create a file in the `features` directory with the name of your feature ID, and the `.yml` extension. For example, if your feature ID is `my-feature`, create a file named `features/my-feature.yml`. + +1. Open the file in your favorite text editor, and add the following minimum content: + + ```yaml + name: "My feature" + description: "A short description of the feature." + spec: https://urlofthespec.com + ``` + + For guidance, see the [Names](./guidelines.md#names) and [Descriptions](./guidelines.md#descriptions) sections of the feature guidelines. + +1. Optionally add a `group` field to the feature. + + The `group` field is used to categorize features into groups. For example, the Async Clipboard API feature is in the `Clipboard` group. Groups are maintained in the [`groups`](https://github.com/web-platform-dx/web-features/tree/main/groups) directory, and each group is a YAML file. + + * If one of the existing groups fits your feature, add the `group` field to your feature, and set it to the name of the group. + * If none of the existing groups fit your feature, but you believe a new group should be greated, then create a new group file in the `groups` directory, and add the feature to that group. + +1. Set the baseline status and browser compatibility data of the feature. This is the most important and difficult step of authoring a feature, which is documented in a separate section. See [Set the status of a feature](#set-the-status-of-a-feature). + +### Create a new feature from a draft feature + +To start from an existing draft feature: + +1. Go through the steps in [Fork the repository and set up your local environment](#fork-the-repository-and-set-up-your-local-environment). + +1. Review the existing draft features by looking at the YAML files in the [`features/draft`](https://github.com/web-platform-dx/web-features/tree/main/features/draft) directory and sub-directories. + +1. Find a draft that you want to work on. + +1. Move the file to the `features` directory. + +1. Remove the `draft_date` field from the file. + +1. Review the feature ID, name, description, and spec fields. + +1. Either review, correct, or set the baseline status and browser compatibility data of the feature. This is the most important and difficult step of authoring a feature, which is documented in a separate section. See [Set the status of a feature](#set-the-status-of-a-feature). + +### Set the status of a feature + +TODO, what to explain here: +* npm run traverse | grep on BCD, or looking at MDN. +* listing all BCD keys vs. checking if the tag already exists in BCD. +* generating the dist file once, and checking if the overall status matches caniuse/mdn +* if discrepancies with caniuse/mdn, check which section(s) in the dist file make the difference. Doe these sections make sense? + * do they need to be split into other features (later additions that are seen by developers are completely separate from the initial feature)? + * do the sections make sense in this feature, but need to be "silenced" for some reason (e.g. they were added later, but are not important to be split into another feature). In which case, use compute_from +* Generate dist file again and check again. +* Anything else? diff --git a/docs/README.md b/docs/README.md index 3ecbeb5b0ec..53f1d9b3029 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,208 +1,5 @@ -# Project documentation +# web-features project documentation -## Feature guidelines - -### Names - -Feature authors should (in descending order of priority): - -- Prefer names known to be in widespread use by web developers. - Favor describing things as they are most-widely known, even if it's not the most technically correct option. - - - 👍 Recommended: JavaScript - - 👎 Not recommended: ECMAScript - - 👍 Recommended: Declarative shadow DOM - - 👎 Not recommended: `shadowrootmode` attribute - -- Avoid prefixes that mark a feature as specific to a technology, such as CSS, HTML, or JavaScript. - Features can and do cross such boundaries. - - - 👍 Recommended: Container queries - - 👎 Not recommended: CSS container queries - - 👍 Recommended: `` - - 👎 Not recommended: HTML `` - -- Avoid frequently-used abbreviations and nouns, such as API and Web. - - - 👍 Recommended: Async clipboard - - 👎 Not recommended: Async clipboard API - - 👍 Recommended: Workers - - 👎 Not recommended: Web workers - -- Prefer common, descriptive noun phrases over abbreviations, metonymy, and syntax. - - - 👍 Recommended: Offscreen canvas - - 👎 Not recommended: `OffscreenCanvas` - - 👍 Recommended: Grid - - 👎 Not recommended: `display: grid` - -- Prefer frequently-used qualifiers in parentheses at the end of the name. - - - 👍 Recommended: Arrays (initial support) - - 👎 Not recommended: Initial support for arrays - -- Prefer shorter names to longer names, as long as they're unique and unambiguous. - - - 👍 Recommended: `:has()` - - 👎 Not recommended: `:has()` pseudo-class - - 👍 Recommended: `` - - 👎 Not recommended: `` element - -### Identifiers - -Feature identifiers must contain only lowercase alphanumeric characters (`a`-`z` and `0-9`) plus the `-` character (hyphen or minus sign) as a word separator. - -The identifier should match the name, with these additional guidelines: - -- Prefer shorter identifiers to longer identifiers, by avoiding common qualifiers and repeated words. - - - 👍 Recommended: `aborting` - - 👎 Not recommended: `abort-controller-and-abort-signal` - - 👍 Recommended: `arrays` - - 👎 Not recommended: `arrays-initial-support` - - 👍 Recommended: `fullscreen` - - 👎 Not recommended: `fullscreen-api` - - 👍 Recommended: `user-pseudos` - - 👎 Not recommended: `user-valid-and-user-invalid` - -### Descriptions - -* Describe, in the active voice, what a feature does or is. - Think about how developers will use it, not abstract technology relationships. - Start with a template like this: - - - `The the .` - - `The the .` - - `The represents .` - - ` is a or `. - -* Description text must stand alone. - It should not refer to text, images, or other content outside the short description. - Try reading the sentence aloud. - Does it still make sense without mentioning the name or ID? - -* Start descriptions with words that are distinct to the feature. - For example, prefer "The `some-prop` CSS property…" and avoid "The CSS property `some-prop`…." - -* Avoid circular descriptions. - For example, prefer "The `filter()` method returns the items…" over "The `filter()` method filters the items…." - -* It's OK to use the second person ("you", "your", and "yours") to refer to the audience when needed. - For example, "The interface allows you to…." - ([#738](https://github.com/web-platform-dx/web-features/pull/742)) - -* Never mention support or standards status. - This information *will* go out of date and sooner than you think. - -* For every rule, there's a counterexample. - Use your best judgement before writing something absurd. - -* See the [word and phrase list](#word-and-phrase-list) for specific guidelines. - -#### Word and phrase list - -##### allows - -OK in usage such as "allows you to…." -Avoid where there is no named actor, as in "the feature allows magic to happen." -([#738](https://github.com/web-platform-dx/web-features/pull/738#discussion_r1537760761)) - -You can often omit it with gerunds. -For example, prefer "The widget sends…" over "The widget allows sending…." - -##### also known as - -Use this phrase to call attention to other names this feature has gone by. -Use it at the start of a sentence at the end of the description. -For example: - - > The `some-property` CSS property sets the … value. Also known as ``. -([#628](https://github.com/web-platform-dx/web-features/pull/628/files/a9898862cb631c83ea16f1233b3c5c4353bf7a52#r1516293423)) - -##### declaration - -For CSS, use _declaration_ to refer to property-value pairs. -For example, prefer "The `some-property: none` CSS declaration…" over The `some-property: none` CSS property value…." -([#969](https://github.com/web-platform-dx/web-features/pull/969)) - -##### defines - -Avoid. -See [sets](#sets). -([#727](https://github.com/web-platform-dx/web-features/pull/727#discussion_r1537635491)) - -##### determines - -Avoid. -See [sets](#sets). -([#727](https://github.com/web-platform-dx/web-features/pull/727#discussion_r1537635491)) - -##### device - -Use "device" to refer to the underlying operating system or hardware environment, or combination thereof. -This is to avoid cumbersome phrases like "the operating system or hardware" or specifically enumerating Linux, macOS, and Windows. -For example, write "the device UI" not the "operating system UI." -([#810](https://github.com/web-platform-dx/web-features/pull/810)) - -##### elements - -Avoid "element" in reference to things that are not HTML elements. -For example, an array of objects has "items", not "elements." -([#750](https://github.com/web-platform-dx/web-features/pull/750#discussion_r1543011420)) - -##### enables - -Avoid, except in the sense of to turn on or activate. -See [allows](#allows). -([#750](https://github.com/web-platform-dx/web-features/pull/750#discussion_r1547382081)) - -##### for example - -Don't use it as a coordinating conjunction; start a new sentence instead. -For example, this is an example. -([#738](https://github.com/web-platform-dx/web-features/pull/738#discussion_r1537762579), [#742](https://github.com/web-platform-dx/web-features/pull/742)) - -##### is used to - -Omit "is used" where there's no loss in meaning. -For example, prefer "The feature reads…" over "The feature is used to read…" -([#727](https://github.com/web-platform-dx/web-features/pull/727#discussion_r1537635981)) - -##### platform - -"platform" is often vague. -Avoid using it by itself. -Instead, prefer more complete phrases that make it clear which platform you're referring to, such as "the web platform." - -##### provides - -Avoid, especially with gerunds. -For example, prefer the "The feature writes to…" over "The feature provides writing to…." -([#727](https://github.com/web-platform-dx/web-features/pull/727#discussion_r1537635491)) - -##### sets - -Prefer this over multisyllabic alternatives, such as "defines", "determines", or "specifies". -Use "The property sets…" but never "The property defines…." -([#727](https://github.com/web-platform-dx/web-features/pull/727#discussion_r1537635491)) - -##### specifies - -Avoid. -See [sets](#sets). -([#727](https://github.com/web-platform-dx/web-features/pull/727#discussion_r1537635491)) - -##### usage - -Never use "usage" in the sense of "using." -For example, instead of "The `input()` method enables the usage of…" write "The `input()` method uses…." -([#753](https://github.com/web-platform-dx/web-features/pull/753#discussion_r1560914869)) - -It's OK to use "usage" only in the sense of "consumption" (as in "mobile data usage") or "customary practice" (as in "the style guide's usage recommendations"). - -##### `window` - -Because `window` is both the global object and represents the browser window, there are cases where it makes sense to refer to either `window.` or `` (such as `window.fetch()` or `fetch()`). -Use the most customary reference in each case. -If you're not sure what's customary, look to high-profile published examples, such as those on MDN reference pages for the feature. -([#913](https://github.com/web-platform-dx/web-features/pull/913#discussion_r1572601975)) +* To learn to contribute to the web-features project, see [Contributing to the web-features project](./CONTRIBUTING.md). +* For guidelines on writing features, see [Feature guidelines](./guidelines.md). +* For information about what Baseline is and how Baseline status is calculated, see [Baseline](./baseline.md). diff --git a/docs/guidelines.md b/docs/guidelines.md new file mode 100644 index 00000000000..d6c2517ef62 --- /dev/null +++ b/docs/guidelines.md @@ -0,0 +1,208 @@ +# Feature guidelines + +These guidelines are for authors of new features. + +## Identifiers + +Feature identifiers must contain only lowercase alphanumeric characters (`a`-`z` and `0-9`) plus the `-` character (hyphen or minus sign) as a word separator. + +The identifier should match the name, with these additional guidelines: + +- Prefer shorter identifiers to longer identifiers, by avoiding common qualifiers and repeated words. + + - 👍 Recommended: `aborting` + - 👎 Not recommended: `abort-controller-and-abort-signal` + - 👍 Recommended: `arrays` + - 👎 Not recommended: `arrays-initial-support` + - 👍 Recommended: `fullscreen` + - 👎 Not recommended: `fullscreen-api` + - 👍 Recommended: `user-pseudos` + - 👎 Not recommended: `user-valid-and-user-invalid` + +## Names + +Feature authors should (in descending order of priority): + +- Prefer names known to be in widespread use by web developers. + Favor describing things as they are most-widely known, even if it's not the most technically correct option. + + - 👍 Recommended: JavaScript + - 👎 Not recommended: ECMAScript + - 👍 Recommended: Declarative shadow DOM + - 👎 Not recommended: `shadowrootmode` attribute + +- Avoid prefixes that mark a feature as specific to a technology, such as CSS, HTML, or JavaScript. + Features can and do cross such boundaries. + + - 👍 Recommended: Container queries + - 👎 Not recommended: CSS container queries + - 👍 Recommended: `` + - 👎 Not recommended: HTML `` + +- Avoid frequently-used abbreviations and nouns, such as API and Web. + + - 👍 Recommended: Async clipboard + - 👎 Not recommended: Async clipboard API + - 👍 Recommended: Workers + - 👎 Not recommended: Web workers + +- Prefer common, descriptive noun phrases over abbreviations, metonymy, and syntax. + + - 👍 Recommended: Offscreen canvas + - 👎 Not recommended: `OffscreenCanvas` + - 👍 Recommended: Grid + - 👎 Not recommended: `display: grid` + +- Prefer frequently-used qualifiers in parentheses at the end of the name. + + - 👍 Recommended: Arrays (initial support) + - 👎 Not recommended: Initial support for arrays + +- Prefer shorter names to longer names, as long as they're unique and unambiguous. + + - 👍 Recommended: `:has()` + - 👎 Not recommended: `:has()` pseudo-class + - 👍 Recommended: `` + - 👎 Not recommended: `` element + +## Descriptions + +* Describe, in the active voice, what a feature does or is. + Think about how developers will use it, not abstract technology relationships. + Start with a template like this: + + - `The the .` + - `The the .` + - `The represents .` + - ` is a or `. + +* Description text must stand alone. + It should not refer to text, images, or other content outside the short description. + Try reading the sentence aloud. + Does it still make sense without mentioning the name or ID? + +* Start descriptions with words that are distinct to the feature. + For example, prefer "The `some-prop` CSS property…" and avoid "The CSS property `some-prop`…." + +* Avoid circular descriptions. + For example, prefer "The `filter()` method returns the items…" over "The `filter()` method filters the items…." + +* It's OK to use the second person ("you", "your", and "yours") to refer to the audience when needed. + For example, "The interface allows you to…." + ([#738](https://github.com/web-platform-dx/web-features/pull/742)) + +* Never mention support or standards status. + This information *will* go out of date and sooner than you think. + +* For every rule, there's a counterexample. + Use your best judgement before writing something absurd. + +* See the [word and phrase list](#word-and-phrase-list) for specific guidelines. + +### Word and phrase list + +#### allows + +OK in usage such as "allows you to…." +Avoid where there is no named actor, as in "the feature allows magic to happen." +([#738](https://github.com/web-platform-dx/web-features/pull/738#discussion_r1537760761)) + +You can often omit it with gerunds. +For example, prefer "The widget sends…" over "The widget allows sending…." + +#### also known as + +Use this phrase to call attention to other names this feature has gone by. +Use it at the start of a sentence at the end of the description. +For example: + + > The `some-property` CSS property sets the … value. Also known as ``. +([#628](https://github.com/web-platform-dx/web-features/pull/628/files/a9898862cb631c83ea16f1233b3c5c4353bf7a52#r1516293423)) + +#### declaration + +For CSS, use _declaration_ to refer to property-value pairs. +For example, prefer "The `some-property: none` CSS declaration…" over The `some-property: none` CSS property value…." +([#969](https://github.com/web-platform-dx/web-features/pull/969)) + +#### defines + +Avoid. +See [sets](#sets). +([#727](https://github.com/web-platform-dx/web-features/pull/727#discussion_r1537635491)) + +#### determines + +Avoid. +See [sets](#sets). +([#727](https://github.com/web-platform-dx/web-features/pull/727#discussion_r1537635491)) + +#### device + +Use "device" to refer to the underlying operating system or hardware environment, or combination thereof. +This is to avoid cumbersome phrases like "the operating system or hardware" or specifically enumerating Linux, macOS, and Windows. +For example, write "the device UI" not the "operating system UI." +([#810](https://github.com/web-platform-dx/web-features/pull/810)) + +#### elements + +Avoid "element" in reference to things that are not HTML elements. +For example, an array of objects has "items", not "elements." +([#750](https://github.com/web-platform-dx/web-features/pull/750#discussion_r1543011420)) + +#### enables + +Avoid, except in the sense of to turn on or activate. +See [allows](#allows). +([#750](https://github.com/web-platform-dx/web-features/pull/750#discussion_r1547382081)) + +#### for example + +Don't use it as a coordinating conjunction; start a new sentence instead. +For example, this is an example. +([#738](https://github.com/web-platform-dx/web-features/pull/738#discussion_r1537762579), [#742](https://github.com/web-platform-dx/web-features/pull/742)) + +#### is used to + +Omit "is used" where there's no loss in meaning. +For example, prefer "The feature reads…" over "The feature is used to read…" +([#727](https://github.com/web-platform-dx/web-features/pull/727#discussion_r1537635981)) + +#### platform + +"platform" is often vague. +Avoid using it by itself. +Instead, prefer more complete phrases that make it clear which platform you're referring to, such as "the web platform." + +#### provides + +Avoid, especially with gerunds. +For example, prefer the "The feature writes to…" over "The feature provides writing to…." +([#727](https://github.com/web-platform-dx/web-features/pull/727#discussion_r1537635491)) + +#### sets + +Prefer this over multisyllabic alternatives, such as "defines", "determines", or "specifies". +Use "The property sets…" but never "The property defines…." +([#727](https://github.com/web-platform-dx/web-features/pull/727#discussion_r1537635491)) + +#### specifies + +Avoid. +See [sets](#sets). +([#727](https://github.com/web-platform-dx/web-features/pull/727#discussion_r1537635491)) + +#### usage + +Never use "usage" in the sense of "using." +For example, instead of "The `input()` method enables the usage of…" write "The `input()` method uses…." +([#753](https://github.com/web-platform-dx/web-features/pull/753#discussion_r1560914869)) + +It's OK to use "usage" only in the sense of "consumption" (as in "mobile data usage") or "customary practice" (as in "the style guide's usage recommendations"). + +#### `window` + +Because `window` is both the global object and represents the browser window, there are cases where it makes sense to refer to either `window.` or `` (such as `window.fetch()` or `fetch()`). +Use the most customary reference in each case. +If you're not sure what's customary, look to high-profile published examples, such as those on MDN reference pages for the feature. +([#913](https://github.com/web-platform-dx/web-features/pull/913#discussion_r1572601975)) From 5a515d2217b77b211181570e58f8e5cbcb24ff3b Mon Sep 17 00:00:00 2001 From: Patrick Brosset Date: Thu, 11 Jul 2024 09:25:52 +0200 Subject: [PATCH 2/8] Apply latest changes to ID guidelines --- docs/guidelines.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/guidelines.md b/docs/guidelines.md index d6c2517ef62..0f0a0fffe5b 100644 --- a/docs/guidelines.md +++ b/docs/guidelines.md @@ -4,7 +4,7 @@ These guidelines are for authors of new features. ## Identifiers -Feature identifiers must contain only lowercase alphanumeric characters (`a`-`z` and `0-9`) plus the `-` character (hyphen or minus sign) as a word separator. +Feature identifiers must contain only lowercase alphanumeric characters (a-z and 0-9) plus the `-` character (hyphen or minus sign) as a word separator. The identifier should match the name, with these additional guidelines: From 100a0ac79c9237e0215e48e7a0ae107372a52bb8 Mon Sep 17 00:00:00 2001 From: Patrick Brosset Date: Thu, 11 Jul 2024 10:56:13 +0200 Subject: [PATCH 3/8] Making progress on the docs --- docs/CONTRIBUTING.md | 154 ++++++++++++++++++++++++++++++++++++++----- docs/baseline.md | 2 +- 2 files changed, 140 insertions(+), 16 deletions(-) diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md index 8300a91f84c..8dbc0c6f98b 100644 --- a/docs/CONTRIBUTING.md +++ b/docs/CONTRIBUTING.md @@ -1,6 +1,7 @@ # Contributing to the web-features project -Thanks for your interest in contributing to this project! Before you contribute, consider the following: +Thanks for your interest in contributing to this project! +Before you contribute, consider the following: * Help us create a kind, welcoming, and productive project. @@ -39,13 +40,31 @@ The name of the file also constitutes the unique ID of the feature. In the examp Feature IDs must be unique as they are used in other projects to reference the feature. For example, the [browser-compat-data](https://github.com/mdn/browser-compat-data/) project references feature IDs in their compatibility data. +### Fields in a feature file + +This table lists the fields that can be found in a feature file, and provides a brief description of each field: + +| Field | Description | Type | Mandatory | +|---|---|---|---| +| `name` | The name of the feature. | String | Yes | +| `alias` | An alternative name for the feature. | String, or array of strings | No | +| `description` | A short description of the feature. | String | Yes | +| `spec` | One or more specification URLs for this feature | String, or array of strings | Yes | +| `group` | An optional group, or list of groups that this feature belongs to | String, or array of strings | No | +| `snapshot` | An optional snapshot, or list of snapshots that this feature belongs to | String, or array of strings | No | +| `caniuse` | The feature's ID on the [Can I Use](https://caniuse.com/) website. | String | No | +| `compat_features` | The list of browser-compat-data entries that make up this feature. In many cases, the corresponding browser-compat-data entries already map to the feature ID, and this is therefore not needed. | Array of strings | No | +| `status` | An optional object which describes whether the feature is considered baseline, when it achieved this baseline status, and the version number of supported browsers. In the majority of cases, this is calculated from the `compat_features` list, and therefore not needed. | Object | No | + ### Feature dist files -The YAML files that are used to author features are also used to generate _dist_ files. Dist files are also YAML files, but they end with the `.yml.dist` extension. +The YAML files that are used to author features are also used to generate _dist_ files. The term _dist_ is short for distribution. + +Dist files are also YAML files, but they end with the `.yml.dist` extension. Dist files are part of the data that we publish. For example, the `fetch` feature file is `features/fetch.yml`, and its dist file is `features/fetch.yml.dist`. -You **never edit a dist file** directly. Dist files are generated from the authored YAML files, and are used at build time to generate the final data bundle that's used by other projects. +You **never edit a dist file** directly. Dist files are generated from the authored YAML files, and are used at build time to generate the final data bundle that's used by other projects. Dist files are generated by using the `npm run dist` command, which you use when creating or updating a feature. To learn more, see [Set the status of a feature](#set-the-status-of-a-feature), below. It's important to note that, even if dist files are generated artifacts, they are still checked-in to the repository. This is normal and expected. Because dist files contain the compatibility data and status information for a feature, we review them as part of the pull request process. @@ -62,7 +81,7 @@ A third case is if you've found a feature that's incorrectly defined. For exampl In any case, before starting to work on a feature, make sure it isn't already being worked on by checking the list of [pull requests with the **feature definition** label](https://github.com/web-platform-dx/web-features/pulls?q=is%3Aopen+is%3Apr+label%3A%22feature+definition%22). -## Contributing to the repository +## Contributing features to the repository Use the sections below to help you get started with the different ways to contribute to the web-features repository. @@ -79,14 +98,19 @@ To learn more about the fork and pull request process, see [Fork a repository](h When you have the repository cloned locally, set up your local environment: 1. [Install Node.js](https://nodejs.org). -1. At a command line prompt, navigate to the root of the repository. + +1. At a command line prompt, navigate to the root of the repository: `cd path/to/web-features` -1. Install the project dependencies. +1. Install the project dependencies: `npm install` +1. Create a new Git branch to track your work: + + `git checkout -b ` + ### Create a new feature from scratch To create a new feature from scratch: @@ -136,12 +160,112 @@ To start from an existing draft feature: ### Set the status of a feature -TODO, what to explain here: -* npm run traverse | grep on BCD, or looking at MDN. -* listing all BCD keys vs. checking if the tag already exists in BCD. -* generating the dist file once, and checking if the overall status matches caniuse/mdn -* if discrepancies with caniuse/mdn, check which section(s) in the dist file make the difference. Doe these sections make sense? - * do they need to be split into other features (later additions that are seen by developers are completely separate from the initial feature)? - * do the sections make sense in this feature, but need to be "silenced" for some reason (e.g. they were added later, but are not important to be split into another feature). In which case, use compute_from -* Generate dist file again and check again. -* Anything else? +After you've prepared your new feature file with its unique ID, `name`, `description`, and `spec` fields, you must provide the necessary information for this feature's status to be calculated. + +A feature's status consists of: + +* Whether the feature is considered baseline or not, and which level of baseline it has achieved: + + * Baseline _low_ means that the feature is now available on all browsers listed in the core browser set. + * Baseline _high_ means that the feature has been available on all browsers listed in the core browser set for long enough that it's considered _widely_ available. + + For more information about baseline, see [Baseline](./baseline.md). + +* If the feature is considered baseline, the dates at which it has achieved the low and high levels. + +* The browser support data for this feature, which consists of the version number for each of the browsers that support the feature. + +#### Understand where browser support data comes from + +The browser support data for your feature is what determines its baseline status. For example, if your feature is supported on Chrome 66, Chrome Android 66, Edge 79, Firefox 76, Firefox Android 79, Safari 12.1, and Safari iOS 12.2, then it's baseline high, because those versions have been released long enough ago. + +The browser support data that we use comes from the [browser-compat-data project](https://github.com/mdn/browser-compat-data/) (BCD), which you need to understand before continuing to set the status of your feature. + +BCD contains browser support data for individual constituent of web features, such as CSS properties, JavaScript statements, HTML elements and attributes, DOM interfaces, methods, and events. +For example, BCD contains the list of browsers, and their versions, that support the [`grid-template-rows` CSS property](https://github.com/mdn/browser-compat-data/blob/main/css/properties/grid-template-rows.json), which is a constituent of the [grid](https://github.com/web-platform-dx/web-features/blob/main/features/grid.yml) feature. + +We refer to each entry that contains browser support data in BCD as a _BCD key_. In the `grid-template-rows` example, the BCD key is `css.properties.grid-template-rows`. + +Features in the web-features project are associated to one or more BCD keys. For example, the grid feature is associated to multiple BCD keys, which together, describe the overall grid feature: `css.properties.display.grid`, `css.properties.display.inline-grid`, `css.properties.grid`, `css.properties.grid-area`, and more. + +#### Associate BCD keys with your feature + +To set the status of your new feature, you must associate your feature with one or more BCD keys. There are two cases for associating your feature to BCD keys: + +* Either BCD already defines references to your new feature. In this case, you don't need to explicitly list the BCD keys that your feature depends on. + + For example, the [grid](https://github.com/web-platform-dx/web-features/blob/main/features/grid.yml) feature doesn't list any BCD keys, because the BCD project already maps the right BCD keys to the `grid` web-features ID. See the [`web-features:grid` search results](https://github.com/search?q=repo%3Amdn%2Fbrowser-compat-data%20%22web-features%3Agrid%22&type=code) in BCD. + + Here is the grid feature YAML file content, showing that no BCD keys appear in the file: + + ```yaml + name: Grid + description: CSS Grid is a two-dimensional layout system, which lays content out in rows and columns. + spec: https://drafts.csswg.org/css-grid-3/ + group: grid + caniuse: css-grid + ``` + + You should always check first if BCD doesn't already map to your feature ID by searching for `web-features:` in the BCD source code. + +* Or BCD doesn't already reference your new feature. In this case, you need to list the BCD keys that make up your feature under the `compat_features` field of your new feature file. + + For example, here are the first few lines of the @counter-style feature, which defines a list of BCD keys: + + ```yaml + name: "@counter-style" + description: The `@counter-style` CSS at-rule defines custom counter styles for list items. For example, you can use a sequence of specific symbols instead of numbers for an ordered list. + spec: https://drafts.csswg.org/css-counter-styles-3/ + caniuse: css-at-counter-style + compat_features: + - css.at-rules.counter-style + - css.at-rules.counter-style.additive-symbols + - css.at-rules.counter-style.fallback + - css.at-rules.counter-style.negative + ``` + + To identify the BCD keys that you need, check the browser compatibility tables displayed at the end of the MDN pages that document your new feature, and then search the BCD source code for the names that appear in the table. + + You can also use the `npm run traverse | grep ` command in BCD to list all BCD keys that match a certain keyword. + +#### Generate and check the dist file + +To generate your feature's dist file, once your feature is associated with one or more BCD keys: + +1. Run the command `npm run dist`. + +1. Check that a new file, named after your feature ID, and with the `.yml.dist` file extension exists, and open the file. + +1. Check that the data in the dist file is correct. In particular, verify that the data is consistent with what developers would find when searching for the same feature on caniuse.com or MDN. + + * Check the `baseline` status. If the feature isn't yet supported in all browsers of the core browsers set, it should be `false`. If the feature is supported on all browsers, it should either be `low` or `high`, depending on how long has passed. + * Check the `baseline_low_date` and `baseline_high_date` fields. + * Check that the browser versions listed under `support` match what caniuse.com and MDN document too. + +#### Fix data discrepancies in your feature's dist file + +The most likely reason for the data in your new feature's dist file to be incorrect is that your feature is associated to too many BCD keys. + +BCD keys describe all constituents of a feature, whether they are vital to the feature, or later additions to it. For example, developers have been able to use the Web Audio API for many years even if the AudioWorklet or OfflineAudioContext APIs were added later, and only recently became baseline. + +It's important to ensure that the BCD keys that your feature is associated with matches how most developers use the feature. + +To fix data discrepancies in your dist file, open the dist file and, under `compat_features`, review each individual section. + +Each section corresponds to a group of BCD keys that have the same baseline and support status. + +_TODO: continue documenting this section (consider splitting BCD keys into different features (later addition), or using just silencing some BCD keys by using `compat_from`)._ + +### Create a GitHub Pull Request to review and merge your changes + +To get your changes reviewed and, eventually, merged: + +1. Commit all of your local changes: + + `git commit -a -m "Description of your changes"` + +1. Push your new branch to your forked repository: + + `git push origin ` + +1. At https://github.com/web-platform-dx/web-features/pulls, open a new Pull Request. diff --git a/docs/baseline.md b/docs/baseline.md index 60a716e881b..d6f8e5777af 100644 --- a/docs/baseline.md +++ b/docs/baseline.md @@ -1,4 +1,4 @@ -## Baseline +# Baseline This document describes what Baseline intends to do and specifies how features are to receive a Baseline status. From e84c6c363410a9fdbd486ba6148b12478caa23b5 Mon Sep 17 00:00:00 2001 From: Patrick Brosset Date: Fri, 12 Jul 2024 17:21:04 +0200 Subject: [PATCH 4/8] Addressed some review comments --- docs/CONTRIBUTING.md | 48 ++++++++++++++++++++++++-------------------- 1 file changed, 26 insertions(+), 22 deletions(-) diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md index 8dbc0c6f98b..2edefc769c9 100644 --- a/docs/CONTRIBUTING.md +++ b/docs/CONTRIBUTING.md @@ -26,15 +26,17 @@ Also consider joining the [WebDX Community Group](https://www.w3.org/community/w Think of features as individual components of the web platform that web developers can use to achieve specific tasks. -As such, a feature has no specific size. Some features might cover single CSS properties while other features cover entire JavaScript APIs with multiple interfaces, methods, and properties. As long as a web developer would use this to achieve a specific goal, it's a feature. +As such, a feature has no specific size. Some features might cover single CSS properties while other features cover entire JavaScript APIs with multiple interfaces, methods, and properties. As long as a web developer would use this to achieve a specific goal, it's a feature. -For example, the `fetch` API is a feature, the `:has()` CSS pseudo-class function too, and so is the Web Audio API. +For example, the `fetch()` API is a feature, the `:has()` CSS pseudo-class function too, and so is the Web Audio API. + +For the time being, this repository focuses only on features that have at least some level of browser support and that are already documented on MDN. ### Feature file name and format -Features in this repository are authored as **YAML files** that are stored in the [`features`](https://github.com/web-platform-dx/web-features/tree/main/features) directory. Each file corresponds to a single feature, and contains metadata about the feature, such as its name, description, specification, or support data. +Features in this repository are authored as **YAML files** that are stored in the [`features`](../features) directory. Each file corresponds to a single feature, and contains metadata about the feature, such as its name, description, specification, or support data. -For example, the `fetch` API feature is described in the [`features/fetch.yml`](https://github.com/web-platform-dx/web-features/blob/main/features/fetch.yml) file. +For example, the `fetch()` API feature is described in the [`features/fetch.yml`](https://github.com/web-platform-dx/web-features/blob/main/features/fetch.yml) file. The name of the file also constitutes the unique ID of the feature. In the example above, the unique ID of the feature is `fetch`. @@ -47,14 +49,14 @@ This table lists the fields that can be found in a feature file, and provides a | Field | Description | Type | Mandatory | |---|---|---|---| | `name` | The name of the feature. | String | Yes | -| `alias` | An alternative name for the feature. | String, or array of strings | No | | `description` | A short description of the feature. | String | Yes | | `spec` | One or more specification URLs for this feature | String, or array of strings | Yes | | `group` | An optional group, or list of groups that this feature belongs to | String, or array of strings | No | | `snapshot` | An optional snapshot, or list of snapshots that this feature belongs to | String, or array of strings | No | | `caniuse` | The feature's ID on the [Can I Use](https://caniuse.com/) website. | String | No | | `compat_features` | The list of browser-compat-data entries that make up this feature. In many cases, the corresponding browser-compat-data entries already map to the feature ID, and this is therefore not needed. | Array of strings | No | -| `status` | An optional object which describes whether the feature is considered baseline, when it achieved this baseline status, and the version number of supported browsers. In the majority of cases, this is calculated from the `compat_features` list, and therefore not needed. | Object | No | +| `status` | An optional object which describes whether the feature is considered baseline, when it achieved this baseline status, and the version number of supported browsers. In the majority of cases, this is calculated from the `compat_features` list or from browser-compat-data entries directly, and therefore not needed. | Object | No | +| `status.compute_from` | An optional field, within the `status` object, to allows you to specify which BCD keys should the overall feature status be computed from. This is useful to list all BCD keys that are related to a feature, but only consider some of them in the baseline status calculation. | String, or array of strings | No | ### Feature dist files @@ -64,9 +66,9 @@ Dist files are also YAML files, but they end with the `.yml.dist` extension. Dis For example, the `fetch` feature file is `features/fetch.yml`, and its dist file is `features/fetch.yml.dist`. -You **never edit a dist file** directly. Dist files are generated from the authored YAML files, and are used at build time to generate the final data bundle that's used by other projects. Dist files are generated by using the `npm run dist` command, which you use when creating or updating a feature. To learn more, see [Set the status of a feature](#set-the-status-of-a-feature), below. +You **never edit a dist file** directly. Dist files are generated from the authored YAML files, and are used at build time to generate the final data bundle that's used by other projects. Dist files are generated by using the `npm run dist` command, which you use when creating or updating a feature. If the dist file contains only an empty object (`{}`) it means that there is no generated data in addition to the source YAML. To learn more, see [Set the status of a feature](#set-the-status-of-a-feature), below. -It's important to note that, even if dist files are generated artifacts, they are still checked-in to the repository. This is normal and expected. Because dist files contain the compatibility data and status information for a feature, we review them as part of the pull request process. +[!Important] Even if dist files are generated artifacts, they are still checked-in to the repository. This is normal and expected. Because dist files contain the compatibility data and status information for a feature, we review them as part of the pull request process. ## Finding features to work on @@ -75,7 +77,7 @@ In some cases, you will already have an idea for a feature to add to the reposit In other cases, you might want to help but don't have a specific feature in mind. That's okay too. You can find inspiration in the following places: * [The list of issues with the **feature definition** label](https://github.com/web-platform-dx/web-features/issues?q=is%3Aopen+is%3Aissue+label%3A%22feature+definition%22). -* [The list of draft features](https://github.com/web-platform-dx/web-features/tree/main/features/draft). +* [The list of draft features](../features/draft). A third case is if you've found a feature that's incorrectly defined. For example if its description is misleading, or you believe the browser support data is incorrect. @@ -133,10 +135,10 @@ To create a new feature from scratch: 1. Optionally add a `group` field to the feature. - The `group` field is used to categorize features into groups. For example, the Async Clipboard API feature is in the `Clipboard` group. Groups are maintained in the [`groups`](https://github.com/web-platform-dx/web-features/tree/main/groups) directory, and each group is a YAML file. + The `group` field is used to categorize features into groups. For example, the Async Clipboard API feature is in the `clipboard` group. Groups are maintained in the [`groups`](../groups) directory, and each group is a YAML file. The name of the file defines the unique ID of a group. - * If one of the existing groups fits your feature, add the `group` field to your feature, and set it to the name of the group. - * If none of the existing groups fit your feature, but you believe a new group should be greated, then create a new group file in the `groups` directory, and add the feature to that group. + * If one of the existing groups fits your feature, add the `group` field to your feature, and set it to the ID of the group. + * If none of the existing groups fit your feature, but you believe a new group should be greated, then create a new group file in the `groups` directory, then add the `group` field to your feature set to the ID of the new group. 1. Set the baseline status and browser compatibility data of the feature. This is the most important and difficult step of authoring a feature, which is documented in a separate section. See [Set the status of a feature](#set-the-status-of-a-feature). @@ -146,15 +148,17 @@ To start from an existing draft feature: 1. Go through the steps in [Fork the repository and set up your local environment](#fork-the-repository-and-set-up-your-local-environment). -1. Review the existing draft features by looking at the YAML files in the [`features/draft`](https://github.com/web-platform-dx/web-features/tree/main/features/draft) directory and sub-directories. +1. Review the existing draft features by looking at the YAML files in the [`features/draft`](../features/draft) directory and sub-directories. 1. Find a draft that you want to work on. -1. Move the file to the `features` directory. +1. Move the `.yml` and `.yml.dist` files to the `features` directory. + +1. Remove the `draft_date` field from the `.yml` file. -1. Remove the `draft_date` field from the file. +1. Review the feature ID, name, and spec fields for correctness. -1. Review the feature ID, name, description, and spec fields. +1. Write a new description for the feature, making sure it follows the [Descriptions](./guidelines.md#descriptions) guidelines, and is consistent with other feature descriptions in the repository. 1. Either review, correct, or set the baseline status and browser compatibility data of the feature. This is the most important and difficult step of authoring a feature, which is documented in a separate section. See [Set the status of a feature](#set-the-status-of-a-feature). @@ -169,7 +173,7 @@ A feature's status consists of: * Baseline _low_ means that the feature is now available on all browsers listed in the core browser set. * Baseline _high_ means that the feature has been available on all browsers listed in the core browser set for long enough that it's considered _widely_ available. - For more information about baseline, see [Baseline](./baseline.md). + For more information about baseline and the actual definition of _long enough_, see [Baseline](./baseline.md). * If the feature is considered baseline, the dates at which it has achieved the low and high levels. @@ -186,7 +190,7 @@ For example, BCD contains the list of browsers, and their versions, that support We refer to each entry that contains browser support data in BCD as a _BCD key_. In the `grid-template-rows` example, the BCD key is `css.properties.grid-template-rows`. -Features in the web-features project are associated to one or more BCD keys. For example, the grid feature is associated to multiple BCD keys, which together, describe the overall grid feature: `css.properties.display.grid`, `css.properties.display.inline-grid`, `css.properties.grid`, `css.properties.grid-area`, and more. +Features in the web-features project are associated with one or more BCD keys. For example, the grid feature is associated with multiple BCD keys, which together, describe the overall grid feature: `css.properties.display.grid`, `css.properties.display.inline-grid`, `css.properties.grid`, `css.properties.grid-area`, and more. #### Associate BCD keys with your feature @@ -206,11 +210,11 @@ To set the status of your new feature, you must associate your feature with one caniuse: css-grid ``` - You should always check first if BCD doesn't already map to your feature ID by searching for `web-features:` in the BCD source code. + You should always check first if BCD doesn't already map to your feature ID by running `npm run dist` and checking if the resulting dist file contains supported browser versions. * Or BCD doesn't already reference your new feature. In this case, you need to list the BCD keys that make up your feature under the `compat_features` field of your new feature file. - For example, here are the first few lines of the @counter-style feature, which defines a list of BCD keys: + For example, here are the first few lines of the `@counter-style` feature, which defines a list of BCD keys: ```yaml name: "@counter-style" @@ -226,7 +230,7 @@ To set the status of your new feature, you must associate your feature with one To identify the BCD keys that you need, check the browser compatibility tables displayed at the end of the MDN pages that document your new feature, and then search the BCD source code for the names that appear in the table. - You can also use the `npm run traverse | grep ` command in BCD to list all BCD keys that match a certain keyword. + You can also use the `npm run traverse | grep -i ` command in BCD to list all BCD keys that match a certain keyword. #### Generate and check the dist file @@ -239,7 +243,7 @@ To generate your feature's dist file, once your feature is associated with one o 1. Check that the data in the dist file is correct. In particular, verify that the data is consistent with what developers would find when searching for the same feature on caniuse.com or MDN. * Check the `baseline` status. If the feature isn't yet supported in all browsers of the core browsers set, it should be `false`. If the feature is supported on all browsers, it should either be `low` or `high`, depending on how long has passed. - * Check the `baseline_low_date` and `baseline_high_date` fields. + * Check the `baseline_low_date`. Does it seem like the feature should be older? Newer? Or just right? * Check that the browser versions listed under `support` match what caniuse.com and MDN document too. #### Fix data discrepancies in your feature's dist file From 2c1aedfa24a9284ce961a1e2ab5bb1247492c725 Mon Sep 17 00:00:00 2001 From: Patrick Brosset Date: Fri, 12 Jul 2024 17:26:52 +0200 Subject: [PATCH 5/8] Fix highlights --- docs/CONTRIBUTING.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md index 2edefc769c9..3b9175236f7 100644 --- a/docs/CONTRIBUTING.md +++ b/docs/CONTRIBUTING.md @@ -68,7 +68,8 @@ For example, the `fetch` feature file is `features/fetch.yml`, and its dist file You **never edit a dist file** directly. Dist files are generated from the authored YAML files, and are used at build time to generate the final data bundle that's used by other projects. Dist files are generated by using the `npm run dist` command, which you use when creating or updating a feature. If the dist file contains only an empty object (`{}`) it means that there is no generated data in addition to the source YAML. To learn more, see [Set the status of a feature](#set-the-status-of-a-feature), below. -[!Important] Even if dist files are generated artifacts, they are still checked-in to the repository. This is normal and expected. Because dist files contain the compatibility data and status information for a feature, we review them as part of the pull request process. +> [!Important] +> Even if dist files are generated artifacts, they are still checked-in to the repository. This is normal and expected. Because dist files contain the compatibility data and status information for a feature, we review them as part of the pull request process. ## Finding features to work on @@ -252,7 +253,8 @@ The most likely reason for the data in your new feature's dist file to be incorr BCD keys describe all constituents of a feature, whether they are vital to the feature, or later additions to it. For example, developers have been able to use the Web Audio API for many years even if the AudioWorklet or OfflineAudioContext APIs were added later, and only recently became baseline. -It's important to ensure that the BCD keys that your feature is associated with matches how most developers use the feature. +> [!IMPORTANT] +> Ensure that the BCD keys that your feature is associated with matches how most developers use the feature. To fix data discrepancies in your dist file, open the dist file and, under `compat_features`, review each individual section. From 6a61665c12a014f59d7af7ee5b427995f04094e3 Mon Sep 17 00:00:00 2001 From: Patrick Brosset Date: Tue, 16 Jul 2024 13:35:25 +0200 Subject: [PATCH 6/8] Finalized docs --- docs/CONTRIBUTING.md | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md index 3b9175236f7..ba3dc3b91d9 100644 --- a/docs/CONTRIBUTING.md +++ b/docs/CONTRIBUTING.md @@ -139,7 +139,7 @@ To create a new feature from scratch: The `group` field is used to categorize features into groups. For example, the Async Clipboard API feature is in the `clipboard` group. Groups are maintained in the [`groups`](../groups) directory, and each group is a YAML file. The name of the file defines the unique ID of a group. * If one of the existing groups fits your feature, add the `group` field to your feature, and set it to the ID of the group. - * If none of the existing groups fit your feature, but you believe a new group should be greated, then create a new group file in the `groups` directory, then add the `group` field to your feature set to the ID of the new group. + * If none of the existing groups fit your feature, but you believe a new group should be created, then create a new group file in the `groups` directory, then add the `group` field to your feature set to the ID of the new group. 1. Set the baseline status and browser compatibility data of the feature. This is the most important and difficult step of authoring a feature, which is documented in a separate section. See [Set the status of a feature](#set-the-status-of-a-feature). @@ -249,18 +249,19 @@ To generate your feature's dist file, once your feature is associated with one o #### Fix data discrepancies in your feature's dist file -The most likely reason for the data in your new feature's dist file to be incorrect is that your feature is associated to too many BCD keys. +The most likely reason for the data in your new feature's dist file to be incorrect is that your feature is associated with too many BCD keys, or with the wrong BCD keys. BCD keys describe all constituents of a feature, whether they are vital to the feature, or later additions to it. For example, developers have been able to use the Web Audio API for many years even if the AudioWorklet or OfflineAudioContext APIs were added later, and only recently became baseline. -BCD keys describe all constituents of a feature, whether they are vital to the feature, or later additions to it. For example, developers have been able to use the Web Audio API for many years even if the AudioWorklet or OfflineAudioContext APIs were added later, and only recently became baseline. +You might be faced with the following scenarios: -> [!IMPORTANT] -> Ensure that the BCD keys that your feature is associated with matches how most developers use the feature. +* Your feature's overall status is too old (e.g., it's a new feature, but it's being reported as long-established). In this case, you might have missing BCD keys. Check that you've covering the complete feature by looking for missing interfaces, CSS property values, and so on. +* Your feature's overall status is too young (e.g., it's a long-established feature, but it's being reported as newly available). In this case, you might have BCD keys that correspond to later additions which are holding the feature back unfairly.\ +* Your feature's overall status and individual BCD keys are yielding incorrect results. In this case, the underlying BCD data might have caveats or errors. Check the data in the [browser-compat-data](https://github.com/mdn/browser-compat-data/) repository for any caveats such as features behind prefixes or flags, or partial implementations. -To fix data discrepancies in your dist file, open the dist file and, under `compat_features`, review each individual section. +To fix data discrepancies in your dist file, open the dist file and, under `compat_features`, review each individual section. Each section corresponds to a group of BCD keys that have the same baseline and support status. -Each section corresponds to a group of BCD keys that have the same baseline and support status. +Look for the feature's entrypoint in the dist file. The entrypoint of a feature is the property, interface, method, or other constituent part of the feature which web developers use first. For example, the Web Audio API feature has the `AudioContext` interface as its entrypoint. Before doing anything else, developers will first instantiate an `AudioContext` object by doing `const audioContext = new AudioContext()`. -_TODO: continue documenting this section (consider splitting BCD keys into different features (later addition), or using just silencing some BCD keys by using `compat_from`)._ +If your feature's entrypoint doesn't have the same status as the overall feature, use the `compute_from` field in your feature file to flag the BCD key (or keys) that represent the minimum viable set of constituent parts of a feature that make it usable. ### Create a GitHub Pull Request to review and merge your changes From e894ab37acfc1577d1fc0e521b4e780dacaeff0c Mon Sep 17 00:00:00 2001 From: Patrick Brosset Date: Tue, 13 Aug 2024 11:49:06 +0200 Subject: [PATCH 7/8] Resolve conflicts --- .github/labeler.yml | 5 + .github/workflows/publish_web-features.yml | 56 + .github/workflows/pull_request.yml | 2 +- .github/workflows/refresh_dist.yml | 66 - .../workflows/remove_refresh_dist_label.yml | 37 - .../update_draft_features_weekly.yml | 35 + .gitignore | 4 +- .nvmrc | 1 + .prettierignore | 5 + GOVERNANCE.md | 3 + docs/guidelines.md | 47 +- docs/publishing.md | 43 + features/{draft/html-elements => }/a.yml | 11 +- features/{draft/html-elements => }/a.yml.dist | 61 +- features/abbr.yml | 2 +- features/accelerometer.yml | 5 +- features/accelerometer.yml.dist | 7 + .../{draft/html-elements => }/address.yml | 5 +- .../html-elements => }/address.yml.dist | 0 features/anchor-positioning.yml.dist | 4 +- features/article.yml | 8 + .../html-elements => }/article.yml.dist | 0 features/aside.yml | 4 +- features/async-clipboard.yml | 7 +- features/async-clipboard.yml.dist | 13 + features/audio.yml | 4 +- features/audio.yml.dist | 8 +- features/{draft/html-elements => }/b.yml | 5 +- features/{draft/html-elements => }/b.yml.dist | 0 features/background-fetch.yml.dist | 1 + features/{draft/spec => }/background-sync.yml | 5 +- .../{draft/spec => }/background-sync.yml.dist | 0 features/base.yml | 2 +- features/bdi.yml | 6 + .../{draft/html-elements => }/bdi.yml.dist | 0 features/bdo.yml | 6 + .../{draft/html-elements => }/bdo.yml.dist | 6 +- .../{draft/html-elements => }/blockquote.yml | 5 +- .../html-elements => }/blockquote.yml.dist | 4 +- features/{draft/html-elements => }/body.yml | 5 +- .../{draft/html-elements => }/body.yml.dist | 0 features/br.yml | 2 +- features/br.yml.dist | 14 +- features/{draft/html-elements => }/button.yml | 9 +- .../{draft/html-elements => }/button.yml.dist | 35 +- features/{draft/html-elements => }/canvas.yml | 11 +- .../{draft/html-elements => }/canvas.yml.dist | 20 +- features/cite.yml | 6 + .../{draft/html-elements => }/cite.yml.dist | 4 +- features/clipboard-supports.yml.dist | 1 + features/code.yml | 2 +- features/code.yml.dist | 4 +- features/color-scheme.yml.dist | 22 +- features/constructed-stylesheets.yml | 7 +- features/constructed-stylesheets.yml.dist | 19 + features/contain-inline-size.yml | 6 + features/contain-inline-size.yml.dist | 16 + features/contain-intrinsic-size.yml | 1 + features/contain-layout.yml | 6 + features/contain-layout.yml.dist | 16 + features/contain-paint.yml | 6 + features/contain-paint.yml.dist | 16 + features/contain-size.yml | 7 + features/contain-size.yml.dist | 17 + features/contain-style.yml | 6 + features/contain-style.yml.dist | 16 + features/counter-style.yml | 12 +- features/counter-style.yml.dist | 28 + features/{draft/html-elements => }/data.yml | 5 +- features/data.yml.dist | 20 + features/declarative-shadow-dom.yml | 4 +- features/del.yml | 11 + .../{draft/html-elements => }/del.yml.dist | 11 +- features/details-name.yml | 2 +- features/details.yml | 2 +- features/{draft/html-elements => }/dfn.yml | 5 +- .../{draft/html-elements => }/dfn.yml.dist | 0 features/dialog.yml | 2 +- features/{draft/html-elements => }/div.yml | 7 +- features/div.yml.dist | 42 + features/draft/download.yml | 14 + features/draft/download.yml.dist | 75 + .../draft/file-and-directory-entries.yml.dist | 12 +- features/draft/html-elements/article.yml | 7 - features/draft/html-elements/bdi.yml | 7 - features/draft/html-elements/bdo.yml | 7 - features/draft/html-elements/cite.yml | 7 - features/draft/html-elements/data.yml.dist | 44 - features/draft/html-elements/dd.yml.dist | 8 +- features/draft/html-elements/del.yml | 17 - features/draft/html-elements/figure.yml | 10 - features/draft/html-elements/footer.yml | 10 - features/draft/html-elements/form.yml.dist | 4 +- features/draft/html-elements/h1.yml | 19 - features/draft/html-elements/head.yml | 8 - features/draft/html-elements/iframe.yml | 39 - features/draft/html-elements/iframe.yml.dist | 202 -- features/draft/html-elements/kbd.yml | 7 - features/draft/html-elements/label.yml.dist | 4 +- features/draft/html-elements/main.yml | 7 - features/draft/html-elements/mark.yml | 7 - features/draft/html-elements/meter.yml.dist | 26 +- features/draft/html-elements/nav.yml | 7 - features/draft/html-elements/pre.yml | 8 - features/draft/html-elements/ruby.yml.dist | 43 - features/draft/html-elements/s.yml.dist | 4 +- features/draft/html-elements/samp.yml | 7 - features/draft/html-elements/section.yml | 7 - features/draft/html-elements/small.yml | 7 - features/draft/html-elements/title.yml | 9 - features/draft/html-elements/track.yml | 23 - features/draft/html-elements/track.yml.dist | 67 - features/draft/html-elements/var.yml | 7 - features/draft/html-elements/wbr.yml | 8 - features/draft/iframe-sandbox.yml | 31 + features/draft/iframe-sandbox.yml.dist | 106 + features/draft/indexeddb.yml | 2 +- features/draft/indexeddb.yml.dist | 41 +- features/draft/ping.yml | 14 + features/draft/ping.yml.dist | 37 + features/draft/spec/README.md | 1 + features/draft/spec/accelerometer.yml | 17 - features/draft/spec/accelerometer.yml.dist | 12 - features/draft/spec/ambient-light.yml | 2 +- features/draft/spec/anchors.yml | 2 +- .../draft/spec/angle-instanced-arrays.yml | 2 +- features/draft/spec/anonymous-iframe.yml | 8 - .../draft/spec/attribution-reporting-api.yml | 2 +- features/draft/spec/audio-output.yml | 2 +- features/draft/spec/autoplay-detection.yml | 2 +- features/draft/spec/background-fetch.yml | 39 - features/draft/spec/background-fetch.yml.dist | 11 - features/draft/spec/badging.yml | 2 +- features/draft/spec/battery-status.yml | 3 +- features/draft/spec/battery-status.yml.dist | 11 +- features/draft/spec/beacon.yml | 2 +- .../draft/spec/capture-handle-identity.yml | 2 +- features/draft/spec/clear-site-data.yml | 2 +- features/draft/spec/clear-site-data.yml.dist | 6 +- .../draft/spec/client-hint-reliability.yml | 2 +- features/draft/spec/clipboard-apis.yml | 10 +- features/draft/spec/clipboard-apis.yml.dist | 38 +- features/draft/spec/compat.yml | 2 +- features/draft/spec/compositing-1.yml | 2 +- features/draft/spec/compositing-1.yml.dist | 8 +- features/draft/spec/console.yml | 2 +- features/draft/spec/content-index.yml | 2 +- features/draft/spec/cookie-store.yml | 2 +- .../draft/spec/credential-management-1.yml | 2 +- .../draft/spec/csp-embedded-enforcement.yml | 2 +- features/draft/spec/csp3.yml | 57 + features/draft/spec/csp3.yml.dist | 240 ++ features/draft/spec/css-align-3.yml | 2 +- features/draft/spec/css-animations-2.yml | 2 +- features/draft/spec/css-backgrounds-3.yml | 2 +- .../draft/spec/css-backgrounds-3.yml.dist | 24 +- features/draft/spec/css-box-4.yml | 2 +- features/draft/spec/css-break-4.yml | 2 +- features/draft/spec/css-cascade-6.yml | 8 +- features/draft/spec/css-cascade-6.yml.dist | 27 +- features/draft/spec/css-color-5.yml | 2 +- features/draft/spec/css-color-adjust-1.yml | 2 +- features/draft/spec/css-conditional-5.yml | 9 +- .../draft/spec/css-conditional-5.yml.dist | 14 - features/draft/spec/css-contain-3.yml | 19 +- features/draft/spec/css-contain-3.yml.dist | 28 - features/draft/spec/css-content-3.yml | 2 +- features/draft/spec/css-counter-styles-3.yml | 10 +- .../draft/spec/css-counter-styles-3.yml.dist | 30 +- features/draft/spec/css-display-3.yml | 5 +- features/draft/spec/css-display-3.yml.dist | 3 +- features/draft/spec/css-easing-1.yml | 2 +- features/draft/spec/css-env-1.yml | 2 +- features/draft/spec/css-flexbox-1.yml | 2 +- features/draft/spec/css-flexbox-1.yml.dist | 2 +- features/draft/spec/css-font-loading-3.yml | 4 +- .../draft/spec/css-font-loading-3.yml.dist | 11 +- features/draft/spec/css-fonts-5.yml | 4 +- features/draft/spec/css-fonts-5.yml.dist | 34 +- features/draft/spec/css-grid-2.yml | 2 +- features/draft/spec/css-grid-2.yml.dist | 16 +- features/draft/spec/css-images-4.yml | 2 +- features/draft/spec/css-inline-3.yml | 2 +- features/draft/spec/css-inline-3.yml.dist | 26 +- features/draft/spec/css-lists-3.yml | 2 +- features/draft/spec/css-lists-3.yml.dist | 8 +- features/draft/spec/css-logical-1.yml | 2 +- features/draft/spec/css-logical-1.yml.dist | 8 +- features/draft/spec/css-masking-1.yml | 2 +- features/draft/spec/css-masking-1.yml.dist | 29 +- features/draft/spec/css-multicol-1.yml | 2 +- features/draft/spec/css-multicol-1.yml.dist | 2 +- features/draft/spec/css-namespaces-3.yml | 2 +- features/draft/spec/css-overflow-4.yml | 2 +- features/draft/spec/css-overflow-4.yml.dist | 54 +- features/draft/spec/css-overscroll-1.yml | 2 +- features/draft/spec/css-overscroll-1.yml.dist | 4 +- features/draft/spec/css-page-3.yml | 2 +- features/draft/spec/css-page-3.yml.dist | 16 +- features/draft/spec/css-paint-api-1.yml | 2 +- features/draft/spec/css-position-3.yml | 2 +- features/draft/spec/css-position-3.yml.dist | 2 +- features/draft/spec/css-pseudo-4.yml | 2 +- features/draft/spec/css-rhythm-1.yml | 2 +- features/draft/spec/css-ruby-1.yml | 2 +- features/draft/spec/css-scoping-1.yml | 2 +- .../draft/spec/css-scroll-anchoring-1.yml | 2 +- ...croll-snap-1.yml => css-scroll-snap-2.yml} | 6 +- ...-1.yml.dist => css-scroll-snap-2.yml.dist} | 10 +- features/draft/spec/css-scrollbars-1.yml | 2 +- features/draft/spec/css-shadow-parts-1.yml | 2 +- features/draft/spec/css-shapes-1.yml | 2 +- features/draft/spec/css-size-adjust-1.yml | 2 +- features/draft/spec/css-sizing-4.yml | 2 +- features/draft/spec/css-speech-1.yml | 2 +- features/draft/spec/css-speech-1.yml.dist | 2 +- features/draft/spec/css-text-4.yml | 2 +- features/draft/spec/css-text-4.yml.dist | 24 +- features/draft/spec/css-text-decor-4.yml | 2 +- features/draft/spec/css-text-decor-4.yml.dist | 18 +- features/draft/spec/css-transforms-2.yml | 2 +- features/draft/spec/css-transforms-2.yml.dist | 14 +- features/draft/spec/css-transitions-2.yml | 2 +- features/draft/spec/css-typed-om-1.yml | 2 +- features/draft/spec/css-ui-4.yml | 2 +- features/draft/spec/css-ui-4.yml.dist | 31 +- features/draft/spec/css-values-4.yml | 2 +- .../draft/spec/css-view-transitions-2.yml | 2 +- features/draft/spec/css-writing-modes-4.yml | 2 +- .../draft/spec/css-writing-modes-4.yml.dist | 10 +- features/draft/spec/css22.yml | 2 +- features/draft/spec/cssom-1.yml | 28 +- features/draft/spec/cssom-1.yml.dist | 41 +- features/draft/spec/cssom-view-1.yml | 2 +- features/draft/spec/datacue.yml | 2 +- features/draft/spec/deprecation-reporting.yml | 2 +- features/draft/spec/device-memory-1.yml | 2 +- features/draft/spec/device-memory-1.yml.dist | 2 +- features/draft/spec/digital-goods.yml | 2 +- features/draft/spec/dom-parsing.yml | 12 +- features/draft/spec/dom-parsing.yml.dist | 30 +- features/draft/spec/dom.yml | 2 +- features/draft/spec/dom.yml.dist | 42 +- features/draft/spec/ecma-402.yml | 19 +- features/draft/spec/ecma-402.yml.dist | 26 +- features/draft/spec/ecmascript.yml | 2 +- features/draft/spec/element-timing.yml | 2 +- features/draft/spec/encoding.yml | 2 +- ...rypted-media.yml => encrypted-media-2.yml} | 2 +- ...ia.yml.dist => encrypted-media-2.yml.dist} | 2 +- features/draft/spec/entries-api.yml | 2 +- features/draft/spec/entries-api.yml.dist | 12 +- features/draft/spec/event-timing.yml | 2 +- features/draft/spec/ext-blend-minmax.yml | 2 +- .../draft/spec/ext-color-buffer-float.yml | 2 +- .../spec/ext-color-buffer-half-float.yml | 2 +- .../draft/spec/ext-disjoint-timer-query.yml | 2 +- features/draft/spec/ext-float-blend.yml | 2 +- features/draft/spec/ext-frag-depth.yml | 2 +- .../draft/spec/ext-shader-texture-lod.yml | 2 +- features/draft/spec/ext-srgb.yml | 2 +- .../spec/ext-texture-compression-bptc.yml | 2 +- .../spec/ext-texture-compression-rgtc.yml | 2 +- .../spec/ext-texture-filter-anisotropic.yml | 2 +- features/draft/spec/ext-texture-norm16.yml | 2 +- features/draft/spec/fedcm.yml | 2 +- features/draft/spec/fenced-frame.yml | 2 +- features/draft/spec/fetch.yml | 82 + features/draft/spec/fetch.yml.dist | 285 +++ features/draft/spec/file-system-access.yml | 2 +- features/draft/spec/fileapi.yml | 2 +- features/draft/spec/fill-stroke-3.yml | 2 +- features/draft/spec/fill-stroke-3.yml.dist | 40 +- features/draft/spec/filter-effects-1.yml | 2 +- features/draft/spec/filter-effects-1.yml.dist | 48 +- features/draft/spec/fs.yml | 2 +- features/draft/spec/fullscreen.yml | 2 +- features/draft/spec/gamepad-extensions.yml | 5 +- .../draft/spec/gamepad-extensions.yml.dist | 21 +- features/draft/spec/gamepad.yml | 8 +- features/draft/spec/gamepad.yml.dist | 22 + features/draft/spec/generic-sensor.yml | 11 +- features/draft/spec/generic-sensor.yml.dist | 11 +- features/draft/spec/geolocation.yml | 2 +- features/draft/spec/geolocation.yml.dist | 2 +- features/draft/spec/geometry-1.yml | 2 +- .../draft/spec/get-installed-related-apps.yml | 2 +- features/draft/spec/hr-time-3.yml | 2 +- features/draft/spec/html.yml | 1290 +++++----- features/draft/spec/html.yml.dist | 2172 ++--------------- features/draft/spec/image-capture.yml | 2 +- features/draft/spec/indexeddb-3.yml | 2 +- features/draft/spec/ink-enhancement.yml | 2 +- .../draft/spec/input-device-capabilities.yml | 2 +- features/draft/spec/intersection-observer.yml | 2 +- .../draft/spec/intervention-reporting.yml | 2 +- features/draft/spec/is-input-pending.yml | 2 +- features/draft/spec/js-self-profiling.yml | 2 +- features/draft/spec/keyboard-lock.yml | 9 - features/draft/spec/keyboard-map.yml | 8 - .../spec/khr-parallel-shader-compile.yml | 2 +- .../draft/spec/largest-contentful-paint.yml | 2 +- features/draft/spec/layout-instability.yml | 2 +- features/draft/spec/local-font-access.yml | 2 +- features/draft/spec/long-animation-frames.yml | 2 +- features/draft/spec/longtasks-1.yml | 2 +- features/draft/spec/magnetometer.yml | 2 +- features/draft/spec/managed-configuration.yml | 2 +- features/draft/spec/manifest-incubations.yml | 10 +- .../draft/spec/manifest-incubations.yml.dist | 41 +- features/draft/spec/mathml-core.yml | 27 +- features/draft/spec/mathml-core.yml.dist | 76 +- features/draft/spec/media-capabilities.yml | 3 +- .../draft/spec/media-capabilities.yml.dist | 15 +- .../draft/spec/media-playback-quality.yml | 2 +- features/draft/spec/media-source-2.yml | 7 +- features/draft/spec/media-source-2.yml.dist | 26 - .../draft/spec/mediacapture-fromelement.yml | 2 +- features/draft/spec/mediacapture-region.yml | 2 +- features/draft/spec/mediacapture-streams.yml | 2 +- .../draft/spec/mediacapture-streams.yml.dist | 20 +- .../draft/spec/mediacapture-transform.yml | 2 +- features/draft/spec/mediaqueries-5.yml | 2 +- features/draft/spec/mediasession.yml | 2 +- features/draft/spec/mediasession.yml.dist | 10 +- features/draft/spec/mediastream-recording.yml | 2 +- features/draft/spec/mixed-content.yml | 2 +- features/draft/spec/mixed-content.yml.dist | 62 +- features/draft/spec/motion-1.yml | 2 +- features/draft/spec/motion-1.yml.dist | 14 +- features/draft/spec/mst-content-hint.yml | 2 +- features/draft/spec/navigation-timing-2.yml | 2 +- features/draft/spec/netinfo.yml | 17 + features/draft/spec/netinfo.yml.dist | 37 + features/draft/spec/network-error-logging.yml | 2 +- features/draft/spec/notifications.yml | 2 +- .../draft/spec/oes-element-index-uint.yml | 2 +- features/draft/spec/oes-fbo-render-mipmap.yml | 2 +- .../draft/spec/oes-standard-derivatives.yml | 2 +- .../draft/spec/oes-texture-float-linear.yml | 2 +- features/draft/spec/oes-texture-float.yml | 2 +- .../spec/oes-texture-half-float-linear.yml | 2 +- .../draft/spec/oes-texture-half-float.yml | 2 +- .../draft/spec/oes-vertex-array-object.yml | 2 +- features/draft/spec/orientation-event.yml | 2 +- features/draft/spec/ovr-multiview2.yml | 2 +- features/draft/spec/page-lifecycle.yml | 8 + features/draft/spec/page-lifecycle.yml.dist | 13 + features/draft/spec/paint-timing.yml | 2 +- features/draft/spec/partitioned-cookies.yml | 6 + .../draft/spec/partitioned-cookies.yml.dist | 11 + features/draft/spec/payment-handler.yml | 2 +- features/draft/spec/payment-request-1-1.yml | 2 +- .../draft/spec/performance-measure-memory.yml | 2 +- features/draft/spec/performance-timeline.yml | 2 +- .../draft/spec/periodic-background-sync.yml | 2 +- features/draft/spec/permissions-policy-1.yml | 2 +- features/draft/spec/permissions-request.yml | 2 +- features/draft/spec/permissions.yml | 2 +- features/draft/spec/picture-in-picture.yml | 2 +- features/draft/spec/pointerevents3.yml | 2 +- features/draft/spec/pointerlock-2.yml | 3 +- features/draft/spec/pointerlock-2.yml.dist | 1 - features/draft/spec/portals.yml | 2 +- features/draft/spec/prefetch.yml | 2 +- features/draft/spec/prerendering-revamped.yml | 2 +- .../draft/spec/private-click-measurement.yml | 2 +- .../draft/spec/private-network-access.yml | 2 +- features/draft/spec/push-api.yml | 2 +- features/draft/spec/raw-camera-access.yml | 2 +- features/draft/spec/referrer-policy.yml | 7 - features/draft/spec/remote-playback.yml | 2 +- features/draft/spec/reporting-1.yml | 2 +- features/draft/spec/requestidlecallback.yml | 2 +- .../draft/spec/requeststorageaccessfor.yml | 2 +- features/draft/spec/resize-observer-1.yml | 2 +- features/draft/spec/resource-timing.yml | 38 + features/draft/spec/resource-timing.yml.dist | 144 ++ features/draft/spec/rfc2397.yml | 2 +- features/draft/spec/rfc2397.yml.dist | 8 +- features/draft/spec/rfc4120.yml | 7 + features/draft/spec/rfc4120.yml.dist | 18 + features/draft/spec/rfc6265.yml | 8 + features/draft/spec/rfc6265.yml.dist | 43 + features/draft/spec/rfc6265bis.yml | 6 + features/draft/spec/rfc6265bis.yml.dist | 17 + features/draft/spec/rfc6266.yml | 7 + features/draft/spec/rfc6266.yml.dist | 17 + features/draft/spec/rfc6454.yml | 6 + features/draft/spec/rfc6454.yml.dist | 17 + features/draft/spec/rfc6797.yml | 2 +- features/draft/spec/rfc7578.yml | 6 + features/draft/spec/rfc7578.yml.dist | 17 + features/draft/spec/rfc7616.yml | 7 + ...errer-policy.yml.dist => rfc7616.yml.dist} | 34 +- features/draft/spec/rfc7617.yml | 7 + features/draft/spec/rfc7617.yml.dist | 18 + features/draft/spec/rfc7838.yml | 2 +- features/draft/spec/rfc7932.yml | 6 + features/draft/spec/rfc7932.yml.dist | 17 + features/draft/spec/rfc8246.yml | 2 +- features/draft/spec/rfc8288.yml | 6 + features/draft/spec/rfc8288.yml.dist | 16 + features/draft/spec/rfc8297.yml | 2 +- features/draft/spec/rfc8470.yml | 2 +- features/draft/spec/rfc8878.yml | 6 + features/draft/spec/rfc8878.yml.dist | 13 + features/draft/spec/rfc8942.yml | 2 +- features/draft/spec/rfc8942.yml.dist | 2 +- features/draft/spec/rfc9110.yml | 51 + features/draft/spec/rfc9110.yml.dist | 81 + features/draft/spec/rfc9111.yml | 8 + features/draft/spec/rfc9111.yml.dist | 19 + features/draft/spec/rfc9112.yml | 8 + features/draft/spec/rfc9112.yml.dist | 19 + features/draft/spec/rfc9113.yml | 6 + features/draft/spec/rfc9113.yml.dist | 17 + features/draft/spec/rfc9163.yml | 2 +- features/draft/spec/rfc9163.yml.dist | 2 +- features/draft/spec/rfc9218.yml | 6 + features/draft/spec/rfc9218.yml.dist | 13 + .../draft/spec/saa-non-cookie-storage.yml | 2 +- features/draft/spec/savedata.yml | 2 +- features/draft/spec/savedata.yml.dist | 2 +- features/draft/spec/scheduling-apis.yml | 2 +- features/draft/spec/screen-capture.yml | 2 +- features/draft/spec/screen-wake-lock.yml | 15 - features/draft/spec/scroll-animations-1.yml | 3 +- .../draft/spec/scroll-to-text-fragment.yml | 2 +- .../spec/secure-payment-confirmation.yml | 2 +- features/draft/spec/selection-api.yml | 2 +- features/draft/spec/selectors-4.yml | 2 +- features/draft/spec/serial.yml | 2 +- features/draft/spec/service-workers.yml | 2 +- features/draft/spec/shape-detection-api.yml | 2 +- features/draft/spec/shared-storage.yml | 2 +- features/draft/spec/sourcemap.yml | 6 + features/draft/spec/sourcemap.yml.dist | 17 + features/draft/spec/speculation-rules.yml | 2 +- features/draft/spec/speech-api.yml | 2 +- features/draft/spec/speech-api.yml.dist | 6 +- features/draft/spec/sri.yml | 7 - features/draft/spec/sri.yml.dist | 18 - features/draft/spec/storage-access.yml | 2 +- features/draft/spec/storage.yml | 2 +- features/draft/spec/streams.yml | 2 +- features/draft/spec/streams.yml.dist | 18 +- features/draft/spec/svg-animations.yml | 36 + features/draft/spec/svg-animations.yml.dist | 188 ++ features/draft/spec/svg11.yml | 2 +- features/draft/spec/svg2.yml | 469 ++++ features/draft/spec/svg2.yml.dist | 1418 +++++++++++ features/draft/spec/tc39-float16array.yml | 2 +- .../draft/spec/tc39-intl-duration-format.yml | 2 +- features/draft/spec/tc39-intl-locale-info.yml | 2 +- features/draft/spec/tc39-iterator-helpers.yml | 2 +- .../spec/tc39-json-parse-with-source.yml | 2 +- features/draft/spec/tc39-promise-try.yml | 6 + features/draft/spec/tc39-promise-try.yml.dist | 8 + features/draft/spec/touch-events.yml | 2 +- features/draft/spec/touch-events.yml.dist | 30 +- features/draft/spec/trust-token-api.yml | 2 +- features/draft/spec/turtledove.yml | 2 +- features/draft/spec/ua-client-hints.yml | 2 +- features/draft/spec/uievents.yml | 7 +- features/draft/spec/uievents.yml.dist | 25 +- .../draft/spec/upgrade-insecure-requests.yml | 2 +- features/draft/spec/url.yml | 2 +- features/draft/spec/url.yml.dist | 14 +- ...user-preference-media-features-headers.yml | 2 +- features/draft/spec/user-timing.yml | 2 +- features/draft/spec/vibration.yml | 2 +- features/draft/spec/virtual-keyboard.yml | 2 +- features/draft/spec/wai-aria-1-3.yml | 2 +- features/draft/spec/wasm-core-2-fork-gc.yml | 2 +- .../wasm-js-api-2-fork-exception-handling.yml | 2 +- .../draft/spec/wasm-js-api-2-fork-threads.yml | 2 +- features/draft/spec/wasm-js-api-2.yml | 4 +- features/draft/spec/wasm-js-api-2.yml.dist | 46 +- features/draft/spec/wasm-web-api-2.yml | 2 +- features/draft/spec/web-animations-2.yml | 2 +- features/draft/spec/web-app-launch.yml | 4 +- features/draft/spec/web-app-launch.yml.dist | 8 - features/draft/spec/web-bluetooth.yml | 2 +- features/draft/spec/web-bluetooth.yml.dist | 3 +- features/draft/spec/web-nfc.yml | 2 +- features/draft/spec/web-otp.yml | 2 +- features/draft/spec/web-otp.yml.dist | 4 +- features/draft/spec/web-share.yml | 2 +- features/draft/spec/webaudio.yml | 424 ++-- features/draft/spec/webaudio.yml.dist | 717 +----- features/draft/spec/webauthn-3.yml | 2 +- .../draft/spec/webcrypto-secure-curves.yml | 2 +- features/draft/spec/webcryptoapi.yml | 2 +- features/draft/spec/webcryptoapi.yml.dist | 25 +- features/draft/spec/webdriver2.yml | 47 +- features/draft/spec/webdriver2.yml.dist | 49 + .../draft/spec/webgl-color-buffer-float.yml | 2 +- .../spec/webgl-compressed-texture-astc.yml | 2 +- .../spec/webgl-compressed-texture-etc.yml | 2 +- .../spec/webgl-compressed-texture-etc1.yml | 2 +- .../spec/webgl-compressed-texture-pvrtc.yml | 2 +- .../webgl-compressed-texture-s3tc-srgb.yml | 2 +- .../spec/webgl-compressed-texture-s3tc.yml | 2 +- .../draft/spec/webgl-debug-renderer-info.yml | 2 +- features/draft/spec/webgl-debug-shaders.yml | 2 +- features/draft/spec/webgl-depth-texture.yml | 2 +- features/draft/spec/webgl-draw-buffers.yml | 2 +- features/draft/spec/webgl-lose-context.yml | 2 +- features/draft/spec/webgl-multi-draw.yml | 2 +- features/draft/spec/webgl1.yml | 2 +- features/draft/spec/webgl2.yml | 2 +- features/draft/spec/webgpu.yml | 3 +- features/draft/spec/webgpu.yml.dist | 17 +- features/draft/spec/webhid.yml | 2 +- features/draft/spec/webidl.yml | 2 +- features/draft/spec/webmidi.yml | 2 +- .../draft/spec/webrtc-encoded-transform.yml | 4 +- .../spec/webrtc-encoded-transform.yml.dist | 5 +- features/draft/spec/webrtc-identity.yml | 2 +- features/draft/spec/webrtc-priority.yml | 2 +- features/draft/spec/webrtc-priority.yml.dist | 6 +- features/draft/spec/webrtc-stats.yml | 2 +- features/draft/spec/webrtc-stats.yml.dist | 87 +- features/draft/spec/webrtc.yml | 2 +- features/draft/spec/webrtc.yml.dist | 214 +- features/draft/spec/webtransport.yml | 2 +- features/draft/spec/webusb.yml | 2 +- features/draft/spec/webvtt1.yml | 2 +- features/draft/spec/webxr-ar-module-1.yml | 2 +- features/draft/spec/webxr-depth-sensing-1.yml | 2 +- features/draft/spec/webxr-dom-overlays-1.yml | 2 +- .../draft/spec/webxr-gamepads-module-1.yml | 2 +- features/draft/spec/webxr-hand-input-1.yml | 2 +- features/draft/spec/webxr-hit-test-1.yml | 2 +- .../spec/webxr-lighting-estimation-1.yml | 2 +- features/draft/spec/webxr.yml | 2 +- features/draft/spec/webxrlayers-1.yml | 2 +- .../draft/spec/window-controls-overlay.yml | 2 +- features/draft/spec/window-management.yml | 2 +- features/draft/spec/xhr.yml | 2 +- features/draft/srcset.yml | 16 + features/draft/srcset.yml.dist | 95 + features/draft/text-box-trim.yml | 1 - features/{draft/html-elements => }/em.yml | 5 +- .../{draft/html-elements => }/em.yml.dist | 4 +- features/{draft/html-elements => }/embed.yml | 5 +- .../{draft/html-elements => }/embed.yml.dist | 12 +- .../{draft/html-elements => }/fieldset.yml | 13 +- .../html-elements => }/fieldset.yml.dist | 22 +- features/figure.yml | 11 + .../{draft/html-elements => }/figure.yml.dist | 0 features/flexbox.yml.dist | 52 +- features/font-face.yml | 1 - features/font-size-adjust.yml | 1 + features/font-size-adjust.yml.dist | 25 +- features/head.yml | 7 + .../{draft/html-elements => }/head.yml.dist | 0 features/header-footer.yml | 11 + ...footer.yml.dist => header-footer.yml.dist} | 2 +- features/headings.yml | 12 + .../h1.yml.dist => headings.yml.dist} | 26 +- features/hgroup.yml | 2 +- features/hr.yml | 2 +- features/{draft/html-elements => }/html.yml | 5 +- .../{draft/html-elements => }/html.yml.dist | 0 features/{draft/html-elements => }/i.yml | 5 +- features/{draft/html-elements => }/i.yml.dist | 4 +- features/iframe-credentialless.yml | 7 + ...ml.dist => iframe-credentialless.yml.dist} | 2 +- features/iframe.yml | 22 + features/iframe.yml.dist | 79 + .../{draft/html-elements => }/image-maps.yml | 15 +- .../html-elements => }/image-maps.yml.dist | 77 +- features/{draft/html-elements => }/img.yml | 16 +- .../{draft/html-elements => }/img.yml.dist | 88 +- features/import.yml | 10 + features/import.yml.dist | 21 + features/input-event.yml | 2 +- features/ins.yml | 13 + features/ins.yml.dist | 19 + features/intl-segmenter.yml | 13 + features/intl-segmenter.yml.dist | 23 + features/js-modules-shared-workers.yml.dist | 4 +- features/kbd.yml | 6 + .../{draft/html-elements => }/kbd.yml.dist | 4 +- features/keyboard-lock.yml | 8 + .../{draft/spec => }/keyboard-lock.yml.dist | 0 features/keyboard-map.yml | 6 + .../{draft/spec => }/keyboard-map.yml.dist | 13 - features/{draft/html-elements => }/link.yml | 7 +- .../{draft/html-elements => }/link.yml.dist | 27 +- .../li.yml => list-elements.yml} | 14 +- .../li.yml.dist => list-elements.yml.dist} | 36 +- features/long-animation-frames.yaml | 1 - features/main.yml | 8 + .../{draft/html-elements => }/main.yml.dist | 0 features/mark.yml | 8 + .../{draft/html-elements => }/mark.yml.dist | 0 features/{draft/html-elements => }/meta.yml | 9 +- .../{draft/html-elements => }/meta.yml.dist | 38 +- features/modulepreload.yml.dist | 2 +- features/nav.yml | 8 + .../{draft/html-elements => }/nav.yml.dist | 0 features/{draft/html-elements => }/object.yml | 11 +- .../{draft/html-elements => }/object.yml.dist | 20 +- features/{draft/html-elements => }/output.yml | 9 +- .../{draft/html-elements => }/output.yml.dist | 21 +- features/{draft/html-elements => }/p.yml | 5 +- features/{draft/html-elements => }/p.yml.dist | 0 .../{draft/html-elements => }/picture.yml | 5 +- .../html-elements => }/picture.yml.dist | 0 features/pre.yml | 7 + .../{draft/html-elements => }/pre.yml.dist | 8 +- .../{draft/spec => }/presentation-api.yml | 6 +- .../spec => }/presentation-api.yml.dist | 15 +- .../{draft/html-elements => }/progress.yml | 9 +- .../html-elements => }/progress.yml.dist | 11 +- features/promise.yml | 1 - features/{draft/html-elements => }/q.yml | 5 +- features/{draft/html-elements => }/q.yml.dist | 0 features/read-write-pseudos.yml | 1 - features/referrer-policy.yml.dist | 12 + features/{draft/html-elements => }/ruby.yml | 3 +- features/ruby.yml.dist | 19 + features/samp.yml | 6 + .../{draft/html-elements => }/samp.yml.dist | 4 +- features/screen-wake-lock.yml | 10 + .../spec => }/screen-wake-lock.yml.dist | 8 +- features/{draft/html-elements => }/script.yml | 15 +- .../{draft/html-elements => }/script.yml.dist | 29 +- features/scroll-into-view.yml | 1 - features/search.yml | 2 +- features/section.yml | 8 + .../html-elements => }/section.yml.dist | 0 features/{draft/html-elements => }/select.yml | 9 +- .../{draft/html-elements => }/select.yml.dist | 19 +- features/server-timing.yml.dist | 22 + features/shadow-dom.yml | 1 + features/slot-assign.yml | 1 + features/slot.yml | 4 +- features/slot.yml.dist | 14 +- features/small.yml | 6 + .../{draft/html-elements => }/small.yml.dist | 4 +- features/source.yml | 19 + features/source.yml.dist | 57 + features/{draft/html-elements => }/span.yml | 7 +- .../{draft/html-elements => }/span.yml.dist | 8 +- features/state.yml | 1 + features/{draft/html-elements => }/strong.yml | 5 +- .../{draft/html-elements => }/strong.yml.dist | 4 +- features/{draft/html-elements => }/style.yml | 7 +- .../{draft/html-elements => }/style.yml.dist | 8 +- .../{draft/html-elements => }/sub-sup.yml | 5 +- .../html-elements => }/sub-sup.yml.dist | 4 +- features/supports.yml | 16 + features/supports.yml.dist | 65 + features/tabindex.yml.dist | 8 +- features/{draft/html-elements => }/table.yml | 7 +- .../{draft/html-elements => }/table.yml.dist | 18 +- features/template.yml | 4 +- features/text-tracks.yml | 56 + features/text-tracks.yml.dist | 140 ++ .../{draft/html-elements => }/textarea.yml | 9 +- .../html-elements => }/textarea.yml.dist | 23 +- features/time.yml | 4 +- features/title.yml | 10 + .../{draft/html-elements => }/title.yml.dist | 4 +- features/transferable-arraybuffer.yml | 1 - features/transforms2d.yml.dist | 14 +- features/trig-functions.yml | 2 +- features/{draft/html-elements => }/u.yml | 5 +- features/{draft/html-elements => }/u.yml.dist | 4 +- features/var.yml | 6 + .../{draft/html-elements => }/var.yml.dist | 4 +- features/video.yml | 4 +- features/video.yml.dist | 2 +- features/viewport-unit-variants.yml | 1 - features/viewport-units.yml | 1 - features/wbr.yml | 7 + .../{draft/html-elements => }/wbr.yml.dist | 6 +- features/web-bluetooth.yml.dist | 1 - features/webnn.yml.dist | 3 +- features/webrtc-encoded-transform.yml.dist | 2 - features/{draft/spec => }/websockets.yml | 13 +- features/{draft/spec => }/websockets.yml.dist | 36 +- features/xml-serializer.yml | 7 + features/xml-serializer.yml.dist | 19 + groups/containment.yml | 4 + groups/html-elements.yml | 2 + groups/intl.yml | 3 + groups/streams.yml | 2 +- groups/transferable.yml | 3 - groups/web-components.yml | 1 + index.ts | 37 +- package-lock.json | 652 +++-- package.json | 26 +- packages/compute-baseline/package.json | 9 +- .../src/baseline/date-utils.test.ts | 5 +- .../src/baseline/date-utils.ts | 25 +- .../src/baseline/index.test.ts | 50 +- .../compute-baseline/src/baseline/index.ts | 116 +- .../src/baseline/support.test.ts | 36 - .../compute-baseline/src/baseline/support.ts | 133 +- packages/web-features/README.md | 13 + packages/web-features/index.ts | 2 +- packages/web-features/package-lock.json | 541 ++-- packages/web-features/package.json | 8 +- .../{defs.schema.json => data.schema.json} | 157 +- scripts/build.ts | 73 +- scripts/dist.ts | 53 +- scripts/release.ts | 86 +- scripts/schema.ts | 37 +- scripts/update-drafts.ts | 15 +- scripts/validate.ts | 21 + tsconfig.json | 4 +- types.ts | 32 +- 717 files changed, 9829 insertions(+), 6899 deletions(-) create mode 100644 .github/workflows/publish_web-features.yml delete mode 100644 .github/workflows/refresh_dist.yml delete mode 100644 .github/workflows/remove_refresh_dist_label.yml create mode 100644 .github/workflows/update_draft_features_weekly.yml create mode 100644 .nvmrc create mode 100644 docs/publishing.md rename features/{draft/html-elements => }/a.yml (80%) rename features/{draft/html-elements => }/a.yml.dist (72%) rename features/{draft/html-elements => }/address.yml (50%) rename features/{draft/html-elements => }/address.yml.dist (100%) create mode 100644 features/article.yml rename features/{draft/html-elements => }/article.yml.dist (100%) rename features/{draft/html-elements => }/b.yml (51%) rename features/{draft/html-elements => }/b.yml.dist (100%) rename features/{draft/spec => }/background-sync.yml (54%) rename features/{draft/spec => }/background-sync.yml.dist (100%) create mode 100644 features/bdi.yml rename features/{draft/html-elements => }/bdi.yml.dist (100%) create mode 100644 features/bdo.yml rename features/{draft/html-elements => }/bdo.yml.dist (84%) rename features/{draft/html-elements => }/blockquote.yml (56%) rename features/{draft/html-elements => }/blockquote.yml.dist (90%) rename features/{draft/html-elements => }/body.yml (60%) rename features/{draft/html-elements => }/body.yml.dist (100%) rename features/{draft/html-elements => }/button.yml (78%) rename features/{draft/html-elements => }/button.yml.dist (82%) rename features/{draft/html-elements => }/canvas.yml (51%) rename features/{draft/html-elements => }/canvas.yml.dist (87%) create mode 100644 features/cite.yml rename features/{draft/html-elements => }/cite.yml.dist (89%) create mode 100644 features/contain-inline-size.yml create mode 100644 features/contain-inline-size.yml.dist create mode 100644 features/contain-layout.yml create mode 100644 features/contain-layout.yml.dist create mode 100644 features/contain-paint.yml create mode 100644 features/contain-paint.yml.dist create mode 100644 features/contain-size.yml create mode 100644 features/contain-size.yml.dist create mode 100644 features/contain-style.yml create mode 100644 features/contain-style.yml.dist rename features/{draft/html-elements => }/data.yml (64%) create mode 100644 features/data.yml.dist create mode 100644 features/del.yml rename features/{draft/html-elements => }/del.yml.dist (85%) rename features/{draft/html-elements => }/dfn.yml (54%) rename features/{draft/html-elements => }/dfn.yml.dist (100%) rename features/{draft/html-elements => }/div.yml (53%) create mode 100644 features/div.yml.dist create mode 100644 features/draft/download.yml create mode 100644 features/draft/download.yml.dist delete mode 100644 features/draft/html-elements/article.yml delete mode 100644 features/draft/html-elements/bdi.yml delete mode 100644 features/draft/html-elements/bdo.yml delete mode 100644 features/draft/html-elements/cite.yml delete mode 100644 features/draft/html-elements/data.yml.dist delete mode 100644 features/draft/html-elements/del.yml delete mode 100644 features/draft/html-elements/figure.yml delete mode 100644 features/draft/html-elements/footer.yml delete mode 100644 features/draft/html-elements/h1.yml delete mode 100644 features/draft/html-elements/head.yml delete mode 100644 features/draft/html-elements/iframe.yml delete mode 100644 features/draft/html-elements/iframe.yml.dist delete mode 100644 features/draft/html-elements/kbd.yml delete mode 100644 features/draft/html-elements/main.yml delete mode 100644 features/draft/html-elements/mark.yml delete mode 100644 features/draft/html-elements/nav.yml delete mode 100644 features/draft/html-elements/pre.yml delete mode 100644 features/draft/html-elements/ruby.yml.dist delete mode 100644 features/draft/html-elements/samp.yml delete mode 100644 features/draft/html-elements/section.yml delete mode 100644 features/draft/html-elements/small.yml delete mode 100644 features/draft/html-elements/title.yml delete mode 100644 features/draft/html-elements/track.yml delete mode 100644 features/draft/html-elements/track.yml.dist delete mode 100644 features/draft/html-elements/var.yml delete mode 100644 features/draft/html-elements/wbr.yml create mode 100644 features/draft/iframe-sandbox.yml create mode 100644 features/draft/iframe-sandbox.yml.dist create mode 100644 features/draft/ping.yml create mode 100644 features/draft/ping.yml.dist delete mode 100644 features/draft/spec/accelerometer.yml delete mode 100644 features/draft/spec/accelerometer.yml.dist delete mode 100644 features/draft/spec/anonymous-iframe.yml delete mode 100644 features/draft/spec/background-fetch.yml delete mode 100644 features/draft/spec/background-fetch.yml.dist create mode 100644 features/draft/spec/csp3.yml create mode 100644 features/draft/spec/csp3.yml.dist rename features/draft/spec/{css-scroll-snap-1.yml => css-scroll-snap-2.yml} (94%) rename features/draft/spec/{css-scroll-snap-1.yml.dist => css-scroll-snap-2.yml.dist} (94%) rename features/draft/spec/{encrypted-media.yml => encrypted-media-2.yml} (98%) rename features/draft/spec/{encrypted-media.yml.dist => encrypted-media-2.yml.dist} (98%) create mode 100644 features/draft/spec/fetch.yml create mode 100644 features/draft/spec/fetch.yml.dist delete mode 100644 features/draft/spec/keyboard-lock.yml delete mode 100644 features/draft/spec/keyboard-map.yml create mode 100644 features/draft/spec/netinfo.yml create mode 100644 features/draft/spec/netinfo.yml.dist create mode 100644 features/draft/spec/page-lifecycle.yml create mode 100644 features/draft/spec/page-lifecycle.yml.dist create mode 100644 features/draft/spec/partitioned-cookies.yml create mode 100644 features/draft/spec/partitioned-cookies.yml.dist delete mode 100644 features/draft/spec/referrer-policy.yml create mode 100644 features/draft/spec/resource-timing.yml create mode 100644 features/draft/spec/resource-timing.yml.dist create mode 100644 features/draft/spec/rfc4120.yml create mode 100644 features/draft/spec/rfc4120.yml.dist create mode 100644 features/draft/spec/rfc6265.yml create mode 100644 features/draft/spec/rfc6265.yml.dist create mode 100644 features/draft/spec/rfc6265bis.yml create mode 100644 features/draft/spec/rfc6265bis.yml.dist create mode 100644 features/draft/spec/rfc6266.yml create mode 100644 features/draft/spec/rfc6266.yml.dist create mode 100644 features/draft/spec/rfc6454.yml create mode 100644 features/draft/spec/rfc6454.yml.dist create mode 100644 features/draft/spec/rfc7578.yml create mode 100644 features/draft/spec/rfc7578.yml.dist create mode 100644 features/draft/spec/rfc7616.yml rename features/draft/spec/{referrer-policy.yml.dist => rfc7616.yml.dist} (58%) create mode 100644 features/draft/spec/rfc7617.yml create mode 100644 features/draft/spec/rfc7617.yml.dist create mode 100644 features/draft/spec/rfc7932.yml create mode 100644 features/draft/spec/rfc7932.yml.dist create mode 100644 features/draft/spec/rfc8288.yml create mode 100644 features/draft/spec/rfc8288.yml.dist create mode 100644 features/draft/spec/rfc8878.yml create mode 100644 features/draft/spec/rfc8878.yml.dist create mode 100644 features/draft/spec/rfc9110.yml create mode 100644 features/draft/spec/rfc9110.yml.dist create mode 100644 features/draft/spec/rfc9111.yml create mode 100644 features/draft/spec/rfc9111.yml.dist create mode 100644 features/draft/spec/rfc9112.yml create mode 100644 features/draft/spec/rfc9112.yml.dist create mode 100644 features/draft/spec/rfc9113.yml create mode 100644 features/draft/spec/rfc9113.yml.dist create mode 100644 features/draft/spec/rfc9218.yml create mode 100644 features/draft/spec/rfc9218.yml.dist delete mode 100644 features/draft/spec/screen-wake-lock.yml create mode 100644 features/draft/spec/sourcemap.yml create mode 100644 features/draft/spec/sourcemap.yml.dist delete mode 100644 features/draft/spec/sri.yml delete mode 100644 features/draft/spec/sri.yml.dist create mode 100644 features/draft/spec/svg-animations.yml create mode 100644 features/draft/spec/svg-animations.yml.dist create mode 100644 features/draft/spec/svg2.yml create mode 100644 features/draft/spec/svg2.yml.dist create mode 100644 features/draft/spec/tc39-promise-try.yml create mode 100644 features/draft/spec/tc39-promise-try.yml.dist create mode 100644 features/draft/srcset.yml create mode 100644 features/draft/srcset.yml.dist rename features/{draft/html-elements => }/em.yml (51%) rename features/{draft/html-elements => }/em.yml.dist (89%) rename features/{draft/html-elements => }/embed.yml (74%) rename features/{draft/html-elements => }/embed.yml.dist (93%) rename features/{draft/html-elements => }/fieldset.yml (72%) rename features/{draft/html-elements => }/fieldset.yml.dist (90%) create mode 100644 features/figure.yml rename features/{draft/html-elements => }/figure.yml.dist (100%) create mode 100644 features/head.yml rename features/{draft/html-elements => }/head.yml.dist (100%) create mode 100644 features/header-footer.yml rename features/{draft/html-elements/footer.yml.dist => header-footer.yml.dist} (91%) create mode 100644 features/headings.yml rename features/{draft/html-elements/h1.yml.dist => headings.yml.dist} (89%) rename features/{draft/html-elements => }/html.yml (52%) rename features/{draft/html-elements => }/html.yml.dist (100%) rename features/{draft/html-elements => }/i.yml (51%) rename features/{draft/html-elements => }/i.yml.dist (89%) create mode 100644 features/iframe-credentialless.yml rename features/{draft/spec/anonymous-iframe.yml.dist => iframe-credentialless.yml.dist} (86%) create mode 100644 features/iframe.yml create mode 100644 features/iframe.yml.dist rename features/{draft/html-elements => }/image-maps.yml (80%) rename features/{draft/html-elements => }/image-maps.yml.dist (80%) rename features/{draft/html-elements => }/img.yml (66%) rename features/{draft/html-elements => }/img.yml.dist (60%) create mode 100644 features/import.yml create mode 100644 features/import.yml.dist create mode 100644 features/ins.yml create mode 100644 features/ins.yml.dist create mode 100644 features/intl-segmenter.yml create mode 100644 features/intl-segmenter.yml.dist create mode 100644 features/kbd.yml rename features/{draft/html-elements => }/kbd.yml.dist (89%) create mode 100644 features/keyboard-lock.yml rename features/{draft/spec => }/keyboard-lock.yml.dist (100%) create mode 100644 features/keyboard-map.yml rename features/{draft/spec => }/keyboard-map.yml.dist (50%) rename features/{draft/html-elements => }/link.yml (79%) rename features/{draft/html-elements => }/link.yml.dist (89%) rename features/{draft/html-elements/li.yml => list-elements.yml} (72%) rename features/{draft/html-elements/li.yml.dist => list-elements.yml.dist} (74%) create mode 100644 features/main.yml rename features/{draft/html-elements => }/main.yml.dist (100%) create mode 100644 features/mark.yml rename features/{draft/html-elements => }/mark.yml.dist (100%) rename features/{draft/html-elements => }/meta.yml (71%) rename features/{draft/html-elements => }/meta.yml.dist (76%) create mode 100644 features/nav.yml rename features/{draft/html-elements => }/nav.yml.dist (100%) rename features/{draft/html-elements => }/object.yml (64%) rename features/{draft/html-elements => }/object.yml.dist (89%) rename features/{draft/html-elements => }/output.yml (74%) rename features/{draft/html-elements => }/output.yml.dist (80%) rename features/{draft/html-elements => }/p.yml (65%) rename features/{draft/html-elements => }/p.yml.dist (100%) rename features/{draft/html-elements => }/picture.yml (51%) rename features/{draft/html-elements => }/picture.yml.dist (100%) create mode 100644 features/pre.yml rename features/{draft/html-elements => }/pre.yml.dist (91%) rename features/{draft/spec => }/presentation-api.yml (85%) rename features/{draft/spec => }/presentation-api.yml.dist (89%) rename features/{draft/html-elements => }/progress.yml (63%) rename features/{draft/html-elements => }/progress.yml.dist (87%) rename features/{draft/html-elements => }/q.yml (70%) rename features/{draft/html-elements => }/q.yml.dist (100%) rename features/{draft/html-elements => }/ruby.yml (79%) create mode 100644 features/ruby.yml.dist create mode 100644 features/samp.yml rename features/{draft/html-elements => }/samp.yml.dist (89%) create mode 100644 features/screen-wake-lock.yml rename features/{draft/spec => }/screen-wake-lock.yml.dist (89%) rename features/{draft/html-elements => }/script.yml (59%) rename features/{draft/html-elements => }/script.yml.dist (91%) create mode 100644 features/section.yml rename features/{draft/html-elements => }/section.yml.dist (100%) rename features/{draft/html-elements => }/select.yml (90%) rename features/{draft/html-elements => }/select.yml.dist (94%) create mode 100644 features/small.yml rename features/{draft/html-elements => }/small.yml.dist (89%) create mode 100644 features/source.yml create mode 100644 features/source.yml.dist rename features/{draft/html-elements => }/span.yml (52%) rename features/{draft/html-elements => }/span.yml.dist (94%) rename features/{draft/html-elements => }/strong.yml (53%) rename features/{draft/html-elements => }/strong.yml.dist (89%) rename features/{draft/html-elements => }/style.yml (63%) rename features/{draft/html-elements => }/style.yml.dist (92%) rename features/{draft/html-elements => }/sub-sup.yml (61%) rename features/{draft/html-elements => }/sub-sup.yml.dist (89%) create mode 100644 features/supports.yml create mode 100644 features/supports.yml.dist rename features/{draft/html-elements => }/table.yml (91%) rename features/{draft/html-elements => }/table.yml.dist (95%) create mode 100644 features/text-tracks.yml create mode 100644 features/text-tracks.yml.dist rename features/{draft/html-elements => }/textarea.yml (88%) rename features/{draft/html-elements => }/textarea.yml.dist (94%) create mode 100644 features/title.yml rename features/{draft/html-elements => }/title.yml.dist (98%) rename features/{draft/html-elements => }/u.yml (50%) rename features/{draft/html-elements => }/u.yml.dist (89%) create mode 100644 features/var.yml rename features/{draft/html-elements => }/var.yml.dist (89%) create mode 100644 features/wbr.yml rename features/{draft/html-elements => }/wbr.yml.dist (78%) rename features/{draft/spec => }/websockets.yml (61%) rename features/{draft/spec => }/websockets.yml.dist (76%) create mode 100644 features/xml-serializer.yml create mode 100644 features/xml-serializer.yml.dist create mode 100644 groups/containment.yml create mode 100644 groups/html-elements.yml create mode 100644 groups/intl.yml delete mode 100644 groups/transferable.yml create mode 100644 groups/web-components.yml delete mode 100644 packages/compute-baseline/src/baseline/support.test.ts rename schemas/{defs.schema.json => data.schema.json} (57%) create mode 100644 scripts/validate.ts diff --git a/.github/labeler.yml b/.github/labeler.yml index 84a7aeb47ac..0a6a5182a1b 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -3,3 +3,8 @@ - all-globs-to-any-file: - "features/*.yml" - "!features/*.yml.dist" + +"documentation": + - changed-files: + - all-globs-to-any-file: + - "**/*.md" diff --git a/.github/workflows/publish_web-features.yml b/.github/workflows/publish_web-features.yml new file mode 100644 index 00000000000..13b61af9cc2 --- /dev/null +++ b/.github/workflows/publish_web-features.yml @@ -0,0 +1,56 @@ +name: Publish web-features + +on: + push: + # Tags on the form v1.2.3 are for releases. Any other tags are ignored. + tags: + - 'v[0-9]+.[0-9]+.[0-9]+' + +env: + package_dir: "packages/web-features" + +jobs: + test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version-file: .node-version + cache: npm + - run: npm ci + - run: npm test + artifacts: + if: github.repository == 'web-platform-dx/web-features' + runs-on: ubuntu-latest + needs: "test" + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version-file: .node-version + cache: npm + registry-url: "https://registry.npmjs.org" + - run: npm ci + - run: npm run build + - run: npm run build:extended + - run: gh release upload ${{ github.ref_name }} packages/web-features/data.json schemas/data.schema.json data.extended.json + env: + GH_TOKEN: ${{ github.token }} + publish: + if: github.repository == 'web-platform-dx/web-features' + runs-on: ubuntu-latest + needs: "test" + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version-file: .node-version + cache: npm + registry-url: "https://registry.npmjs.org" + - run: npm ci + - run: npm run build + - run: npm publish + working-directory: ${{ env.package_dir }} + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 11a6c3e7683..c576605be43 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -18,7 +18,7 @@ jobs: - run: npm ci - run: npm run build - name: Pretty print built JSON - run: jq . packages/web-features/index.json + run: jq . packages/web-features/data.json test: runs-on: ubuntu-latest steps: diff --git a/.github/workflows/refresh_dist.yml b/.github/workflows/refresh_dist.yml deleted file mode 100644 index b8a245330d2..00000000000 --- a/.github/workflows/refresh_dist.yml +++ /dev/null @@ -1,66 +0,0 @@ -name: Refresh dist files - -on: - pull_request: - types: [labeled] - -jobs: - refresh: - if: contains(github.event.pull_request.labels.*.name, 'refresh dist') - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v4 - with: - repository: ${{ github.event.pull_request.head.repo.full_name }} - ref: ${{ github.event.pull_request.head.ref }} - - - id: changed-package-json - uses: tj-actions/changed-files@v44 - with: - files: | - **/package.json - **/package-lock.json - - - id: changed-features - uses: tj-actions/changed-files@v44 - with: - files: | - features/**/*.yml - features/**/*.yml.dist - - - uses: actions/setup-node@v4 - if: steps.changed-package-json.outputs.any_changed == 'true' || steps.changed-features.outputs.any_changed == 'true' - - - run: npm install - if: steps.changed-package-json.outputs.any_changed == 'true' || steps.changed-features.outputs.any_changed == 'true' - - - name: Refresh dist files for feature changes - if: steps.changed-package-json.outputs.any_changed == 'false' && steps.changed-features.outputs.any_changed == 'true' - env: - CHANGED_FEATURES: ${{ steps.changed-features.outputs.all_changed_files }} - run: | - npm run dist -- ${CHANGED_FEATURES} - - - name: Refresh all dist files (for package*.json changes) - if: steps.changed-package-json.outputs.any_changed == 'true' - run: | - npm run dist - - - uses: stefanzweifel/git-auto-commit-action@v5 - if: steps.changed-package-json.outputs.any_changed == 'true' || steps.changed-features.outputs.any_changed == 'true' - with: - commit_message: Refresh dist files - - # https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#using-data-from-the-triggering-workflow - - name: Save PR URL - env: - PR_URL: https://github.com/${{ github.repository }}/pull/${{ github.event.number }} - run: | - mkdir -p ./pr - echo $PR_URL > ./pr/pr_url - - - uses: actions/upload-artifact@v4 - with: - name: pr_url - path: pr/ diff --git a/.github/workflows/remove_refresh_dist_label.yml b/.github/workflows/remove_refresh_dist_label.yml deleted file mode 100644 index 9820c8a3ff0..00000000000 --- a/.github/workflows/remove_refresh_dist_label.yml +++ /dev/null @@ -1,37 +0,0 @@ -name: Remove dist label - -on: - workflow_run: - workflows: [Refresh dist files] - types: [completed] - -jobs: - unlabel: - runs-on: ubuntu-latest - - steps: - # https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#using-data-from-the-triggering-workflow - - name: Get PR URL artifact - uses: actions/github-script@v7 - with: - script: | - let allArtifacts = await github.rest.actions.listWorkflowRunArtifacts({ - owner: context.repo.owner, - repo: context.repo.repo, - run_id: context.payload.workflow_run.id, - }); - let matchArtifact = allArtifacts.data.artifacts.filter((artifact) => { - return artifact.name == "pr_url" - })[0]; - let download = await github.rest.actions.downloadArtifact({ - owner: context.repo.owner, - repo: context.repo.repo, - artifact_id: matchArtifact.id, - archive_format: 'zip', - }); - let fs = require('fs'); - fs.writeFileSync(`${process.env.GITHUB_WORKSPACE}/pr_url.zip`, Buffer.from(download.data)); - - - run: gh pr edit "$(unzip -p pr_url.zip)" --remove-label "refresh dist" - env: - GH_TOKEN: ${{ github.token }} diff --git a/.github/workflows/update_draft_features_weekly.yml b/.github/workflows/update_draft_features_weekly.yml new file mode 100644 index 00000000000..86ecf771802 --- /dev/null +++ b/.github/workflows/update_draft_features_weekly.yml @@ -0,0 +1,35 @@ +name: Update Draft Features + +on: + # Runs at midnight on Mondays 05:30 UTC, or manually triggered + schedule: + - cron: '30 5 * * 1' + workflow_dispatch: + +jobs: + update-drafts: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version-file: .node-version + cache: npm + - run: npm ci + - run: rm features/draft/spec/*.yml features/draft/spec/*.dist + - run: npm run update-drafts + - run: npm run dist + - name: Commit changes + run: | + git config --local user.email "action@github.com" + git config --local user.name "GitHub Action" + git add -A + git commit -m "Update draft features weekly" || echo "No changes to commit" + - name: Create Pull Request + uses: peter-evans/create-pull-request@v6 + with: + commit-message: Update draft features weekly + title: "[GitHub Actions] Update draft features weekly" + body: "This is an auto-generated PR with draft features by spec updates." + branch: update-draft-features-${{ github.run_number }} + delete-branch: true diff --git a/.gitignore b/.gitignore index 099fb722a49..ca30be32d5b 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,8 @@ node_modules/ packages/compute-baseline/dist/ packages/web-features/index.d.ts packages/**/LICENSE.txt +packages/web-features/data.json +packages/web-features/data.schema.json packages/web-features/types.ts -index.json +data.extended.json index.js diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 00000000000..0305213fee1 --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +18.20 diff --git a/.prettierignore b/.prettierignore index ec63ecc74c0..86750c6ed78 100644 --- a/.prettierignore +++ b/.prettierignore @@ -5,8 +5,12 @@ !GOVERNANCE.md !eslint.config.js +!/docs/publishing.md + !/features/*.yml /features/*.yml.dist +!/groups/*.yml +!/snapshots/*.yml !/packages/compute-baseline/** !/packages/web-features/** @@ -17,3 +21,4 @@ !/scripts/find-troublesome-ancestors.ts !/scripts/release.ts !/scripts/update-drafts.ts +!/scripts/validate.ts diff --git a/GOVERNANCE.md b/GOVERNANCE.md index 59ca68a4e54..d7e2540804a 100644 --- a/GOVERNANCE.md +++ b/GOVERNANCE.md @@ -75,8 +75,11 @@ Inactive _Peers_ (no activity on the project for months or more) might be marked #### List of current Peers +- Adriana Jara ([@tropicadri](https://github.com/tropicadri)) - Brian Kardell ([@bkardell](https://github.com/bkardell)) - Patrick Brosset ([@captainbrosset](https://github.com/captainbrosset)) +- Pete LePage ([@petele](https://github.com/petele)) +- Mariko Kosaka ([@kosamari](https://github.com/kosamari)) A _Peer_ who shows an above-average level of contribution to the project, particularly with respect to its strategic direction and long-term health, may be nominated to become an _Owner_, described below. diff --git a/docs/guidelines.md b/docs/guidelines.md index 0f0a0fffe5b..c79b6e0812f 100644 --- a/docs/guidelines.md +++ b/docs/guidelines.md @@ -1,24 +1,5 @@ # Feature guidelines -These guidelines are for authors of new features. - -## Identifiers - -Feature identifiers must contain only lowercase alphanumeric characters (a-z and 0-9) plus the `-` character (hyphen or minus sign) as a word separator. - -The identifier should match the name, with these additional guidelines: - -- Prefer shorter identifiers to longer identifiers, by avoiding common qualifiers and repeated words. - - - 👍 Recommended: `aborting` - - 👎 Not recommended: `abort-controller-and-abort-signal` - - 👍 Recommended: `arrays` - - 👎 Not recommended: `arrays-initial-support` - - 👍 Recommended: `fullscreen` - - 👎 Not recommended: `fullscreen-api` - - 👍 Recommended: `user-pseudos` - - 👎 Not recommended: `user-valid-and-user-invalid` - ## Names Feature authors should (in descending order of priority): @@ -65,6 +46,23 @@ Feature authors should (in descending order of priority): - 👍 Recommended: `` - 👎 Not recommended: `` element +## Identifiers + +Feature identifiers must contain only lowercase alphanumeric characters (a-z and 0-9) plus the `-` character (hyphen or minus sign) as a word separator. + +The identifier should match the name, with these additional guidelines: + +- Prefer shorter identifiers to longer identifiers, by avoiding common qualifiers and repeated words. + + - 👍 Recommended: `aborting` + - 👎 Not recommended: `abort-controller-and-abort-signal` + - 👍 Recommended: `arrays` + - 👎 Not recommended: `arrays-initial-support` + - 👍 Recommended: `fullscreen` + - 👎 Not recommended: `fullscreen-api` + - 👍 Recommended: `user-pseudos` + - 👎 Not recommended: `user-valid-and-user-invalid` + ## Descriptions * Describe, in the active voice, what a feature does or is. @@ -192,6 +190,17 @@ Avoid. See [sets](#sets). ([#727](https://github.com/web-platform-dx/web-features/pull/727#discussion_r1537635491)) +#### styling … as … by default + +Use this phrase (or using another appropriate preposition, such as "styling in") to note conventional or standardized default styling. +The ellipses stand in for the thing being styled (e.g., "text") and the style itself (e.g., "italic"). +Use it before [_also known as_ text](#also-known-as). +For example: + + > The `` element represents side-comments and small print, like copyright and legal text, styling text in a reduced font size by default. + + ([#1403](https://github.com/web-platform-dx/web-features/pull/1403), [#1379](https://github.com/web-platform-dx/web-features/pull/1379)) + #### usage Never use "usage" in the sense of "using." diff --git a/docs/publishing.md b/docs/publishing.md new file mode 100644 index 00000000000..4d86af77c80 --- /dev/null +++ b/docs/publishing.md @@ -0,0 +1,43 @@ +# Publishing + +## Regular releases + +> [!NOTE] +> This information is for [project owners](../GOVERNANCE.md#roles-and-responsibilities). + +These are the steps to publish a regular release on NPM and as a GitHub release: + +- Determine if it should be a major, minor, or patch release. The "[major version required](https://github.com/web-platform-dx/web-features/pulls?q=is%3Apr+is%3Amerged+label%3A%22major+version+required%22+sort%3Aupdated-desc)" and "[minor version required](https://github.com/web-platform-dx/web-features/pulls?q=is%3Apr+is%3Amerged+label%3A%22minor+version+required%22+sort%3Aupdated-desc)" labels should be used to support this decision. +- Update `packages/web-features/package.json` and `packages/web-features/package-lock.json` in a PR and get review. +- Merge the PR and draft a new release at https://github.com/web-platform-dx/web-features/releases/new +- Fill in the tag name `vX.Y.Z` manually as both the tag and release title +- For major releases, add a "Breaking Changes" section up top. +- For minor releases, add a "What's New" section up top. +- Click "Generate release notes" +- Search for "<" and make sure all element names are quoted with backquotes +- Remove all lines from Dependabot +- Publish the GitHub release + +Publishing the GitHub release creates the tag. This triggers the [Publish web-features GitHub Actions workflows](https://github.com/web-platform-dx/web-features/blob/main/.github/workflows/publish_web-features.yml), uploads GitHub release artifacts and publishes the package to NPM. + +## `@next` releases + +The [Publish web-features@next GitHub Actions workflows](https://github.com/web-platform-dx/web-features/blob/main/.github/workflows/publish_next_web-features.yml) automatically publish pre-releases on push to the main branch using the `next` [npm dist tag](https://docs.npmjs.com/adding-dist-tags-to-packages). +You can install these prereleases using a command such as `npm install web-features@next`. + +## Secrets + +> [!NOTE] +> This information is for [project owners](../GOVERNANCE.md#roles-and-responsibilities). + +Publishing requires the `NPM_TOKEN` repository secret (set via _Settings_ → _Secrets and variables_ → _Actions_). +If you're replacing this token, then use the following settings: + +| Setting | Value | +| -------------------------------- | ---------------------------------------------------------------------------------------------------------- | +| Token type | _Granular Access Token_ | +| Expiration | The first day of the next quarter (1 January, 1 April, 1 July, or 1 October) or the first weekday after it | +| Packages and scopes permsissions | _Read and write_ | +| Select packages | _Only select packages and scopes_ | +| Select packages and scopes | `compute-baseline` and `web-features` | +| Organizations | _No access_ | diff --git a/features/draft/html-elements/a.yml b/features/a.yml similarity index 80% rename from features/draft/html-elements/a.yml rename to features/a.yml index b4120a54fa8..957281de6be 100644 --- a/features/draft/html-elements/a.yml +++ b/features/a.yml @@ -1,11 +1,11 @@ -draft_date: 2024-06-05 name: -description: The `` element TODO. +description: The `` element creates a hyperlink to any resource that's accessible via a URL, such as web pages, files, email addresses, or locations within the same page. spec: https://html.spec.whatwg.org/multipage/text-level-semantics.html#the-a-element -group: html +group: html-elements +status: + compute_from: html.elements.a compat_features: - api.HTMLAnchorElement - - api.HTMLAnchorElement.download - api.HTMLAnchorElement.hash - api.HTMLAnchorElement.host - api.HTMLAnchorElement.hostname @@ -14,7 +14,6 @@ compat_features: - api.HTMLAnchorElement.origin - api.HTMLAnchorElement.password - api.HTMLAnchorElement.pathname - - api.HTMLAnchorElement.ping - api.HTMLAnchorElement.port - api.HTMLAnchorElement.protocol - api.HTMLAnchorElement.rel @@ -26,10 +25,8 @@ compat_features: - api.HTMLAnchorElement.type - api.HTMLAnchorElement.username - html.elements.a - - html.elements.a.download - html.elements.a.href - html.elements.a.hreflang - - html.elements.a.ping - html.elements.a.rel - html.elements.a.rel.noopener - html.elements.a.rel.noreferrer diff --git a/features/draft/html-elements/a.yml.dist b/features/a.yml.dist similarity index 72% rename from features/draft/html-elements/a.yml.dist rename to features/a.yml.dist index 8e6bdb97427..05b379d0170 100644 --- a/features/draft/html-elements/a.yml.dist +++ b/features/a.yml.dist @@ -2,14 +2,19 @@ # Do not edit this file by hand. Edit the source file instead! status: - baseline: false + baseline: high + baseline_low_date: 2015-07-29 + baseline_high_date: 2018-01-29 support: - chrome: "65" - chrome_android: "65" - edge: "79" - safari: "10.1" - safari_ios: "13" + chrome: "1" + chrome_android: "18" + edge: "12" + firefox: "1" + firefox_android: "4" + safari: "1" + safari_ios: "1" compat_features: + # ⬇️ Same status as overall feature ⬇️ # baseline: high # baseline_low_date: 2015-07-29 # baseline_high_date: 2018-01-29 @@ -68,19 +73,6 @@ compat_features: # safari_ios: "1" - api.HTMLAnchorElement.toString - # baseline: high - # baseline_low_date: 2017-03-27 - # baseline_high_date: 2019-09-27 - # support: - # chrome: "15" - # chrome_android: "18" - # edge: "13" - # firefox: "20" - # firefox_android: "20" - # safari: "10.1" - # safari_ios: "10.3" - - api.HTMLAnchorElement.download - # baseline: high # baseline_low_date: 2018-04-30 # baseline_high_date: 2020-10-30 @@ -107,19 +99,6 @@ compat_features: # safari_ios: "9" - api.HTMLAnchorElement.relList - # baseline: high - # baseline_low_date: 2019-09-19 - # baseline_high_date: 2022-03-19 - # support: - # chrome: "14" - # chrome_android: "18" - # edge: "18" - # firefox: "20" - # firefox_android: "20" - # safari: "10.1" - # safari_ios: "13" - - html.elements.a.download - # baseline: high # baseline_low_date: 2020-01-15 # baseline_high_date: 2022-07-15 @@ -146,21 +125,3 @@ compat_features: # safari: "10.1" # safari_ios: "10.3" - html.elements.a.rel.noopener - - # baseline: false - # support: - # chrome: "12" - # chrome_android: "18" - # edge: "17" - # safari: "5.1" - # safari_ios: "5" - - api.HTMLAnchorElement.ping - - # baseline: false - # support: - # chrome: "12" - # chrome_android: "18" - # edge: "17" - # safari: "6" - # safari_ios: "6" - - html.elements.a.ping diff --git a/features/abbr.yml b/features/abbr.yml index c769c2f8ba8..850d76df849 100644 --- a/features/abbr.yml +++ b/features/abbr.yml @@ -1,6 +1,6 @@ name: description: The `` HTML element represents an abbreviation or acronym. spec: https://html.spec.whatwg.org/multipage/text-level-semantics.html#the-abbr-element -group: html +group: html-elements compat_features: - html.elements.abbr diff --git a/features/accelerometer.yml b/features/accelerometer.yml index ba5713d5252..a28882a4906 100644 --- a/features/accelerometer.yml +++ b/features/accelerometer.yml @@ -2,6 +2,8 @@ name: Accelerometer description: The `Accelerometer` and `LinearAccelerationSensor` APIs read the acceleration applied to a device in three dimensions, either including the effect of gravity or not, respectively. spec: https://w3c.github.io/accelerometer/#accelerometer-interface group: sensors +status: + compute_from: api.Accelerometer.Accelerometer compat_features: - api.Accelerometer - api.Accelerometer.Accelerometer @@ -11,5 +13,4 @@ compat_features: - api.LinearAccelerationSensor - api.LinearAccelerationSensor.LinearAccelerationSensor - api.Permissions.permission_accelerometer - # Later addition - # - http.headers.Permissions-Policy.accelerometer + - http.headers.Permissions-Policy.accelerometer diff --git a/features/accelerometer.yml.dist b/features/accelerometer.yml.dist index 731e0cb1084..547ca1130bc 100644 --- a/features/accelerometer.yml.dist +++ b/features/accelerometer.yml.dist @@ -28,3 +28,10 @@ compat_features: - api.Accelerometer.z - api.LinearAccelerationSensor - api.LinearAccelerationSensor.LinearAccelerationSensor + + # baseline: false + # support: + # chrome: "88" + # chrome_android: "88" + # edge: "88" + - http.headers.Permissions-Policy.accelerometer diff --git a/features/draft/html-elements/address.yml b/features/address.yml similarity index 50% rename from features/draft/html-elements/address.yml rename to features/address.yml index 23dc281a562..acf75e7d19f 100644 --- a/features/draft/html-elements/address.yml +++ b/features/address.yml @@ -1,7 +1,6 @@ -draft_date: 2024-06-05 name:
-description: The `
` element TODO. +description: The `
` element represents contact information for a person or people, or for an organization. spec: https://html.spec.whatwg.org/multipage/sections.html#the-address-element -group: html +group: html-elements compat_features: - html.elements.address diff --git a/features/draft/html-elements/address.yml.dist b/features/address.yml.dist similarity index 100% rename from features/draft/html-elements/address.yml.dist rename to features/address.yml.dist diff --git a/features/anchor-positioning.yml.dist b/features/anchor-positioning.yml.dist index d834b59f8e9..97ec85f00a0 100644 --- a/features/anchor-positioning.yml.dist +++ b/features/anchor-positioning.yml.dist @@ -24,14 +24,12 @@ compat_features: - api.CSSPositionTryDescriptors.inline-size - api.CSSPositionTryDescriptors.inlineSize - api.CSSPositionTryDescriptors.inset - - api.CSSPositionTryDescriptors.inset-area - api.CSSPositionTryDescriptors.inset-block - api.CSSPositionTryDescriptors.inset-block-end - api.CSSPositionTryDescriptors.inset-block-start - api.CSSPositionTryDescriptors.inset-inline - api.CSSPositionTryDescriptors.inset-inline-end - api.CSSPositionTryDescriptors.inset-inline-start - - api.CSSPositionTryDescriptors.insetArea - api.CSSPositionTryDescriptors.insetBlock - api.CSSPositionTryDescriptors.insetBlockEnd - api.CSSPositionTryDescriptors.insetBlockStart @@ -173,6 +171,8 @@ compat_features: # baseline: false # support: {} + - api.CSSPositionTryDescriptors.position-area + - api.CSSPositionTryDescriptors.positionArea - css.properties.position-anchor.auto - css.properties.position-try-fallbacks - css.properties.position-try-fallbacks.flip-block diff --git a/features/article.yml b/features/article.yml new file mode 100644 index 00000000000..5fac9bb3c4a --- /dev/null +++ b/features/article.yml @@ -0,0 +1,8 @@ +name:
+description: The `
` element represents self-contained content, which is intended to be independently distributable or reusable, such as a comment, a blog post, or news article. +spec: https://html.spec.whatwg.org/multipage/sections.html#the-article-element +group: html-elements +# Note:
is part of https://caniuse.com/html5semantic but that feature +# covers many unrelated elements and is therefore not linked here. +compat_features: + - html.elements.article diff --git a/features/draft/html-elements/article.yml.dist b/features/article.yml.dist similarity index 100% rename from features/draft/html-elements/article.yml.dist rename to features/article.yml.dist diff --git a/features/aside.yml b/features/aside.yml index e8a5170c732..3e0fb530377 100644 --- a/features/aside.yml +++ b/features/aside.yml @@ -1,6 +1,8 @@ name: