Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update amphtml spec to 2110152252000 #6651

Merged
merged 4 commits into from
Oct 19, 2021
Merged

Conversation

westonruter
Copy link
Member

@westonruter westonruter commented Oct 18, 2021

Previously #6530.

  • Run ./bin/amphtml-update.sh (lando ssh -c 'bash ./bin/amphtml-update.sh vendor/amphtml').
  • Examine diff for changelog.
  • Examine upstream diff to ensure nothing was missed.
  • Update spec generator as needed based on spec format changes.
  • Modify validating sanitizer based on changes to spec, if needed.
  • Add tests for key changes.

Changelog

  • Update spec generator script based on changes to bento flag in bundles.config.extensions.json.
  • Add amp-story-captions.
  • Allow elements on amp-story-page-attachment: amp-selector, datalist, fieldset, form, input, label, legend, meter, optgroup, option, output, progress, select, textarea.
  • Add attributes to amp-story-panning-media and enforce amp-img child.
  • Add Bento components: amp-embedly-card, amp-iframe, amp-mathml, amp-sidebar, amp-soundcloud, and amp-wordpress-embed.
  • Allow noscript[amp-noscript] > style, although the script sanitizer and style sanitizer aren't currently updated to persist it. See Add support for no-JS styling and noscript > style[amp-noscript] #6603.

Details

(
    PREV_VERSION=dc6cd22a52;
    THIS_VERSION=2110152252000;
    git checkout $THIS_VERSION;
    git diff $PREV_VERSION...$THIS_VERSION -w -- build-system/compile/bundles.config.extensions.json $( git ls-files | grep '.protoascii' );
    git checkout - > /dev/null
) | sed '/-#/d'
Diff dc6cd22...530a457
diff --git a/build-system/compile/bundles.config.extensions.json b/build-system/compile/bundles.config.extensions.json
index bedf31287f..c24d40329f 100644
--- a/build-system/compile/bundles.config.extensions.json
+++ b/build-system/compile/bundles.config.extensions.json
@@ -56,7 +56,7 @@
     "options": {
       "hasCss": true,
       "npm": true,
-      "wrapper": "bento"
+      "bento": true
     }
   },
   {
@@ -199,7 +199,7 @@
     "options": {
       "hasCss": true,
       "npm": true,
-      "wrapper": "bento"
+      "bento": true
     }
   },
   {
@@ -233,7 +233,7 @@
     "latestVersion": "0.1",
     "options": {
       "hasCss": true,
-      "wrapper": "bento"
+      "bento": true
     }
   },
   {
@@ -299,7 +299,8 @@
     "latestVersion": "0.1",
     "options": {
       "npm": true,
-      "wrapper": "bento"
+      "bento": true,
+      "hasCss": true
     }
   },
   {
@@ -313,7 +314,8 @@
     "latestVersion": "0.1",
     "options": {
       "npm": true,
-      "wrapper": "bento"
+      "bento": true,
+      "hasCss": true
     }
   },
   {
@@ -347,8 +349,9 @@
     "version": "1.0",
     "latestVersion": "0.1",
     "options": {
+      "hasCss": true,
       "npm": true,
-      "wrappers": "bento"
+      "bento": true
     }
   },
   {
@@ -371,7 +374,7 @@
     "options": {
       "hasCss": true,
       "npm": true,
-      "wrapper": "bento"
+      "bento": true
     }
   },
   {
@@ -404,7 +407,7 @@
     "options": {
       "hasCss": true,
       "npm": true,
-      "wrapper": "bento"
+      "bento": true
     }
   },
   {
@@ -476,7 +479,9 @@
     "version": "1.0",
     "latestVersion": "0.1",
     "options": {
-      "wrapper": "bento"
+      "hasCss": true,
+      "npm": true,
+      "bento": true
     }
   },
   {
@@ -543,7 +548,7 @@
         "amp-inline-gallery-pagination"
       ],
       "npm": true,
-      "wrapper": "bento"
+      "bento": true
     }
   },
   {
@@ -566,7 +571,7 @@
     "options": {
       "hasCss": true,
       "npm": true,
-      "wrapper": "bento"
+      "bento": true
     }
   },
   {
@@ -589,6 +594,16 @@
     "version": "0.1",
     "latestVersion": "0.1"
   },
+  {
+    "name": "amp-jwplayer",
+    "version": "1.0",
+    "latestVersion": "0.1",
+    "options": {
+      "hasCss": true,
+      "bento": true,
+      "npm": true
+    }
+  },
   {
     "name": "amp-kaltura-player",
     "version": "0.1",
@@ -609,7 +624,7 @@
     "options": {
       "hasCss": true,
       "npm": true,
-      "wrapper": "bento"
+      "bento": true
     }
   },
   {
@@ -627,7 +642,7 @@
     "options": {
       "hasCss": true,
       "npm": true,
-      "wrapper": "bento"
+      "bento": true
     }
   },
   {
@@ -667,6 +682,16 @@
       "hasCss": true
     }
   },
+  {
+    "name": "amp-mathml",
+    "version": "1.0",
+    "latestVersion": "0.1",
+    "options": {
+      "hasCss": true,
+      "bento": true,
+      "npm": true
+    }
+  },
   {
     "name": "amp-mega-menu",
     "version": "0.1",
@@ -812,7 +837,7 @@
     "version": "1.0",
     "latestVersion": "1.0",
     "options": {
-      "wrapper": "bento"
+      "bento": true
     }
   },
   {
@@ -848,7 +873,7 @@
     "options": {
       "hasCss": true,
       "npm": true,
-      "wrapper": "bento"
+      "bento": true
     }
   },
   {
@@ -876,7 +901,8 @@
     "latestVersion": "0.1",
     "options": {
       "hasCss": true,
-      "wrapper": "bento"
+      "npm": true,
+      "bento": true
     }
   },
   {
@@ -911,7 +937,7 @@
     "options": {
       "hasCss": true,
       "npm": true,
-      "wrapper": "bento"
+      "bento": true
     }
   },
   {
@@ -924,8 +950,9 @@
     "version": "1.0",
     "latestVersion": "0.1",
     "options": {
+      "hasCss": true,
       "npm": true,
-      "wrappers": "bento"
+      "bento": true
     }
   },
   {
@@ -955,6 +982,7 @@
       "cssBinaries": [
         "amp-story-consent",
         "amp-story-draggable-drawer-header",
+        "amp-story-form",
         "amp-story-hint",
         "amp-story-info-dialog",
         "amp-story-open-page-attachment",
@@ -962,8 +990,7 @@
         "amp-story-share-menu",
         "amp-story-system-layer",
         "amp-story-tooltip",
-        "amp-story-unsupported-browser-layer",
-        "amp-story-viewport-warning-layer"
+        "amp-story-unsupported-browser-layer"
       ]
     }
   },
@@ -996,6 +1023,14 @@
     "version": "0.1",
     "latestVersion": "0.1"
   },
+  {
+    "name": "amp-story-captions",
+    "version": "0.1",
+    "latestVersion": "0.1",
+    "options": {
+      "hasCss": true
+    }
+  },
   {
     "name": "amp-story-dev-tools",
     "version": "0.1",
@@ -1063,7 +1098,7 @@
     "options": {
       "hasCss": true,
       "npm": true,
-      "wrapper": "bento"
+      "bento": true
     }
   },
   {
@@ -1102,7 +1137,7 @@
     "options": {
       "hasCss": true,
       "npm": true,
-      "wrapper": "bento"
+      "bento": true
     }
   },
   {
@@ -1129,7 +1164,7 @@
     "options": {
       "hasCss": true,
       "npm": true,
-      "wrapper": "bento"
+      "bento": true
     }
   },
   {
@@ -1151,7 +1186,8 @@
     "latestVersion": "0.1",
     "options": {
       "hasCss": true,
-      "wrapper": "bento"
+      "npm": true,
+      "bento": true
     }
   },
   {
@@ -1174,7 +1210,7 @@
     "options": {
       "hasCss": true,
       "npm": true,
-      "wrapper": "bento"
+      "bento": true
     }
   },
   {
@@ -1201,7 +1237,7 @@
     "options": {
       "hasCss": true,
       "npm": true,
-      "wrapper": "bento"
+      "bento": true
     }
   },
   {
@@ -1237,8 +1273,9 @@
     "version": "1.0",
     "latestVersion": "1.0",
     "options": {
+      "hasCss": true,
       "npm": true,
-      "wrappers": "bento"
+      "bento": true
     }
   },
   {
@@ -1258,7 +1295,7 @@
     "options": {
       "hasCss": true,
       "npm": true,
-      "wrapper": "bento"
+      "bento": true
     }
   }
 ]
diff --git a/build-system/tasks/make-extension/template/shared/extensions/amp-__component_name_hyphenated__/__validator__-amp-__component_name_hyphenated__.protoascii b/build-system/tasks/make-extension/template/shared/extensions/amp-__component_name_hyphenated__/__validator__-amp-__component_name_hyphenated__.protoascii
index e52970efc3..8fd1aa7a9b 100644
--- a/build-system/tasks/make-extension/template/shared/extensions/amp-__component_name_hyphenated__/__validator__-amp-__component_name_hyphenated__.protoascii
+++ b/build-system/tasks/make-extension/template/shared/extensions/amp-__component_name_hyphenated__/__validator__-amp-__component_name_hyphenated__.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-__component_name_hyphenated__
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-3d-gltf/validator-amp-3d-gltf.protoascii b/extensions/amp-3d-gltf/validator-amp-3d-gltf.protoascii
index 5c38067e32..327378c20d 100644
--- a/extensions/amp-3d-gltf/validator-amp-3d-gltf.protoascii
+++ b/extensions/amp-3d-gltf/validator-amp-3d-gltf.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-3d-gltf
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-3q-player/validator-amp-3q-player.protoascii b/extensions/amp-3q-player/validator-amp-3q-player.protoascii
index 9db22d96a3..cca96c7e46 100644
--- a/extensions/amp-3q-player/validator-amp-3q-player.protoascii
+++ b/extensions/amp-3q-player/validator-amp-3q-player.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-3q-player
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-access-laterpay/validator-amp-access-laterpay.protoascii b/extensions/amp-access-laterpay/validator-amp-access-laterpay.protoascii
index 01626be50a..2a59f8bd0b 100644
--- a/extensions/amp-access-laterpay/validator-amp-access-laterpay.protoascii
+++ b/extensions/amp-access-laterpay/validator-amp-access-laterpay.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-access-laterpay
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-access-poool/validator-amp-access-poool.protoascii b/extensions/amp-access-poool/validator-amp-access-poool.protoascii
index 1e9dbae455..ff267b772c 100644
--- a/extensions/amp-access-poool/validator-amp-access-poool.protoascii
+++ b/extensions/amp-access-poool/validator-amp-access-poool.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-access-poool
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-access-scroll/validator-amp-access-scroll.protoascii b/extensions/amp-access-scroll/validator-amp-access-scroll.protoascii
index 6a2e63e414..cf5124bbdd 100644
--- a/extensions/amp-access-scroll/validator-amp-access-scroll.protoascii
+++ b/extensions/amp-access-scroll/validator-amp-access-scroll.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-access-scroll
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-access/validator-amp-access.protoascii b/extensions/amp-access/validator-amp-access.protoascii
index 4d4478b53a..aa9980ea2a 100644
--- a/extensions/amp-access/validator-amp-access.protoascii
+++ b/extensions/amp-access/validator-amp-access.protoascii
@@ -1,18 +1,3 @@
 tags: {  # amp-access
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-accordion/validator-amp-accordion.protoascii b/extensions/amp-accordion/validator-amp-accordion.protoascii
index 98b5b3e62a..e0b5a9739e 100644
--- a/extensions/amp-accordion/validator-amp-accordion.protoascii
+++ b/extensions/amp-accordion/validator-amp-accordion.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-accordion for websites
   html_format: AMP
   tag_name: "SCRIPT"
@@ -23,6 +7,7 @@ tags: {  # amp-accordion for websites
     name: "amp-accordion"
     version_name: "v1.0"
     version: "1.0"
+    bento_supported_version: "1.0"
   }
   attr_lists: "common-extension-attrs"
 }
diff --git a/extensions/amp-action-macro/validator-amp-action-macro.protoascii b/extensions/amp-action-macro/validator-amp-action-macro.protoascii
index 22a34c3efe..0db96346bb 100644
--- a/extensions/amp-action-macro/validator-amp-action-macro.protoascii
+++ b/extensions/amp-action-macro/validator-amp-action-macro.protoascii
@@ -1,18 +1,3 @@
 tags: {  # amp-action-macro
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-ad-custom/validator-amp-ad-custom.protoascii b/extensions/amp-ad-custom/validator-amp-ad-custom.protoascii
index c6e5528bc0..354f0e3310 100644
--- a/extensions/amp-ad-custom/validator-amp-ad-custom.protoascii
+++ b/extensions/amp-ad-custom/validator-amp-ad-custom.protoascii
@@ -1,18 +1,3 @@
-
 tags: {  # amp-ad-custom
   html_format: AMP  # AMP only as ads are not allowed inside AMP Ads
   tag_name: "SCRIPT"
diff --git a/extensions/amp-ad-exit/validator-amp-ad-exit.protoascii b/extensions/amp-ad-exit/validator-amp-ad-exit.protoascii
index d31e7d12b2..3e8ea5d6a9 100644
--- a/extensions/amp-ad-exit/validator-amp-ad-exit.protoascii
+++ b/extensions/amp-ad-exit/validator-amp-ad-exit.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-ad-exit
   html_format: AMP4ADS
   tag_name: "SCRIPT"
diff --git a/extensions/amp-ad/validator-amp-ad.protoascii b/extensions/amp-ad/validator-amp-ad.protoascii
index c49c96627a..d1e4f9f432 100644
--- a/extensions/amp-ad/validator-amp-ad.protoascii
+++ b/extensions/amp-ad/validator-amp-ad.protoascii
@@ -1,18 +1,3 @@
-
 # AMP-AD is full of special cases for validation rules that are partly
 # implemented in code, so be very careful when editing this file.
 # Historically, amp-ad/amp-embed javascript were embedded into the main
@@ -109,7 +94,7 @@ tags: {  # <amp-ad type="custom">
     dispatch_key: NAME_VALUE_DISPATCH
   }
   attr_lists: "extended-amp-global"
-  spec_url: "https://github.com/ampproject/amphtml/blob/main/ads/custom.md"
+  spec_url: "https://github.com/ampproject/amphtml/blob/main/ads/vendors/custom.md"
   amp_layout: {
     supported_layouts: FILL
     supported_layouts: FIXED
diff --git a/extensions/amp-addthis/validator-amp-addthis.protoascii b/extensions/amp-addthis/validator-amp-addthis.protoascii
index b1c1c3ff1d..7698f97eaf 100644
--- a/extensions/amp-addthis/validator-amp-addthis.protoascii
+++ b/extensions/amp-addthis/validator-amp-addthis.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-addthis
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-analytics/validator-amp-analytics.protoascii b/extensions/amp-analytics/validator-amp-analytics.protoascii
index 59b3042efc..bf2c82af4b 100644
--- a/extensions/amp-analytics/validator-amp-analytics.protoascii
+++ b/extensions/amp-analytics/validator-amp-analytics.protoascii
@@ -1,19 +1,3 @@
-
 # Specific script tags for custom elements and runtime imports.
 tags: {  # amp-analytics
   html_format: AMP
diff --git a/extensions/amp-anim/validator-amp-anim.protoascii b/extensions/amp-anim/validator-amp-anim.protoascii
index d842fdec6c..a9132f525a 100644
--- a/extensions/amp-anim/validator-amp-anim.protoascii
+++ b/extensions/amp-anim/validator-amp-anim.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-anim
   html_format: AMP
   html_format: AMP4ADS
diff --git a/extensions/amp-animation/validator-amp-animation.protoascii b/extensions/amp-animation/validator-amp-animation.protoascii
index 0fce911925..27b1884616 100644
--- a/extensions/amp-animation/validator-amp-animation.protoascii
+++ b/extensions/amp-animation/validator-amp-animation.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-animation
   html_format: AMP
   html_format: AMP4ADS
diff --git a/extensions/amp-apester-media/validator-amp-apester-media.protoascii b/extensions/amp-apester-media/validator-amp-apester-media.protoascii
index 30dbb269df..bc4a0e71c0 100644
--- a/extensions/amp-apester-media/validator-amp-apester-media.protoascii
+++ b/extensions/amp-apester-media/validator-amp-apester-media.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-apester-media
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-app-banner/validator-amp-app-banner.protoascii b/extensions/amp-app-banner/validator-amp-app-banner.protoascii
index 47b766cadf..b1517a408b 100644
--- a/extensions/amp-app-banner/validator-amp-app-banner.protoascii
+++ b/extensions/amp-app-banner/validator-amp-app-banner.protoascii
@@ -1,18 +1,3 @@
 tags: {  # <script custom-element="amp-sticky-ad">
   html_format: AMP  # Ads are not allowed inside ads.
   tag_name: "SCRIPT"
diff --git a/extensions/amp-audio/validator-amp-audio.protoascii b/extensions/amp-audio/validator-amp-audio.protoascii
index a489a0dfc4..5c43088f78 100644
--- a/extensions/amp-audio/validator-amp-audio.protoascii
+++ b/extensions/amp-audio/validator-amp-audio.protoascii
@@ -1,18 +1,3 @@
 tags: {  # amp-audio
   html_format: AMP
   html_format: AMP4ADS
diff --git a/extensions/amp-auto-ads/validator-amp-auto-ads.protoascii b/extensions/amp-auto-ads/validator-amp-auto-ads.protoascii
index 08b1bdb8a6..5b43e98dde 100644
--- a/extensions/amp-auto-ads/validator-amp-auto-ads.protoascii
+++ b/extensions/amp-auto-ads/validator-amp-auto-ads.protoascii
@@ -1,18 +1,3 @@
-
 tags: {  # amp-auto-ads
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-autocomplete/validator-amp-autocomplete.protoascii b/extensions/amp-autocomplete/validator-amp-autocomplete.protoascii
index 55b28076d1..d016d97155 100644
--- a/extensions/amp-autocomplete/validator-amp-autocomplete.protoascii
+++ b/extensions/amp-autocomplete/validator-amp-autocomplete.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-autocomplete
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-base-carousel/validator-amp-base-carousel.protoascii b/extensions/amp-base-carousel/validator-amp-base-carousel.protoascii
index 0e6529ac48..8a597cdff9 100644
--- a/extensions/amp-base-carousel/validator-amp-base-carousel.protoascii
+++ b/extensions/amp-base-carousel/validator-amp-base-carousel.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-base-carousel
   html_format: AMP
   tag_name: "SCRIPT"
@@ -22,6 +6,7 @@ tags: {  # amp-base-carousel
     version: "0.1"
     version: "1.0"
     version: "latest"
+    bento_supported_version: "1.0"
   }
   attr_lists: "common-extension-attrs"
 }
diff --git a/extensions/amp-beopinion/validator-amp-beopinion.protoascii b/extensions/amp-beopinion/validator-amp-beopinion.protoascii
index 7f8abcf928..9faa62d790 100644
--- a/extensions/amp-beopinion/validator-amp-beopinion.protoascii
+++ b/extensions/amp-beopinion/validator-amp-beopinion.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-beopinion
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-bind/validator-amp-bind.protoascii b/extensions/amp-bind/validator-amp-bind.protoascii
index 2e06287796..1d2cb4570d 100644
--- a/extensions/amp-bind/validator-amp-bind.protoascii
+++ b/extensions/amp-bind/validator-amp-bind.protoascii
@@ -1,18 +1,3 @@
 tags: {  # amp-bind
   html_format: AMP
   html_format: AMP4ADS
diff --git a/extensions/amp-bodymovin-animation/validator-amp-bodymovin-animation.protoascii b/extensions/amp-bodymovin-animation/validator-amp-bodymovin-animation.protoascii
index 5d9e022ac3..8bdb950b13 100644
--- a/extensions/amp-bodymovin-animation/validator-amp-bodymovin-animation.protoascii
+++ b/extensions/amp-bodymovin-animation/validator-amp-bodymovin-animation.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-bodymovin-animation
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-brid-player/validator-amp-brid-player.protoascii b/extensions/amp-brid-player/validator-amp-brid-player.protoascii
index a569c3ca79..a6b07e7095 100644
--- a/extensions/amp-brid-player/validator-amp-brid-player.protoascii
+++ b/extensions/amp-brid-player/validator-amp-brid-player.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-brid-player
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-brightcove/validator-amp-brightcove.protoascii b/extensions/amp-brightcove/validator-amp-brightcove.protoascii
index 225f4f9813..5142e25c10 100644
--- a/extensions/amp-brightcove/validator-amp-brightcove.protoascii
+++ b/extensions/amp-brightcove/validator-amp-brightcove.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-brightcove 1.0
   html_format: AMP
   tag_name: "SCRIPT"
@@ -23,6 +7,7 @@ tags: {  # amp-brightcove 1.0
     name: "amp-brightcove"
     version_name: "v1.0"
     version: "1.0"
+    bento_supported_version: "1.0"
   }
   attr_lists: "common-extension-attrs"
 }
diff --git a/extensions/amp-byside-content/validator-amp-byside-content.protoascii b/extensions/amp-byside-content/validator-amp-byside-content.protoascii
index cae350ced4..bc2b837cca 100644
--- a/extensions/amp-byside-content/validator-amp-byside-content.protoascii
+++ b/extensions/amp-byside-content/validator-amp-byside-content.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-byside-content
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-cache-url/validator-amp-cache-url.protoascii b/extensions/amp-cache-url/validator-amp-cache-url.protoascii
index 34d3667b74..2ac145e8e0 100644
--- a/extensions/amp-cache-url/validator-amp-cache-url.protoascii
+++ b/extensions/amp-cache-url/validator-amp-cache-url.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-cache-url
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-call-tracking/validator-amp-call-tracking.protoascii b/extensions/amp-call-tracking/validator-amp-call-tracking.protoascii
index 128183afef..f858aaeace 100644
--- a/extensions/amp-call-tracking/validator-amp-call-tracking.protoascii
+++ b/extensions/amp-call-tracking/validator-amp-call-tracking.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-call-tracking
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-carousel/validator-amp-carousel.protoascii b/extensions/amp-carousel/validator-amp-carousel.protoascii
index 897aad1767..82bcd69a51 100644
--- a/extensions/amp-carousel/validator-amp-carousel.protoascii
+++ b/extensions/amp-carousel/validator-amp-carousel.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-carousel
   html_format: AMP
   html_format: AMP4ADS
diff --git a/extensions/amp-connatix-player/validator-amp-connatix-player.protoascii b/extensions/amp-connatix-player/validator-amp-connatix-player.protoascii
index 62e45b9742..8c59e1a6ab 100644
--- a/extensions/amp-connatix-player/validator-amp-connatix-player.protoascii
+++ b/extensions/amp-connatix-player/validator-amp-connatix-player.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-connatix-player
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-consent/validator-amp-consent.protoascii b/extensions/amp-consent/validator-amp-consent.protoascii
index 8b688a2934..9c0d7e321e 100644
--- a/extensions/amp-consent/validator-amp-consent.protoascii
+++ b/extensions/amp-consent/validator-amp-consent.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-consent
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-dailymotion/validator-amp-dailymotion.protoascii b/extensions/amp-dailymotion/validator-amp-dailymotion.protoascii
index ca2a7249c0..336b9bd8e4 100644
--- a/extensions/amp-dailymotion/validator-amp-dailymotion.protoascii
+++ b/extensions/amp-dailymotion/validator-amp-dailymotion.protoascii
@@ -1,18 +1,3 @@
 tags: {  # amp-dailymotion
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-date-countdown/validator-amp-date-countdown.protoascii b/extensions/amp-date-countdown/validator-amp-date-countdown.protoascii
index c0ab10a195..ea72e6fe5f 100644
--- a/extensions/amp-date-countdown/validator-amp-date-countdown.protoascii
+++ b/extensions/amp-date-countdown/validator-amp-date-countdown.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-date-countdown
   html_format: AMP
   tag_name: "SCRIPT"
@@ -22,6 +6,7 @@ tags: {  # amp-date-countdown
     version: "0.1"
     version: "1.0"
     version: "latest"
+    bento_supported_version: "1.0"
   }
   attr_lists: "common-extension-attrs"
 }
diff --git a/extensions/amp-date-display/validator-amp-date-display.protoascii b/extensions/amp-date-display/validator-amp-date-display.protoascii
index c4f62ee96d..ef60c3a93b 100644
--- a/extensions/amp-date-display/validator-amp-date-display.protoascii
+++ b/extensions/amp-date-display/validator-amp-date-display.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-date-display
   html_format: AMP
   tag_name: "SCRIPT"
@@ -22,6 +6,7 @@ tags: {  # amp-date-display
     version: "0.1"
     version: "1.0"
     version: "latest"
+    bento_supported_version: "1.0"
   }
   attr_lists: "common-extension-attrs"
 }
diff --git a/extensions/amp-date-picker/validator-amp-date-picker.protoascii b/extensions/amp-date-picker/validator-amp-date-picker.protoascii
index a68f13101c..d0cfd6b439 100644
--- a/extensions/amp-date-picker/validator-amp-date-picker.protoascii
+++ b/extensions/amp-date-picker/validator-amp-date-picker.protoascii
@@ -1,19 +1,3 @@
-
 tags: {
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-delight-player/validator-amp-delight-player.protoascii b/extensions/amp-delight-player/validator-amp-delight-player.protoascii
index 39d56c37d2..9568418f74 100644
--- a/extensions/amp-delight-player/validator-amp-delight-player.protoascii
+++ b/extensions/amp-delight-player/validator-amp-delight-player.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-delight-player
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-dynamic-css-classes/validator-amp-dynamic-css-classes.protoascii b/extensions/amp-dynamic-css-classes/validator-amp-dynamic-css-classes.protoascii
index d2bba055f1..f098421b96 100644
--- a/extensions/amp-dynamic-css-classes/validator-amp-dynamic-css-classes.protoascii
+++ b/extensions/amp-dynamic-css-classes/validator-amp-dynamic-css-classes.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-dynamic-css-classes
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-embedly-card/validator-amp-embedly-card.protoascii b/extensions/amp-embedly-card/validator-amp-embedly-card.protoascii
index ebf1d84831..d2e622c68c 100644
--- a/extensions/amp-embedly-card/validator-amp-embedly-card.protoascii
+++ b/extensions/amp-embedly-card/validator-amp-embedly-card.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # embedly-card
   html_format: AMP
   tag_name: "SCRIPT"
@@ -22,6 +6,7 @@ tags: {  # embedly-card
     version: "0.1"
     version: "1.0"
     version: "latest"
+    bento_supported_version: "1.0"
   }
   attr_lists: "common-extension-attrs"
 }
diff --git a/extensions/amp-experiment/validator-amp-experiment.protoascii b/extensions/amp-experiment/validator-amp-experiment.protoascii
index 7db7c9c47a..05157c76f8 100644
--- a/extensions/amp-experiment/validator-amp-experiment.protoascii
+++ b/extensions/amp-experiment/validator-amp-experiment.protoascii
@@ -1,19 +1,3 @@
-
 # Specific script tags for custom elements and runtime imports.
 tags: {  # amp-experiment
   html_format: AMP
diff --git a/extensions/amp-facebook-comments/validator-amp-facebook-comments.protoascii b/extensions/amp-facebook-comments/validator-amp-facebook-comments.protoascii
index 2e98c02721..328ebbb436 100644
--- a/extensions/amp-facebook-comments/validator-amp-facebook-comments.protoascii
+++ b/extensions/amp-facebook-comments/validator-amp-facebook-comments.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-facebook-comments
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-facebook-like/validator-amp-facebook-like.protoascii b/extensions/amp-facebook-like/validator-amp-facebook-like.protoascii
index 214109856b..913a4d6c6b 100644
--- a/extensions/amp-facebook-like/validator-amp-facebook-like.protoascii
+++ b/extensions/amp-facebook-like/validator-amp-facebook-like.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-facebook-like
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-facebook-page/validator-amp-facebook-page.protoascii b/extensions/amp-facebook-page/validator-amp-facebook-page.protoascii
index 70719c57ba..b6338f25a3 100644
--- a/extensions/amp-facebook-page/validator-amp-facebook-page.protoascii
+++ b/extensions/amp-facebook-page/validator-amp-facebook-page.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-facebook-page
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-facebook/validator-amp-facebook.protoascii b/extensions/amp-facebook/validator-amp-facebook.protoascii
index 526fcdaa5a..88fa688c19 100644
--- a/extensions/amp-facebook/validator-amp-facebook.protoascii
+++ b/extensions/amp-facebook/validator-amp-facebook.protoascii
@@ -1,20 +1,3 @@
-
-
 tags: {  # amp-facebook 1.0
   html_format: AMP
   tag_name: "SCRIPT"
@@ -30,6 +13,7 @@ tags: {  # amp-facebook 1.0
     name: "amp-facebook"
     version_name: "v1.0"
     version: "1.0"
+    bento_supported_version: "1.0"
   }
   attr_lists: "common-extension-attrs"
 }
diff --git a/extensions/amp-fit-text/validator-amp-fit-text.protoascii b/extensions/amp-fit-text/validator-amp-fit-text.protoascii
index afc0ff4902..e303db22b1 100644
--- a/extensions/amp-fit-text/validator-amp-fit-text.protoascii
+++ b/extensions/amp-fit-text/validator-amp-fit-text.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-fit-text 1.0
   html_format: AMP
   tag_name: "SCRIPT"
@@ -23,6 +7,7 @@ tags: {  # amp-fit-text 1.0
     name: "amp-fit-text"
     version_name: "v1.0"
     version: "1.0"
+    bento_supported_version: "1.0"
   }
   attr_lists: "common-extension-attrs"
 }
diff --git a/extensions/amp-font/validator-amp-font.protoascii b/extensions/amp-font/validator-amp-font.protoascii
index a774746515..be7bc2c6bc 100644
--- a/extensions/amp-font/validator-amp-font.protoascii
+++ b/extensions/amp-font/validator-amp-font.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-font
   html_format: AMP
   html_format: AMP4ADS
diff --git a/extensions/amp-form/validator-amp-form.protoascii b/extensions/amp-form/validator-amp-form.protoascii
index a34d056818..48b8b1f637 100644
--- a/extensions/amp-form/validator-amp-form.protoascii
+++ b/extensions/amp-form/validator-amp-form.protoascii
@@ -1,18 +1,3 @@
 tags: {  # amp-form
   # Accepted form elements can be found in validator-main.protoascii
   # under section "4.10 Forms"
diff --git a/extensions/amp-fx-collection/validator-amp-fx-collection.protoascii b/extensions/amp-fx-collection/validator-amp-fx-collection.protoascii
index 074bc03658..ece8d41249 100644
--- a/extensions/amp-fx-collection/validator-amp-fx-collection.protoascii
+++ b/extensions/amp-fx-collection/validator-amp-fx-collection.protoascii
@@ -1,18 +1,3 @@
 tags: {  # amp-fx-collection
   # Accepted amp-fx-collection attributes can be found in
   # validator-main.protoascii
diff --git a/extensions/amp-fx-flying-carpet/validator-amp-fx-flying-carpet.protoascii b/extensions/amp-fx-flying-carpet/validator-amp-fx-flying-carpet.protoascii
index 1b853a8625..cb76079d89 100644
--- a/extensions/amp-fx-flying-carpet/validator-amp-fx-flying-carpet.protoascii
+++ b/extensions/amp-fx-flying-carpet/validator-amp-fx-flying-carpet.protoascii
@@ -1,18 +1,3 @@
 tags: {  # <script custom-element="amp-fx-flying-carpet">
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-geo/validator-amp-geo.protoascii b/extensions/amp-geo/validator-amp-geo.protoascii
index 47dfac9321..1ef117ee39 100644
--- a/extensions/amp-geo/validator-amp-geo.protoascii
+++ b/extensions/amp-geo/validator-amp-geo.protoascii
@@ -1,19 +1,3 @@
-
 # Specific script tags for custom elements and runtime imports.
 tags: {  # amp-geo
   html_format: AMP
diff --git a/extensions/amp-gfycat/validator-amp-gfycat.protoascii b/extensions/amp-gfycat/validator-amp-gfycat.protoascii
index 38c657d4cd..a8ed1a56f3 100644
--- a/extensions/amp-gfycat/validator-amp-gfycat.protoascii
+++ b/extensions/amp-gfycat/validator-amp-gfycat.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-gfycat
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-gist/validator-amp-gist.protoascii b/extensions/amp-gist/validator-amp-gist.protoascii
index a7987896c8..ec3a55917c 100644
--- a/extensions/amp-gist/validator-amp-gist.protoascii
+++ b/extensions/amp-gist/validator-amp-gist.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-gist
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-google-document-embed/validator-amp-google-document-embed.protoascii b/extensions/amp-google-document-embed/validator-amp-google-document-embed.protoascii
index 97e981bd8b..a31943951d 100644
--- a/extensions/amp-google-document-embed/validator-amp-google-document-embed.protoascii
+++ b/extensions/amp-google-document-embed/validator-amp-google-document-embed.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-google-document-embed
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-gwd-animation/validator-amp-gwd-animation.protoascii b/extensions/amp-gwd-animation/validator-amp-gwd-animation.protoascii
index 387119c74e..f2132fd1fd 100644
--- a/extensions/amp-gwd-animation/validator-amp-gwd-animation.protoascii
+++ b/extensions/amp-gwd-animation/validator-amp-gwd-animation.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-gwd-animation
   html_format: AMP4ADS
   tag_name: "SCRIPT"
diff --git a/extensions/amp-hulu/validator-amp-hulu.protoascii b/extensions/amp-hulu/validator-amp-hulu.protoascii
index ad59e815e6..dda5e3fe68 100644
--- a/extensions/amp-hulu/validator-amp-hulu.protoascii
+++ b/extensions/amp-hulu/validator-amp-hulu.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-hulu
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-iframe/validator-amp-iframe.protoascii b/extensions/amp-iframe/validator-amp-iframe.protoascii
index c616abb5ff..d7446e26ba 100644
--- a/extensions/amp-iframe/validator-amp-iframe.protoascii
+++ b/extensions/amp-iframe/validator-amp-iframe.protoascii
@@ -1,24 +1,25 @@
+tags: {  # amp-iframe 1.0
+  html_format: AMP
+  tag_name: "SCRIPT"
+  satisfies: "amp-iframe 1.0"
+  excludes: "amp-iframe 0.1"
+  extension_spec: {
+    name: "amp-iframe"
+    version_name: "v1.0"
+    version: "1.0"
+    bento_supported_version: "1.0"
+  }
+  attr_lists: "common-extension-attrs"
+}
 
-tags: {  # amp-iframe
+tags: {  # amp-iframe 0.1 and latest
   html_format: AMP  # Iframes not allowed in ads.
   tag_name: "SCRIPT"
+  satisfies: "amp-iframe 0.1"
+  excludes: "amp-iframe 1.0"
   extension_spec: {
     name: "amp-iframe"
+    version_name: "v0.1"
     version: "0.1"
     version: "latest"
     requires_usage: EXEMPTED
@@ -26,6 +27,7 @@ tags: {  # amp-iframe
   }
   attr_lists: "common-extension-attrs"
 }
+
 tags: {  # <amp-iframe>
   html_format: AMP  # Iframes not allowed in ads.
   tag_name: "AMP-IFRAME"
diff --git a/extensions/amp-iframely/validator-amp-iframely.protoascii b/extensions/amp-iframely/validator-amp-iframely.protoascii
index 1917a18a9e..b490c479c0 100644
--- a/extensions/amp-iframely/validator-amp-iframely.protoascii
+++ b/extensions/amp-iframely/validator-amp-iframely.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-iframely
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-ima-video/validator-amp-ima-video.protoascii b/extensions/amp-ima-video/validator-amp-ima-video.protoascii
index 8689c01efc..43f880d9f6 100644
--- a/extensions/amp-ima-video/validator-amp-ima-video.protoascii
+++ b/extensions/amp-ima-video/validator-amp-ima-video.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-ima-video
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-image-lightbox/validator-amp-image-lightbox.protoascii b/extensions/amp-image-lightbox/validator-amp-image-lightbox.protoascii
index 62c0e8a898..23f46ed78f 100644
--- a/extensions/amp-image-lightbox/validator-amp-image-lightbox.protoascii
+++ b/extensions/amp-image-lightbox/validator-amp-image-lightbox.protoascii
@@ -1,18 +1,3 @@
 tags: {  # amp-image-lightbox
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-image-slider/validator-amp-image-slider.protoascii b/extensions/amp-image-slider/validator-amp-image-slider.protoascii
index a41808f4ad..79aea998ef 100644
--- a/extensions/amp-image-slider/validator-amp-image-slider.protoascii
+++ b/extensions/amp-image-slider/validator-amp-image-slider.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-image-slider
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-imgur/validator-amp-imgur.protoascii b/extensions/amp-imgur/validator-amp-imgur.protoascii
index 2290c61956..d84328aa0c 100644
--- a/extensions/amp-imgur/validator-amp-imgur.protoascii
+++ b/extensions/amp-imgur/validator-amp-imgur.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-imgur
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-inline-gallery/validator-amp-inline-gallery.protoascii b/extensions/amp-inline-gallery/validator-amp-inline-gallery.protoascii
index ac921ea96b..5cd20fab2a 100644
--- a/extensions/amp-inline-gallery/validator-amp-inline-gallery.protoascii
+++ b/extensions/amp-inline-gallery/validator-amp-inline-gallery.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-inline-gallery
   html_format: AMP
   tag_name: "SCRIPT"
@@ -22,6 +6,7 @@ tags: {  # amp-inline-gallery
     version: "0.1"
     version: "1.0"
     version: "latest"
+    bento_supported_version: "1.0"
   }
   attr_lists: "common-extension-attrs"
 }
diff --git a/extensions/amp-inputmask/validator-amp-inputmask.protoascii b/extensions/amp-inputmask/validator-amp-inputmask.protoascii
index 6d08dcfb93..c394588dfa 100644
--- a/extensions/amp-inputmask/validator-amp-inputmask.protoascii
+++ b/extensions/amp-inputmask/validator-amp-inputmask.protoascii
@@ -1,18 +1,3 @@
 tags: {  # amp-inputmask
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-instagram/validator-amp-instagram.protoascii b/extensions/amp-instagram/validator-amp-instagram.protoascii
index 13096a3aad..6fa93298f6 100644
--- a/extensions/amp-instagram/validator-amp-instagram.protoascii
+++ b/extensions/amp-instagram/validator-amp-instagram.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-instagram 1.0
   html_format: AMP
   tag_name: "SCRIPT"
@@ -23,6 +7,7 @@ tags: {  # amp-instagram 1.0
     name: "amp-instagram"
     version_name: "v1.0"
     version: "1.0"
+    bento_supported_version: "1.0"
   }
   attr_lists: "common-extension-attrs"
 }
diff --git a/extensions/amp-install-serviceworker/validator-amp-install-serviceworker.protoascii b/extensions/amp-install-serviceworker/validator-amp-install-serviceworker.protoascii
index 11b2116f5b..98d1076879 100644
--- a/extensions/amp-install-serviceworker/validator-amp-install-serviceworker.protoascii
+++ b/extensions/amp-install-serviceworker/validator-amp-install-serviceworker.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-install-serviceworker
   html_format: AMP  # Ads cannot install serviceworkers
   tag_name: "SCRIPT"
diff --git a/extensions/amp-izlesene/validator-amp-izlesene.protoascii b/extensions/amp-izlesene/validator-amp-izlesene.protoascii
index 4dc56f8198..a065eb8913 100644
--- a/extensions/amp-izlesene/validator-amp-izlesene.protoascii
+++ b/extensions/amp-izlesene/validator-amp-izlesene.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-izlesene
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-jwplayer/validator-amp-jwplayer.protoascii b/extensions/amp-jwplayer/validator-amp-jwplayer.protoascii
index 1638b2da5a..553ad9f5e7 100644
--- a/extensions/amp-jwplayer/validator-amp-jwplayer.protoascii
+++ b/extensions/amp-jwplayer/validator-amp-jwplayer.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-jwplayer
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-kaltura-player/validator-amp-kaltura-player.protoascii b/extensions/amp-kaltura-player/validator-amp-kaltura-player.protoascii
index 168f857a8a..c5891154d4 100644
--- a/extensions/amp-kaltura-player/validator-amp-kaltura-player.protoascii
+++ b/extensions/amp-kaltura-player/validator-amp-kaltura-player.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-kaltura-player
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-lightbox-gallery/validator-amp-lightbox-gallery.protoascii b/extensions/amp-lightbox-gallery/validator-amp-lightbox-gallery.protoascii
index 35481f5a80..0791874759 100644
--- a/extensions/amp-lightbox-gallery/validator-amp-lightbox-gallery.protoascii
+++ b/extensions/amp-lightbox-gallery/validator-amp-lightbox-gallery.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-lightbox-gallery
   html_format: AMP
   tag_name: "SCRIPT"
@@ -22,6 +6,7 @@ tags: {  # amp-lightbox-gallery
     version: "0.1"
     version: "1.0"
     version: "latest"
+    bento_supported_version: "1.0"
     requires_usage: NONE
   }
   attr_lists: "common-extension-attrs"
diff --git a/extensions/amp-lightbox/validator-amp-lightbox.protoascii b/extensions/amp-lightbox/validator-amp-lightbox.protoascii
index d5bea86b4b..29cc75b978 100644
--- a/extensions/amp-lightbox/validator-amp-lightbox.protoascii
+++ b/extensions/amp-lightbox/validator-amp-lightbox.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-lightbox 1.0
   html_format: AMP
   tag_name: "SCRIPT"
@@ -23,6 +7,7 @@ tags: {  # amp-lightbox 1.0
     name: "amp-lightbox"
     version_name: "v1.0"
     version: "1.0"
+    bento_supported_version: "1.0"
   }
   attr_lists: "common-extension-attrs"
 }
diff --git a/extensions/amp-link-rewriter/validator-amp-link-rewriter.protoascii b/extensions/amp-link-rewriter/validator-amp-link-rewriter.protoascii
index c2136ce2e1..d72dc42579 100644
--- a/extensions/amp-link-rewriter/validator-amp-link-rewriter.protoascii
+++ b/extensions/amp-link-rewriter/validator-amp-link-rewriter.protoascii
@@ -1,18 +1,3 @@
 tags: {  # amp-link-rewriter
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-list/validator-amp-list.protoascii b/extensions/amp-list/validator-amp-list.protoascii
index de73fe62a0..15e77a36f5 100644
--- a/extensions/amp-list/validator-amp-list.protoascii
+++ b/extensions/amp-list/validator-amp-list.protoascii
@@ -1,18 +1,3 @@
 tags: {  # amp-list
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-live-list/validator-amp-live-list.protoascii b/extensions/amp-live-list/validator-amp-live-list.protoascii
index 531fc21839..1329ddfbea 100644
--- a/extensions/amp-live-list/validator-amp-live-list.protoascii
+++ b/extensions/amp-live-list/validator-amp-live-list.protoascii
@@ -1,18 +1,3 @@
 tags: {  # amp-live-list
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-mathml/validator-amp-mathml.protoascii b/extensions/amp-mathml/validator-amp-mathml.protoascii
index 277d47aa7a..c6575e672d 100644
--- a/extensions/amp-mathml/validator-amp-mathml.protoascii
+++ b/extensions/amp-mathml/validator-amp-mathml.protoascii
@@ -1,26 +1,27 @@
+tags: {  # amp-mathml 1.0
+  html_format: AMP
+  tag_name: "SCRIPT"
+  satisfies: "amp-mathml 1.0"
+  excludes: "amp-mathml 0.1"
+  extension_spec: {
+    name: "amp-mathml"
+    version_name: "v1.0"
+    version: "1.0"
+    bento_supported_version: "1.0"
+  }
+  attr_lists: "common-extension-attrs"
+}
 
-tags: {  # amp-mathml
+tags: {  # amp-mathml 0.1
   html_format: AMP
   tag_name: "SCRIPT"
+  satisfies: "amp-mathml 0.1"
+  excludes: "amp-mathml 1.0"
   extension_spec: {
     name: "amp-mathml"
     version: "0.1"
     version: "latest"
+    version_name: "v0.1"
   }
   attr_lists: "common-extension-attrs"
 }
diff --git a/extensions/amp-mega-menu/validator-amp-mega-menu.protoascii b/extensions/amp-mega-menu/validator-amp-mega-menu.protoascii
index 0aba0d19b8..68755765b1 100644
--- a/extensions/amp-mega-menu/validator-amp-mega-menu.protoascii
+++ b/extensions/amp-mega-menu/validator-amp-mega-menu.protoascii
@@ -1,18 +1,3 @@
 tags: {  # amp-mega-menu
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-megaphone/validator-amp-megaphone.protoascii b/extensions/amp-megaphone/validator-amp-megaphone.protoascii
index 7f885a70ca..c7924a34b6 100644
--- a/extensions/amp-megaphone/validator-amp-megaphone.protoascii
+++ b/extensions/amp-megaphone/validator-amp-megaphone.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-megaphone
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-minute-media-player/validator-amp-minute-media-player.protoascii b/extensions/amp-minute-media-player/validator-amp-minute-media-player.protoascii
index bfda969222..c45544b398 100644
--- a/extensions/amp-minute-media-player/validator-amp-minute-media-player.protoascii
+++ b/extensions/amp-minute-media-player/validator-amp-minute-media-player.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-minute-media-player
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-mowplayer/validator-amp-mowplayer.protoascii b/extensions/amp-mowplayer/validator-amp-mowplayer.protoascii
index ac4fdf1b99..61123c01fb 100644
--- a/extensions/amp-mowplayer/validator-amp-mowplayer.protoascii
+++ b/extensions/amp-mowplayer/validator-amp-mowplayer.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-mowplayer
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-mraid/validator-amp-mraid.protoascii b/extensions/amp-mraid/validator-amp-mraid.protoascii
index 1d520270b0..c3defa6665 100644
--- a/extensions/amp-mraid/validator-amp-mraid.protoascii
+++ b/extensions/amp-mraid/validator-amp-mraid.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-mraid
   html_format: AMP4ADS
   tag_name: "SCRIPT"
diff --git a/extensions/amp-mustache/validator-amp-mustache.protoascii b/extensions/amp-mustache/validator-amp-mustache.protoascii
index c64acbe805..eb09c06455 100644
--- a/extensions/amp-mustache/validator-amp-mustache.protoascii
+++ b/extensions/amp-mustache/validator-amp-mustache.protoascii
@@ -1,19 +1,3 @@
-
 # Specific URL to reference for violations having to do with mustache
 # templates. These are specific to any particular tag, so must live at
 # the top level of this rules file.
diff --git a/extensions/amp-nested-menu/validator-amp-nested-menu.protoascii b/extensions/amp-nested-menu/validator-amp-nested-menu.protoascii
index ae8b0a1edb..8121a2ecfe 100644
--- a/extensions/amp-nested-menu/validator-amp-nested-menu.protoascii
+++ b/extensions/amp-nested-menu/validator-amp-nested-menu.protoascii
@@ -1,18 +1,3 @@
 tags: {  # amp-nested-menu
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-next-page/validator-amp-next-page.protoascii b/extensions/amp-next-page/validator-amp-next-page.protoascii
index 1bf35d8058..9a21938fbe 100644
--- a/extensions/amp-next-page/validator-amp-next-page.protoascii
+++ b/extensions/amp-next-page/validator-amp-next-page.protoascii
@@ -1,18 +1,3 @@
-
 tags: {  # amp-next-page
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-nexxtv-player/validator-amp-nexxtv-player.protoascii b/extensions/amp-nexxtv-player/validator-amp-nexxtv-player.protoascii
index 1635809625..b9c7a0434b 100644
--- a/extensions/amp-nexxtv-player/validator-amp-nexxtv-player.protoascii
+++ b/extensions/amp-nexxtv-player/validator-amp-nexxtv-player.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-nexxtv-player
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-o2-player/validator-amp-o2-player.protoascii b/extensions/amp-o2-player/validator-amp-o2-player.protoascii
index 07cd62b149..2dc5fc05ce 100644
--- a/extensions/amp-o2-player/validator-amp-o2-player.protoascii
+++ b/extensions/amp-o2-player/validator-amp-o2-player.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-o2-player
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-onetap-google/validator-amp-onetap-google.protoascii b/extensions/amp-onetap-google/validator-amp-onetap-google.protoascii
index fb12e89604..f6aea8f03e 100644
--- a/extensions/amp-onetap-google/validator-amp-onetap-google.protoascii
+++ b/extensions/amp-onetap-google/validator-amp-onetap-google.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-onetap-google
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-ooyala-player/validator-amp-ooyala-player.protoascii b/extensions/amp-ooyala-player/validator-amp-ooyala-player.protoascii
index 4b423aab74..022ee9c5e1 100644
--- a/extensions/amp-ooyala-player/validator-amp-ooyala-player.protoascii
+++ b/extensions/amp-ooyala-player/validator-amp-ooyala-player.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-ooyala-player
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-orientation-observer/validator-amp-orientation-observer.protoascii b/extensions/amp-orientation-observer/validator-amp-orientation-observer.protoascii
index f4966c17ed..c39b62cb9d 100644
--- a/extensions/amp-orientation-observer/validator-amp-orientation-observer.protoascii
+++ b/extensions/amp-orientation-observer/validator-amp-orientation-observer.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-orientation-observer
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-pan-zoom/validator-amp-pan-zoom.protoascii b/extensions/amp-pan-zoom/validator-amp-pan-zoom.protoascii
index cc1a5f4d75..3a84f80956 100644
--- a/extensions/amp-pan-zoom/validator-amp-pan-zoom.protoascii
+++ b/extensions/amp-pan-zoom/validator-amp-pan-zoom.protoascii
@@ -1,18 +1,3 @@
 tags: {  # amp-pan-zoom
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-pinterest/validator-amp-pinterest.protoascii b/extensions/amp-pinterest/validator-amp-pinterest.protoascii
index 52b6359d73..7d045a2bac 100644
--- a/extensions/amp-pinterest/validator-amp-pinterest.protoascii
+++ b/extensions/amp-pinterest/validator-amp-pinterest.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-pinterest
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-playbuzz/validator-amp-playbuzz.protoascii b/extensions/amp-playbuzz/validator-amp-playbuzz.protoascii
index 39c545e38f..8784b1844e 100644
--- a/extensions/amp-playbuzz/validator-amp-playbuzz.protoascii
+++ b/extensions/amp-playbuzz/validator-amp-playbuzz.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-playbuzz
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-position-observer/validator-amp-position-observer.protoascii b/extensions/amp-position-observer/validator-amp-position-observer.protoascii
index 773e3e185c..fb5e08b4b0 100644
--- a/extensions/amp-position-observer/validator-amp-position-observer.protoascii
+++ b/extensions/amp-position-observer/validator-amp-position-observer.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-position-observer
   html_format: AMP
   html_format: AMP4ADS
diff --git a/extensions/amp-powr-player/validator-amp-powr-player.protoascii b/extensions/amp-powr-player/validator-amp-powr-player.protoascii
index 6c6b3bab84..903b30625b 100644
--- a/extensions/amp-powr-player/validator-amp-powr-player.protoascii
+++ b/extensions/amp-powr-player/validator-amp-powr-player.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-powr-player
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-reach-player/validator-amp-reach-player.protoascii b/extensions/amp-reach-player/validator-amp-reach-player.protoascii
index 93a6ffd83d..c7071c27d3 100644
--- a/extensions/amp-reach-player/validator-amp-reach-player.protoascii
+++ b/extensions/amp-reach-player/validator-amp-reach-player.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-reach-player
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-recaptcha-input/validator-amp-recaptcha-input.protoascii b/extensions/amp-recaptcha-input/validator-amp-recaptcha-input.protoascii
index 6c85e083ad..6e6ad288bf 100644
--- a/extensions/amp-recaptcha-input/validator-amp-recaptcha-input.protoascii
+++ b/extensions/amp-recaptcha-input/validator-amp-recaptcha-input.protoascii
@@ -1,18 +1,3 @@
 tags: {  # amp-recaptcha-input
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-redbull-player/validator-amp-redbull-player.protoascii b/extensions/amp-redbull-player/validator-amp-redbull-player.protoascii
index 8ee98822d6..4998452253 100644
--- a/extensions/amp-redbull-player/validator-amp-redbull-player.protoascii
+++ b/extensions/amp-redbull-player/validator-amp-redbull-player.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-redbull-player
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-reddit/validator-amp-reddit.protoascii b/extensions/amp-reddit/validator-amp-reddit.protoascii
index c0101e5560..53f605e58d 100644
--- a/extensions/amp-reddit/validator-amp-reddit.protoascii
+++ b/extensions/amp-reddit/validator-amp-reddit.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-reddit
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-render/validator-amp-render.protoascii b/extensions/amp-render/validator-amp-render.protoascii
index 1e7214f314..abe1ef597f 100644
--- a/extensions/amp-render/validator-amp-render.protoascii
+++ b/extensions/amp-render/validator-amp-render.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-render
   html_format: AMP
   tag_name: "SCRIPT"
@@ -21,6 +5,7 @@ tags: {  # amp-render
     name: "amp-render"
     version: "1.0"
     version: "latest"
+    bento_supported_version: "1.0"
   }
   attr_lists: "common-extension-attrs"
 }
diff --git a/extensions/amp-riddle-quiz/validator-amp-riddle-quiz.protoascii b/extensions/amp-riddle-quiz/validator-amp-riddle-quiz.protoascii
index 0da6fde737..572b5b3889 100644
--- a/extensions/amp-riddle-quiz/validator-amp-riddle-quiz.protoascii
+++ b/extensions/amp-riddle-quiz/validator-amp-riddle-quiz.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-riddle-quiz
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-script/validator-amp-script.protoascii b/extensions/amp-script/validator-amp-script.protoascii
index 86e8572627..907e8ed9f4 100644
--- a/extensions/amp-script/validator-amp-script.protoascii
+++ b/extensions/amp-script/validator-amp-script.protoascii
@@ -1,19 +1,3 @@
-
 tags: {
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-selector/validator-amp-selector.protoascii b/extensions/amp-selector/validator-amp-selector.protoascii
index 0b4700719e..2dd9d59312 100644
--- a/extensions/amp-selector/validator-amp-selector.protoascii
+++ b/extensions/amp-selector/validator-amp-selector.protoascii
@@ -1,18 +1,3 @@
 tags: {  # amp-selector 1.0
   html_format: AMP
   tag_name: "SCRIPT"
@@ -22,6 +7,7 @@ tags: {  # amp-selector 1.0
     name: "amp-selector"
     version_name: "v1.0"
     version: "1.0"
+    bento_supported_version: "1.0"
   }
   attr_lists: "common-extension-attrs"
 }
diff --git a/extensions/amp-sidebar/validator-amp-sidebar.protoascii b/extensions/amp-sidebar/validator-amp-sidebar.protoascii
index e8ee12f042..b917ce009b 100644
--- a/extensions/amp-sidebar/validator-amp-sidebar.protoascii
+++ b/extensions/amp-sidebar/validator-amp-sidebar.protoascii
@@ -1,23 +1,24 @@
 tags: {  # amp-sidebar
   html_format: AMP
   tag_name: "SCRIPT"
+  satisfies: "amp-sidebar 1.0"
+  excludes: "amp-sidebar 0.1"
   extension_spec: {
     name: "amp-sidebar"
+    version_name: "v1.0"
+    version: "1.0"
+    bento_supported_version: "1.0"
+  }
+  attr_lists: "common-extension-attrs"
+}
+tags: {  # amp-sidebar
+  html_format: AMP
+  tag_name: "SCRIPT"
+  satisfies: "amp-sidebar 0.1"
+  excludes: "amp-sidebar 1.0"
+  extension_spec: {
+    name: "amp-sidebar"
+    version_name: "v0.1"
     version: "0.1"
     version: "latest"
     requires_usage: EXEMPTED
diff --git a/extensions/amp-skimlinks/validator-amp-skimlinks.protoascii b/extensions/amp-skimlinks/validator-amp-skimlinks.protoascii
index 0cebbc1581..af84f954fc 100644
--- a/extensions/amp-skimlinks/validator-amp-skimlinks.protoascii
+++ b/extensions/amp-skimlinks/validator-amp-skimlinks.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-skimlinks
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-slides/validator-amp-slides.protoascii b/extensions/amp-slides/validator-amp-slides.protoascii
index bbfed59c50..c104235757 100644
--- a/extensions/amp-slides/validator-amp-slides.protoascii
+++ b/extensions/amp-slides/validator-amp-slides.protoascii
@@ -1,19 +1,3 @@
-
 # This tag no longer exists. It has been folded into amp-carousel. See
 # https://github.com/ampproject/amphtml/issues/5981
 # However, some pages are still including the javascript file.
diff --git a/extensions/amp-smartlinks/validator-amp-smartlinks.protoascii b/extensions/amp-smartlinks/validator-amp-smartlinks.protoascii
index bef7cd5e71..c31529e15b 100644
--- a/extensions/amp-smartlinks/validator-amp-smartlinks.protoascii
+++ b/extensions/amp-smartlinks/validator-amp-smartlinks.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-smartlinks
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-social-share/validator-amp-social-share.protoascii b/extensions/amp-social-share/validator-amp-social-share.protoascii
index 38e5d39e24..76971ce7ca 100644
--- a/extensions/amp-social-share/validator-amp-social-share.protoascii
+++ b/extensions/amp-social-share/validator-amp-social-share.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-social-share 1.0
   html_format: AMP
   tag_name: "SCRIPT"
@@ -23,6 +7,7 @@ tags: {  # amp-social-share 1.0
     name: "amp-social-share"
     version_name: "v1.0"
     version: "1.0"
+    bento_supported_version: "1.0"
   }
   attr_lists: "common-extension-attrs"
 }
diff --git a/extensions/amp-soundcloud/validator-amp-soundcloud.protoascii b/extensions/amp-soundcloud/validator-amp-soundcloud.protoascii
index 5ba61a011b..f7de4da5e1 100644
--- a/extensions/amp-soundcloud/validator-amp-soundcloud.protoascii
+++ b/extensions/amp-soundcloud/validator-amp-soundcloud.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-soundcloud 1.0
   html_format: AMP
   tag_name: "SCRIPT"
@@ -23,6 +7,7 @@ tags: {  # amp-soundcloud 1.0
     name: "amp-soundcloud"
     version_name: "v1.0"
     version: "1.0"
+    bento_supported_version: "1.0"
   }
   attr_lists: "common-extension-attrs"
 }
diff --git a/extensions/amp-springboard-player/validator-amp-springboard-player.protoascii b/extensions/amp-springboard-player/validator-amp-springboard-player.protoascii
index 1bd1ed6416..586301fa7a 100644
--- a/extensions/amp-springboard-player/validator-amp-springboard-player.protoascii
+++ b/extensions/amp-springboard-player/validator-amp-springboard-player.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-springboard-player
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-sticky-ad/validator-amp-sticky-ad.protoascii b/extensions/amp-sticky-ad/validator-amp-sticky-ad.protoascii
index 4f45ed63d4..28db93a638 100644
--- a/extensions/amp-sticky-ad/validator-amp-sticky-ad.protoascii
+++ b/extensions/amp-sticky-ad/validator-amp-sticky-ad.protoascii
@@ -1,18 +1,3 @@
 tags: {  # <script custom-element="amp-sticky-ad">
   html_format: AMP  # Ads are not allowed inside ads.
   tag_name: "SCRIPT"
diff --git a/extensions/amp-story-360/validator-amp-story-360.protoascii b/extensions/amp-story-360/validator-amp-story-360.protoascii
index 933941a709..22c3a3b1f1 100644
--- a/extensions/amp-story-360/validator-amp-story-360.protoascii
+++ b/extensions/amp-story-360/validator-amp-story-360.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-story-360
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-story-auto-ads/validator-amp-story-auto-ads.protoascii b/extensions/amp-story-auto-ads/validator-amp-story-auto-ads.protoascii
index 053bd1b74a..235c23760b 100644
--- a/extensions/amp-story-auto-ads/validator-amp-story-auto-ads.protoascii
+++ b/extensions/amp-story-auto-ads/validator-amp-story-auto-ads.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-story-auto-ads
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-story-auto-analytics/validator-amp-story-auto-analytics.protoascii b/extensions/amp-story-auto-analytics/validator-amp-story-auto-analytics.protoascii
index 63ceb2ae1c..120dc651cd 100644
--- a/extensions/amp-story-auto-analytics/validator-amp-story-auto-analytics.protoascii
+++ b/extensions/amp-story-auto-analytics/validator-amp-story-auto-analytics.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-story-auto-analytics
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-redbull-player/validator-amp-redbull-player.protoascii b/extensions/amp-story-captions/validator-amp-story-captions.protoascii
similarity index 72%
copy from extensions/amp-redbull-player/validator-amp-redbull-player.protoascii
copy to extensions/amp-story-captions/validator-amp-story-captions.protoascii
index 8ee98822d6..93e3992f2f 100644
--- a/extensions/amp-redbull-player/validator-amp-redbull-player.protoascii
+++ b/extensions/amp-story-captions/validator-amp-story-captions.protoascii
@@ -1,5 +1,5 @@
 #
+# Copyright 2021 The AMP HTML Authors. All Rights Reserved.
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -14,32 +14,33 @@
 # limitations under the license.
 #
 
-tags: {  # amp-redbull-player
+tags: {  # amp-story-captions
   html_format: AMP
   tag_name: "SCRIPT"
   extension_spec: {
-    name: "amp-redbull-player"
+    name: "amp-story-captions"
     version: "0.1"
     version: "latest"
   }
   attr_lists: "common-extension-attrs"
 }
-tags: {  # <amp-redbull-player>
+tags: {  # <amp-story-captions>
   html_format: AMP
-  tag_name: "AMP-REDBULL-PLAYER"
-  requires_extension: "amp-redbull-player"
-  attrs: {
-    name: "data-param-videoid"
-    mandatory: true
-  }
+  tag_name: "AMP-STORY-CAPTIONS"
+  requires_extension: "amp-story-captions"
   attr_lists: "extended-amp-global"
+  spec_url: "https://amp.dev/documentation/components/amp-story-captions"
+  mandatory_ancestor: "AMP-STORY"
   amp_layout: {
+    supported_layouts: FILL
     supported_layouts: FIXED
     supported_layouts: FIXED_HEIGHT
-    supported_layouts: RESPONSIVE
-    supported_layouts: FILL
     supported_layouts: FLEX_ITEM
     supported_layouts: FLUID
     supported_layouts: INTRINSIC
+    supported_layouts: RESPONSIVE
+  }
+  child_tags: {
+    mandatory_num_child_tags: 0
   }
 }
diff --git a/extensions/amp-story-interactive/validator-amp-story-interactive.protoascii b/extensions/amp-story-interactive/validator-amp-story-interactive.protoascii
index 7c774c00dd..dabafc3cf2 100644
--- a/extensions/amp-story-interactive/validator-amp-story-interactive.protoascii
+++ b/extensions/amp-story-interactive/validator-amp-story-interactive.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-story-interactive
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-story-panning-media/validator-amp-story-panning-media.protoascii b/extensions/amp-story-panning-media/validator-amp-story-panning-media.protoascii
index 992835f6dd..f49627db10 100644
--- a/extensions/amp-story-panning-media/validator-amp-story-panning-media.protoascii
+++ b/extensions/amp-story-panning-media/validator-amp-story-panning-media.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-story-panning-media
   html_format: AMP
   tag_name: "SCRIPT"
@@ -33,4 +17,24 @@ tags: {  # <amp-story-panning-media>
   amp_layout: {
     supported_layouts: FILL
   }
+  attrs: {
+    name: "data-x"
+    value_regex: "-?(0|[0-9]?\\d\\.?\\d*%|100%)"
+  }
+  attrs: {
+    name: "data-y"
+    value_regex: "-?(0|[0-9]?\\d\\.?\\d*%|100%)"
+  }
+  attrs: {
+    name: "data-zoom"
+    value_regex: "\\d+\\.?\\d*"
+  }
+  attrs: {
+    name: "lock-bounds"
+    value: ""
+  }
+  child_tags: {
+    mandatory_num_child_tags: 1
+    child_tag_name_oneof: "AMP-IMG"
+  }
 }
diff --git a/extensions/amp-story-player/validator-amp-story-player.protoascii b/extensions/amp-story-player/validator-amp-story-player.protoascii
index ec58ce7436..27d0b85190 100644
--- a/extensions/amp-story-player/validator-amp-story-player.protoascii
+++ b/extensions/amp-story-player/validator-amp-story-player.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-story-player
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-story/validator-amp-story.protoascii b/extensions/amp-story/validator-amp-story.protoascii
index ccfd025ecb..3c83d36ce1 100644
--- a/extensions/amp-story/validator-amp-story.protoascii
+++ b/extensions/amp-story/validator-amp-story.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-story
   html_format: AMP
   tag_name: "SCRIPT"
@@ -720,6 +704,7 @@ descendant_tag_list: {
   tag: "AMP-STATE"
   tag: "AMP-STORY-360"
   tag: "AMP-STORY-AUTO-ANALYTICS"
+  tag: "AMP-STORY-CAPTIONS"
   tag: "AMP-STORY-INTERACTIVE-BINARY-POLL"
   tag: "AMP-STORY-INTERACTIVE-IMG-POLL"
   tag: "AMP-STORY-INTERACTIVE-IMG-QUIZ"
@@ -1037,8 +1022,7 @@ tags: {
 }
 descendant_tag_list {
   # Allowlisting as many components as possible, unless they could result in a
-  # bad UX (ie: modal in a modal with amp-lightbox), or potential security
-  # issues (ie: amp-form).
+  # bad UX (ie: modal in a modal with amp-lightbox).
   name: "amp-story-page-attachment-allowed-descendants"
   tag: "A"
   tag: "ABBR"
@@ -1094,6 +1078,7 @@ descendant_tag_list {
   tag: "AMP-RENDER"
   tag: "AMP-RIDDLE-QUIZ"
   tag: "AMP-SOUNDCLOUD"
+  tag: "AMP-SELECTOR"
   tag: "AMP-SPRINGBOARD-PLAYER"
   tag: "AMP-TIMEAGO"
   tag: "AMP-TWITTER"
@@ -1122,6 +1107,7 @@ descendant_tag_list {
   tag: "COL"
   tag: "COLGROUP"
   tag: "DATA"
+  tag: "DATALIST"
   tag: "DD"
   tag: "DEFS"
   tag: "DEL"
@@ -1141,8 +1127,10 @@ descendant_tag_list {
   tag: "FEMERGENODE"
   tag: "FEOFFSET"
   tag: "FIGCAPTION"
+  tag: "FIELDSET"
   tag: "FIGURE"
   tag: "FILTER"
+  tag: "FORM"
   tag: "FOOTER"
   tag: "G"
   tag: "GLYPH"
@@ -1160,9 +1148,12 @@ descendant_tag_list {
   tag: "I"
   tag: "IMAGE"
   tag: "IMG"  # Only allowed when document is transformed AMP
+  tag: "INPUT"
   tag: "I-AMPHTML-SIZER"  # Only allowed when document is transformed AMP
   tag: "INS"
   tag: "KBD"
+  tag: "LABEL"
+  tag: "LEGEND"
   tag: "LI"
   tag: "LINE"
   tag: "LINEARGRADIENT"
@@ -1171,14 +1162,19 @@ descendant_tag_list {
   tag: "MARKER"
   tag: "MASK"
   tag: "METADATA"
+  tag: "METER"
   tag: "NAV"
   tag: "OL"
+  tag: "OPTGROUP"
+  tag: "OPTION"
+  tag: "OUTPUT"
   tag: "P"
   tag: "PATH"
   tag: "PATTERN"
   tag: "POLYGON"
   tag: "POLYLINE"
   tag: "PRE"
+  tag: "PROGRESS"
   tag: "Q"
   tag: "RADIALGRADIENT"
   tag: "RECT"
@@ -1189,6 +1185,7 @@ descendant_tag_list {
   tag: "S"
   tag: "SAMP"
   tag: "SECTION"
+  tag: "SELECT"
   tag: "SMALL"
   tag: "SOLIDCOLOR"
   tag: "SOURCE"
@@ -1205,6 +1202,7 @@ descendant_tag_list {
   tag: "TD"
   tag: "TEMPLATE"
   tag: "TEXT"
+  tag: "TEXTAREA"
   tag: "TEXTPATH"
   tag: "TFOOT"
   tag: "TH"
diff --git a/extensions/amp-stream-gallery/validator-amp-stream-gallery.protoascii b/extensions/amp-stream-gallery/validator-amp-stream-gallery.protoascii
index 1284bff7fa..2e70fd514f 100644
--- a/extensions/amp-stream-gallery/validator-amp-stream-gallery.protoascii
+++ b/extensions/amp-stream-gallery/validator-amp-stream-gallery.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-stream-gallery
   html_format: AMP
   tag_name: "SCRIPT"
@@ -21,6 +5,8 @@ tags: {  # amp-stream-gallery
     name: "amp-stream-gallery"
     version: "1.0"
     version: "latest"
+    bento_supported_version: "1.0"
+    bento_supported_version: "latest"
   }
   attr_lists: "common-extension-attrs"
 }
diff --git a/extensions/amp-subscriptions/validator-amp-subscriptions.protoascii b/extensions/amp-subscriptions/validator-amp-subscriptions.protoascii
index e7d7f2b345..7a696b625a 100644
--- a/extensions/amp-subscriptions/validator-amp-subscriptions.protoascii
+++ b/extensions/amp-subscriptions/validator-amp-subscriptions.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-subscriptions
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-tiktok/validator-amp-tiktok.protoascii b/extensions/amp-tiktok/validator-amp-tiktok.protoascii
index 72bcee32ee..11edec25c1 100644
--- a/extensions/amp-tiktok/validator-amp-tiktok.protoascii
+++ b/extensions/amp-tiktok/validator-amp-tiktok.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-tiktok
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-timeago/validator-amp-timeago.protoascii b/extensions/amp-timeago/validator-amp-timeago.protoascii
index 72138157c3..80deeb882b 100644
--- a/extensions/amp-timeago/validator-amp-timeago.protoascii
+++ b/extensions/amp-timeago/validator-amp-timeago.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-timeago
   html_format: AMP
   tag_name: "SCRIPT"
@@ -22,6 +6,7 @@ tags: {  # amp-timeago
     version: "0.1"
     version: "1.0"
     version: "latest"
+    bento_supported_version: "1.0"
   }
   attr_lists: "common-extension-attrs"
 }
diff --git a/extensions/amp-truncate-text/validator-amp-truncate-text.protoascii b/extensions/amp-truncate-text/validator-amp-truncate-text.protoascii
index 25d77b090f..b0ade1f788 100644
--- a/extensions/amp-truncate-text/validator-amp-truncate-text.protoascii
+++ b/extensions/amp-truncate-text/validator-amp-truncate-text.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-truncate-text
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-twitter/validator-amp-twitter.protoascii b/extensions/amp-twitter/validator-amp-twitter.protoascii
index d586010642..fde96f89ab 100644
--- a/extensions/amp-twitter/validator-amp-twitter.protoascii
+++ b/extensions/amp-twitter/validator-amp-twitter.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-twitter 1.0
   html_format: AMP
   tag_name: "SCRIPT"
@@ -23,6 +7,7 @@ tags: {  # amp-twitter 1.0
     name: "amp-twitter"
     version_name: "v1.0"
     version: "1.0"
+    bento_supported_version: "1.0"
   }
   attr_lists: "common-extension-attrs"
 }
diff --git a/extensions/amp-user-notification/validator-amp-user-notification.protoascii b/extensions/amp-user-notification/validator-amp-user-notification.protoascii
index 87bccf634c..6356c32544 100644
--- a/extensions/amp-user-notification/validator-amp-user-notification.protoascii
+++ b/extensions/amp-user-notification/validator-amp-user-notification.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-user-notification
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-video-docking/validator-amp-video-docking.protoascii b/extensions/amp-video-docking/validator-amp-video-docking.protoascii
index bfb2c4ad7b..daac372182 100644
--- a/extensions/amp-video-docking/validator-amp-video-docking.protoascii
+++ b/extensions/amp-video-docking/validator-amp-video-docking.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-video-docking
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-video-iframe/validator-amp-video-iframe.protoascii b/extensions/amp-video-iframe/validator-amp-video-iframe.protoascii
index e3e71a3a0a..a734dce91e 100644
--- a/extensions/amp-video-iframe/validator-amp-video-iframe.protoascii
+++ b/extensions/amp-video-iframe/validator-amp-video-iframe.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-video-iframe
   html_format: AMP  # Iframes not allowed in ads.
   tag_name: "SCRIPT"
@@ -23,6 +7,7 @@ tags: {  # amp-video-iframe
     name: "amp-video-iframe"
     version_name: "v1.0"
     version: "1.0"
+    bento_supported_version: "1.0"
   }
   attr_lists: "common-extension-attrs"
 }
diff --git a/extensions/amp-video/validator-amp-video.protoascii b/extensions/amp-video/validator-amp-video.protoascii
index 56aca09f04..2327ea1be7 100644
--- a/extensions/amp-video/validator-amp-video.protoascii
+++ b/extensions/amp-video/validator-amp-video.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-video 1.0
   html_format: AMP
   tag_name: "SCRIPT"
@@ -23,6 +7,7 @@ tags: {  # amp-video 1.0
     name: "amp-video"
     version_name: "v1.0"
     version: "1.0"
+    bento_supported_version: "1.0"
   }
   attr_lists: "common-extension-attrs"
 }
@@ -194,6 +179,10 @@ tags: {  # <amp-video> in amp-story
     name: "cache"
     value: "google"
   }
+  attrs: {
+    name: "captions-id"
+    requires_extension: "amp-story-captions"
+  }
   attr_lists: "extended-amp-global"
   attr_lists: "amp-video-common"
   spec_url: "https://amp.dev/documentation/components/amp-video/"
diff --git a/extensions/amp-vimeo/validator-amp-vimeo.protoascii b/extensions/amp-vimeo/validator-amp-vimeo.protoascii
index af6b7880c6..4ebd8bf574 100644
--- a/extensions/amp-vimeo/validator-amp-vimeo.protoascii
+++ b/extensions/amp-vimeo/validator-amp-vimeo.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-vimeo
   html_format: AMP
   tag_name: "SCRIPT"
@@ -24,6 +8,7 @@ tags: {  # amp-vimeo
     version_name: "v0.1"
     version: "0.1"
     version: "latest"
+    bento_supported_version: "1.0"
     requires_usage: EXEMPTED
     deprecated_allow_duplicates: true
   }
diff --git a/extensions/amp-vine/validator-amp-vine.protoascii b/extensions/amp-vine/validator-amp-vine.protoascii
index 37cc42dc08..b82e61608e 100644
--- a/extensions/amp-vine/validator-amp-vine.protoascii
+++ b/extensions/amp-vine/validator-amp-vine.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-vine
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-viqeo-player/validator-amp-viqeo-player.protoascii b/extensions/amp-viqeo-player/validator-amp-viqeo-player.protoascii
index ece46ddbdd..d5d7a918bd 100644
--- a/extensions/amp-viqeo-player/validator-amp-viqeo-player.protoascii
+++ b/extensions/amp-viqeo-player/validator-amp-viqeo-player.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-viqeo-player
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-vk/validator-amp-vk.protoascii b/extensions/amp-vk/validator-amp-vk.protoascii
index 63ccfa9a4a..37b36704de 100644
--- a/extensions/amp-vk/validator-amp-vk.protoascii
+++ b/extensions/amp-vk/validator-amp-vk.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-vk
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-web-push/validator-amp-web-push.protoascii b/extensions/amp-web-push/validator-amp-web-push.protoascii
index 9a850dea5e..4fcbb7aec5 100644
--- a/extensions/amp-web-push/validator-amp-web-push.protoascii
+++ b/extensions/amp-web-push/validator-amp-web-push.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-web-push
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-wistia-player/validator-amp-wistia-player.protoascii b/extensions/amp-wistia-player/validator-amp-wistia-player.protoascii
index 9a481c7c96..9ca6bc5fb5 100644
--- a/extensions/amp-wistia-player/validator-amp-wistia-player.protoascii
+++ b/extensions/amp-wistia-player/validator-amp-wistia-player.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-wistia-player
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-wordpress-embed/validator-amp-wordpress-embed.protoascii b/extensions/amp-wordpress-embed/validator-amp-wordpress-embed.protoascii
index 33622d203c..63aa6f7161 100644
--- a/extensions/amp-wordpress-embed/validator-amp-wordpress-embed.protoascii
+++ b/extensions/amp-wordpress-embed/validator-amp-wordpress-embed.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-wordpress-embed
   html_format: AMP
   tag_name: "SCRIPT"
@@ -21,6 +5,8 @@ tags: {  # amp-wordpress-embed
     name: "amp-wordpress-embed"
     version: "1.0"
     version: "latest"
+    bento_supported_version: "1.0"
+    bento_supported_version: "latest"
   }
   attr_lists: "common-extension-attrs"
 }
diff --git a/extensions/amp-yotpo/validator-amp-yotpo.protoascii b/extensions/amp-yotpo/validator-amp-yotpo.protoascii
index abf329a991..3d8935699f 100644
--- a/extensions/amp-yotpo/validator-amp-yotpo.protoascii
+++ b/extensions/amp-yotpo/validator-amp-yotpo.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-yotpo
   html_format: AMP
   tag_name: "SCRIPT"
diff --git a/extensions/amp-youtube/validator-amp-youtube.protoascii b/extensions/amp-youtube/validator-amp-youtube.protoascii
index 672000210d..bd57af18b8 100644
--- a/extensions/amp-youtube/validator-amp-youtube.protoascii
+++ b/extensions/amp-youtube/validator-amp-youtube.protoascii
@@ -1,19 +1,3 @@
-
 tags: {  # amp-youtube 1.0
   html_format: AMP
   tag_name: "SCRIPT"
@@ -23,6 +7,7 @@ tags: {  # amp-youtube 1.0
     name: "amp-youtube"
     version_name: "v1.0"
     version: "1.0"
+    bento_supported_version: "1.0"
   }
   attr_lists: "common-extension-attrs"
 }
diff --git a/validator/validator-css.protoascii b/validator/validator-css.protoascii
index 93d3ef4685..9128f391a8 100644
--- a/validator/validator-css.protoascii
+++ b/validator/validator-css.protoascii
@@ -1,19 +1,3 @@
-
 declaration_list {
   name: "BASIC_DECLARATIONS"
   declaration: { name: "align-content" }
@@ -1123,35 +1107,10 @@ tags: {  # <style amp-custom>, AMP4EMAIL, data-css-strict
 
 tags: {  # `<style amp-boilerplate>`, [AMP]
   html_format: AMP
-  disabled_by: "transformed"
   tag_name: "STYLE"
   spec_name: "head > style[amp-boilerplate]"
   descriptive_name: "head > style[amp-boilerplate]"
-  mandatory: true
-  unique: true
-  mandatory_parent: "HEAD"
-  attr_lists: "nonce-attr"
-  attrs: {
-    name: "amp-boilerplate"
-    mandatory: true
-    value: ""
-    dispatch_key: NAME_VALUE_PARENT_DISPATCH
-  }
-  cdata: {
-    doc_css_bytes: false
-    # This regex allows arbitrary whitespace whenever some whitespace
-    # is required in the boilerplate. It was made by replacing ' ' with \\s+.
-    cdata_regex: "\\s*body\\s*{\\s*-webkit-animation:\\s*-amp-start\\s+8s\\s+steps\\(1,\\s*end\\)\\s+0s\\s+1\\s+normal\\s+both;\\s*-moz-animation:\\s*-amp-start\\s+8s\\s+steps\\s*\\(1\\s*,\\s*end\\s*\\)\\s+0s\\s+1\\s+normal\\s+both;\\s*-ms-animation:\\s*-amp-start\\s+8s\\s+steps\\s*\\(1\\s*,\\s*end\\s*\\)\\s+0s\\s+1\\s+normal\\s+both;\\s*animation:\\s*-amp-start\\s+8s\\s+steps\\(1,\\s*end\\)\\s+0s\\s+1\\s+normal\\s+both;?\\s*}\\s*@-webkit-keyframes\\s+-amp-start\\s*{\\s*from\\s*{\\s*visibility:\\s*hidden;?\\s*}\\s*to\\s*{\\s*visibility:\\s*visible;?\\s*}\\s*}\\s*@-moz-keyframes\\s+-amp-start\\s*{\\s*from\\s*{\\s*visibility:\\s*hidden;?\\s*}\\s*to\\s*{\\s*visibility:\\s*visible;?\\s*}\\s*}\\s*@-ms-keyframes\\s+-amp-start\\s*{\\s*from\\s*{\\s*visibility:\\s*hidden;?\\s*}\\s*to\\s*{\\s*visibility:\\s*visible;?\\s*}\\s*}\\s*@-o-keyframes\\s+-amp-start\\s*{\\s*from\\s*{\\s*visibility:\\s*hidden;?\\s*}\\s*to\\s*{\\s*visibility:\\s*visible;?\\s*}\\s*}\\s*@keyframes\\s+-amp-start\\s*{\\s*from\\s*{\\s*visibility:\\s*hidden;?\\s*}\\s*to\\s*{\\s*visibility:\\s*visible;?\\s*}\\s*}\\s*"
-  }
-  spec_url: "https://amp.dev/documentation/guides-and-tutorials/learn/spec/amp-boilerplate/?format=websites"
-}
-
-tags: {  # `<style amp-boilerplate>`, transformed [AMP]
-  html_format: AMP
-  enabled_by: "transformed"
-  tag_name: "STYLE"
-  spec_name: "head > style[amp-boilerplate] (transformed)"
-  descriptive_name: "head > style[amp-boilerplate]"
+  satisfies: "style[amp-boilerplate]"
   unique: true
   mandatory_parent: "HEAD"
   attr_lists: "nonce-attr"
@@ -1175,7 +1134,7 @@ tags: {  # `<style amp4ads-boilerplate>`, AMP4ADS
   tag_name: "STYLE"
   spec_name: "head > style[amp4ads-boilerplate]"
   descriptive_name: "head > style[amp4ads-boilerplate]"
-  mandatory: true
+  satisfies: "style[amp-boilerplate]"
   unique: true
   mandatory_parent: "HEAD"
   attr_lists: "nonce-attr"
@@ -1200,7 +1159,7 @@ tags: {  # `<style amp4email-boilerplate>`, AMP4EMAIL
   tag_name: "STYLE"
   spec_name: "head > style[amp4email-boilerplate]"
   descriptive_name: "head > style[amp4email-boilerplate]"
-  mandatory: true
+  satisfies: "style[amp-boilerplate]"
   unique: true
   mandatory_parent: "HEAD"
   attrs: {
@@ -1220,34 +1179,10 @@ tags: {  # `<style amp4email-boilerplate>`, AMP4EMAIL
 
 tags: {  # `<style amp-boilerplate>`, [AMP]
   html_format: AMP
-  disabled_by: "transformed"
   tag_name: "STYLE"
   spec_name: "noscript > style[amp-boilerplate]"
   descriptive_name: "noscript > style[amp-boilerplate]"
-  mandatory: true
-  unique: true
-  mandatory_parent: "NOSCRIPT"
-  mandatory_ancestor: "HEAD"
-  attr_lists: "nonce-attr"
-  attrs: {
-    name: "amp-boilerplate"
-    mandatory: true
-    value: ""
-    dispatch_key: NAME_VALUE_PARENT_DISPATCH
-  }
-  cdata {
-    doc_css_bytes: false
-    cdata_regex: "\\s*body\\s*{\\s*-webkit-animation:\\s*none;\\s*-moz-animation:\\s*none;\\s*-ms-animation:\\s*none;\\s*animation:\\s*none;?\\s*}\\s*"
-  }
-  spec_url: "https://amp.dev/documentation/guides-and-tutorials/learn/spec/amp-boilerplate/?format=websites"
-}
-
-tags: {  # `<style amp-boilerplate>`, transformed [AMP]
-  html_format: AMP
-  enabled_by: "transformed"
-  tag_name: "STYLE"
-  spec_name: "noscript > style[amp-boilerplate] (transformed)"
-  descriptive_name: "noscript > style[amp-boilerplate]"
+  satisfies: "noscript > style[amp-boilerplate]"
   unique: true
   mandatory_parent: "NOSCRIPT"
   mandatory_ancestor: "HEAD"
@@ -1402,3 +1337,112 @@ tags: {  # '<style amp-runtime>`, transformed AMP
   }
   spec_url: "https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#stylesheets"
 }
+
+tags: {  # <style amp-noscript>, [AMP]
+  html_format: AMP
+  tag_name: "STYLE"
+  spec_name: "style amp-noscript"
+  descriptive_name: "style amp-noscript"
+  unique: true
+  mandatory_parent: "NOSCRIPT"
+  mandatory_ancestor: "HEAD"
+  attr_lists: "nonce-attr"
+  attrs: {
+    name: "amp-noscript"
+    mandatory: true
+    value: ""
+    dispatch_key: NAME_DISPATCH
+  }
+  attrs: {  # Allow the default.
+    name: "type"
+    value_casei: "text/css"
+  }
+  cdata: {
+    doc_css_bytes: true
+    max_bytes: 10000
+    max_bytes_spec_url:
+    "https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#maximum-size"
+
+    css_spec: {
+      at_rule_spec: {
+         name: 'media'
+         media_query_spec: {
+           issues_as_error: false
+           type: 'all'
+           type: 'print'
+           type: 'screen'
+           type: 'speech'
+           type: 'tty'
+           type: 'tv'
+           type: 'projection'
+           type: 'handheld'
+           type: 'braille'
+           type: 'embossesd'
+           type: 'aural'
+           feature: 'any-hover'
+           feature: 'any-pointer'
+           feature: 'aspect-ratio'
+           feature: 'color'
+           feature: 'color-gamut'
+           feature: 'color-index'
+           feature: 'device-aspect-ratio'
+           feature: 'device-height'
+           feature: 'device-width'
+           feature: 'display-mode'
+           feature: 'forced-colors'
+           feature: 'grid'
+           feature: 'height'
+           feature: 'hover'
+           feature: 'inverted-colors'
+           feature: 'light-level'
+           feature: 'max-aspect-ratio'
+           feature: 'max-color-index'
+           feature: 'max-device-aspect-ratio'
+           feature: 'max-device-height'
+           feature: 'max-device-width'
+           feature: 'max-height'
+           feature: 'max-resolution'
+           feature: 'max-width'
+           feature: 'min-aspect-ratio'
+           feature: 'min-color-index'
+           feature: 'min-device-aspect-ratio'
+           feature: 'min-device-height'
+           feature: 'min-device-width'
+           feature: 'min-height'
+           feature: 'min-resolution'
+           feature: 'min-width'
+           feature: 'monochrome'
+           feature: 'orientation'
+           feature: 'overflow-block'
+           feature: 'overflow-inline'
+           feature: 'pointer'
+           feature: 'prefers-color-scheme'
+           feature: 'prefers-contrast'
+           feature: 'prefers-reduced-motion'
+           feature: 'prefers-reduced-transparency'
+           feature: 'resolution'
+           feature: 'scan'
+           feature: 'scripting'
+           feature: 'transform-3d'
+           feature: 'update'
+           feature: 'width'
+         }
+      }
+      at_rule_spec: { name: 'page' }
+      at_rule_spec: { name: 'supports' }
+      # https://github.com/ampproject/amphtml/issues/26406
+      at_rule_spec: { name: '-moz-document' }
+    }
+    disallowed_cdata_regex: {
+      regex: "<!--"
+      error_message: "html comments"
+    }
+    # These regex denylists are temporary hacks to validate essential CSS
+    # rules. They will be replaced later with more principled solutions.
+    disallowed_cdata_regex: {
+      regex: "(^|\\W)i-amphtml-"
+      error_message: "CSS i-amphtml- name prefix"
+    }
+  }
+  spec_url: "https://github.com/ampproject/amphtml/issues/20609"
+}
diff --git a/validator/validator-main.protoascii b/validator/validator-main.protoascii
index 2fa66f8224..3d3b1b9dfe 100644
--- a/validator/validator-main.protoascii
+++ b/validator/validator-main.protoascii
@@ -1,25 +1,4 @@
-
+# DEPRECATED: This value is no longer updated.
 min_validator_revision_required: 475
 
 # DEPRECATED: This value is no longer updated.
@@ -1412,6 +1391,11 @@ tags: {
     name: "role"
     implicit: true
   }
+  attrs: {
+    name: "show-tooltip"
+    value: "auto"
+    value: "true"
+  }
   attrs: {
     name: "tabindex"
     implicit: true
@@ -1427,13 +1411,9 @@ tags: {
     value_casei: "text/html"
     value_casei: "application/rss+xml"
   }
-  attrs: {
-    name: "show-tooltip"
-    value: "auto"
-    value: "true"
-  }
   attr_lists: "click-attributions"
   attr_lists: "name-attr"
+  attr_lists: "private-click-measurement-attributes"
   # <amp-bind>
   attrs: { name: "[href]" }
   spec_url: "https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#links"
@@ -1491,6 +1471,20 @@ tags: {
     value_casei: "text/html"
   }
 }
+# Private Click Measurement attributes for anchor tags.
+# See https://github.com/ampproject/amphtml/issues/35067
+attr_lists {
+  name: "private-click-measurement-attributes"
+  attrs: { name: "attributiondestination" }
+  attrs: { name: "attributionexpiry" }
+  attrs: { name: "attributionreportto" }
+  attrs: { name: "attributionsourceeventid" }
+  attrs: { name: "attributionsourceid" }
+  attrs: { name: "conversiondestination" }
+  attrs: { name: "impressiondata" }
+  attrs: { name: "impressionexpiry" }
+  attrs: { name: "reportingorigin" }
+}
 
 # 4.5.2 The em element
 tags: {
@@ -3112,10 +3106,40 @@ attr_lists: {
 }
 tags: {
   html_format: AMP
+  disabled_by: "transformed"
   tag_name: "SCRIPT"
   spec_name: "amphtml engine script"
   descriptive_name: "amphtml engine script"
-  mandatory_alternatives: "amphtml engine script"
+  satisfies: "amphtml javascript runtime (v0.js)"
+  requires: "style[amp-boilerplate]"
+  requires: "noscript > style[amp-boilerplate]"
+  unique: true
+  mandatory_parent: "HEAD"
+  attr_lists: "nonce-attr"
+  attr_lists: "amphtml-engine-attrs"
+  attrs: {
+    name: "src"
+    mandatory: true
+    value: "https://cdn.ampproject.org/v0.js"
+    dispatch_key: NAME_VALUE_DISPATCH
+  }
+  cdata: {
+    disallowed_cdata_regex: {
+      regex: "."
+      error_message: "contents"
+    }
+  }
+  spec_url: "https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#required-markup"
+}
+tags: {
+  # The transformed variant is the same except does not require the boilerplate,
+  # given that it may have been removed during transformation.
+  html_format: AMP
+  enabled_by: "transformed"
+  tag_name: "SCRIPT"
+  spec_name: "amphtml engine script (transformed)"
+  descriptive_name: "amphtml engine script"
+  satisfies: "amphtml javascript runtime (v0.js)"
   unique: true
   mandatory_parent: "HEAD"
   attr_lists: "nonce-attr"
@@ -3136,10 +3160,40 @@ tags: {
 }
 tags: {
   html_format: AMP
+  disabled_by: "transformed"
   tag_name: "SCRIPT"
   spec_name: "amphtml engine script (LTS)"
   descriptive_name: "amphtml engine script"
-  mandatory_alternatives: "amphtml engine script"
+  satisfies: "amphtml javascript runtime (v0.js)"
+  requires: "style[amp-boilerplate]"
+  requires: "noscript > style[amp-boilerplate]"
+  unique: true
+  mandatory_parent: "HEAD"
+  attr_lists: "nonce-attr"
+  attr_lists: "amphtml-engine-attrs"
+  attrs: {
+    name: "src"
+    mandatory: true
+    value: "https://cdn.ampproject.org/lts/v0.js"
+    dispatch_key: NAME_VALUE_DISPATCH
+  }
+  cdata: {
+    disallowed_cdata_regex: {
+      regex: "."
+      error_message: "contents"
+    }
+  }
+  spec_url: "https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#required-markup"
+}
+tags: {
+  # The transformed variant is the same except does not require the boilerplate,
+  # given that it may have been removed during transformation.
+  html_format: AMP
+  enabled_by: "transformed"
+  tag_name: "SCRIPT"
+  spec_name: "amphtml engine script (LTS) (transformed)"
+  descriptive_name: "amphtml engine script"
+  satisfies: "amphtml javascript runtime (v0.js)"
   unique: true
   mandatory_parent: "HEAD"
   attr_lists: "nonce-attr"
@@ -3164,7 +3218,7 @@ tags: {
   tag_name: "SCRIPT"
   spec_name: "amphtml module engine script"
   descriptive_name: "amphtml module engine script"
-  mandatory_alternatives: "amphtml engine script"
+  satisfies: "amphtml javascript runtime (v0.js)"
   unique: true
   mandatory_parent: "HEAD"
   satisfies: "amphtml module engine script"
@@ -3189,7 +3243,7 @@ tags: {
   tag_name: "SCRIPT"
   spec_name: "amphtml nomodule engine script"
   descriptive_name: "amphtml nomodule engine script"
-  mandatory_alternatives: "amphtml engine script"
+  satisfies: "amphtml javascript runtime (v0.js)"
   unique: true
   mandatory_parent: "HEAD"
   satisfies: "amphtml nomodule engine script"
@@ -3214,7 +3268,7 @@ tags: {
   tag_name: "SCRIPT"
   spec_name: "amphtml module LTS engine script"
   descriptive_name: "amphtml module LTS engine script"
-  mandatory_alternatives: "amphtml engine script"
+  satisfies: "amphtml javascript runtime (v0.js)"
   unique: true
   mandatory_parent: "HEAD"
   satisfies: "amphtml module LTS engine script"
@@ -3239,7 +3293,7 @@ tags: {
   tag_name: "SCRIPT"
   spec_name: "amphtml nomodule LTS engine script"
   descriptive_name: "amphtml nomdule LTS engine script"
-  mandatory_alternatives: "amphtml engine script"
+  satisfies: "amphtml javascript runtime (v0.js)"
   unique: true
   mandatory_parent: "HEAD"
   satisfies: "amphtml nomodule LTS engine script"
@@ -3263,6 +3317,8 @@ tags: {
   tag_name: "SCRIPT"
   spec_name: "amphtml engine script [AMP4EMAIL]"
   descriptive_name: "amphtml engine script"
+  satisfies: "amphtml javascript runtime (v0.js)"
+  requires: "style[amp-boilerplate]"
   mandatory: true
   unique: true
   mandatory_parent: "HEAD"
@@ -3287,6 +3343,8 @@ tags: {
   tag_name: "SCRIPT"
   spec_name: "amp4ads engine script"
   descriptive_name: "amphtml engine script"
+  satisfies: "amphtml javascript runtime (v0.js)"
+  requires: "style[amp-boilerplate]"
   mandatory: true
   unique: true
   mandatory_parent: "HEAD"
@@ -3421,23 +3479,13 @@ tags: {
 # 4.11.2 The noscript element
 tags: {
   html_format: AMP
-  disabled_by: "transformed"
   tag_name: "NOSCRIPT"
-  spec_name: "noscript enclosure for boilerplate"
-  descriptive_name: "noscript enclosure for boilerplate"
-  mandatory: true
-  unique: true
+  spec_name: "noscript enclosure for amp style tags"
   mandatory_parent: "HEAD"
-  spec_url: "https://amp.dev/documentation/guides-and-tutorials/learn/spec/amp-boilerplate/?format=websites"
+  child_tags {
+    child_tag_name_oneof: "STYLE"
+    mandatory_min_num_child_tags: 1
   }
-tags: {
-  html_format: AMP
-  enabled_by: "transformed"
-  tag_name: "NOSCRIPT"
-  spec_name: "noscript enclosure for boilerplate (transformed)"
-  descriptive_name: "noscript enclosure for boilerplate"
-  unique: true
-  mandatory_parent: "HEAD"
   spec_url: "https://amp.dev/documentation/guides-and-tutorials/learn/spec/amp-boilerplate/?format=websites"
 }
 # We allow noscript in the body to contain tags otherwise disallowed by AMP.
@@ -3622,6 +3670,9 @@ tags: {  # <amp-img>
   html_format: AMP
   html_format: AMP4ADS
   tag_name: "AMP-IMG"
+  # amp-img does not require a matching extension script, it's built in to v0.
+  # js directly, so we explicitly list that dependency here.
+  requires: "amphtml javascript runtime (v0.js)"
   attrs: { name: "alt" }
   attrs: { name: "attribution" }
   attrs: { name: "crossorigin" }
@@ -3654,6 +3705,9 @@ tags: {  # <amp-img i-amphtml-ssr>
   enabled_by: "transformed"
   tag_name: "AMP-IMG"
   spec_name: "amp-img (transformed)"
+  # amp-img does not require a matching extension script, it's built in to v0.
+  # js directly, so we explicitly list that dependency here.
+  requires: "amphtml javascript runtime (v0.js)"
   attrs: {
     dispatch_key: NAME_DISPATCH
     name: "i-amphtml-ssr"
@@ -3690,6 +3744,11 @@ tags: {  # <amp-img>
   html_format: AMP4EMAIL
   tag_name: "AMP-IMG"
   spec_name: "AMP-IMG (AMP4EMAIL)"
+  # amp-img does not require a matching extension script, it's built in to v0.
+  # js directly, so we explicitly list that dependency here. This is redundant
+  # for email since v0.js is still required, but we include to for consistency
+  # and to future proof.
+  requires: "amphtml javascript runtime (v0.js)"
   attrs: { name: "alt" }
   attrs: { name: "attribution" }
   attrs: { name: "placeholder" }
@@ -3714,6 +3773,9 @@ tags: {  # <amp-layout>
   html_format: AMP4ADS
   html_format: AMP4EMAIL
   tag_name: "AMP-LAYOUT"
+  # amp-pixel does not require a matching extension script, it's built in to v0.
+  # js directly, so we explicitly list that dependency here.
+  requires: "amphtml javascript runtime (v0.js)"
   attr_lists: "extended-amp-global"
   spec_url: "https://amp.dev/documentation/components/amp-layout/"
   amp_layout: {
@@ -3731,6 +3793,9 @@ tags: {  # <amp-pixel>
   html_format: AMP
   html_format: AMP4ADS
   tag_name: "AMP-PIXEL"
+  # amp-pixel does not require a matching extension script, it's built in to v0.
+  # js directly, so we explicitly list that dependency here.
+  requires: "amphtml javascript runtime (v0.js)"
   attrs: { name: "allow-ssr-img" }
   attrs: {
     name: "referrerpolicy"
@@ -3778,6 +3843,10 @@ tags: {
     name: "i-amphtml-disable-ar"
     value: ""
   }
+  attrs: {
+    name: "slot"
+    value: "i-amphtml-svc"
+  }
 }
 
 tags: {
@@ -3796,6 +3865,10 @@ tags: {
     name: "i-amphtml-disable-ar"
     value: ""
   }
+  attrs: {
+    name: "slot"
+    value: "i-amphtml-svc"
+  }
 }
 
 tags: {
diff --git a/validator/validator-svg.protoascii b/validator/validator-svg.protoascii
index f1b0b4b28b..9a002379eb 100644
--- a/validator/validator-svg.protoascii
+++ b/validator/validator-svg.protoascii
@@ -1,19 +1,3 @@
-
 # 4.7.15 SVG
 # We allow some limited embedded SVG tags. We do not allow inline styles
 # or embedding any external resources.
diff --git a/validator/validator.protoascii b/validator/validator.protoascii
index 53ccd9481c..c3df22f58e 100644
--- a/validator/validator.protoascii
+++ b/validator/validator.protoascii
@@ -1,19 +1,4 @@
-
-This file was split up into validator-main.protoascii (in this directory)
-and extensions/*/validator-*.protoascii. Please update your bookmarks
-and references.
+This file was split up into validator-main.protoascii, validator-css.protoascii,
+validator-svg.protoascii (in this directory), and
+extensions/*/validator-*.protoascii. Please update your bookmarks and
+references.

@westonruter westonruter added this to the v2.2 milestone Oct 18, 2021
@lgtm-com
Copy link

lgtm-com bot commented Oct 18, 2021

This pull request introduces 1 alert when merging f842725 into 65cdda6 - view on LGTM.com

new alerts:

  • 1 for Unused local variable

@westonruter westonruter marked this pull request as ready for review October 19, 2021 03:29
@github-actions
Copy link
Contributor

Plugin builds for 2274744 are ready 🛎️!

@@ -1384,6 +1384,7 @@ public function test_amp_register_default_scripts_and_styles() {
'amp-story-360' => 'v0/amp-story-360-0.1.js',
'amp-story-auto-ads' => 'v0/amp-story-auto-ads-0.1.js',
'amp-story-auto-analytics' => 'v0/amp-story-auto-analytics-0.1.js',
'amp-story-captions' => 'v0/amp-story-captions-0.1.js',
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yay 🎉

@westonruter westonruter changed the title Update amphtml spec to 530a457 Update amphtml spec to 2110152252000 Oct 19, 2021
'requires_extension' => array(
'amp-story-captions',
),
'spec_url' => 'https://amp.dev/documentation/components/amp-story-captions',
Copy link
Contributor

@pierlon pierlon Oct 19, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just noting there's no documentation page for this extension.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it's just because a deploy on amp.dev hasn't been done yet.

@westonruter westonruter merged commit 099cc36 into develop Oct 19, 2021
@westonruter westonruter deleted the update/amphtml-spec-530a457 branch October 19, 2021 18:34
@westonruter westonruter added the Changelogged Whether the issue/PR has been added to release notes. label Dec 15, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Changelogged Whether the issue/PR has been added to release notes.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants