ampproject / ampproject/amphtml

Validator fails to detect lack of required amp-access-scroll extension script

Open
#33,801 3 comments 0 reactions 0 assignees View on GitHub
P3: When Possible Stale Type: Bug WG: caching
Dominant language
JavaScript
Stars
14.9k
Forks
4.1k
PR merge metrics
No merged PRs in 30d

Description

## What's the issue?

If a site using `amp-access` adds an integration to the Scroll network, it is required to load the `amp-access-scroll` extension script ([see docs](https://amp.dev/documentation/components/amp-access-scroll/)).

However, the validator does not detect this issue as it is missing a rule to recognize this use case. This is clearly an invalid AMP page, though, as the functionality it is trying to use is broken if that dependency is missing.

This also means that the `auto-extensions` transformer in the NodeJS and PHP toolbox packages will not properly add the required `amp-access-scroll` extension script automatically, leading to a broken page.

Related issue: https://github.com/ampproject/amp-wp/issues/5999

## How do we reproduce the issue?

Here's a playground example which should throw a validation error, as the required `amp-access-scroll` extension script is not loaded even though it is being used by the markup: [Playground example](https://playground.amp.dev/#share=PCEtLSAjIyBJbnRyb2R1Y3Rpb24KICBUaGUgW2FtcC1hY2Nlc3NdKC9jb250ZW50L2FtcC1kZXYvZG9jdW1lbnRhdGlvbi9jb21wb25lbnRzL3JlZmVyZW5jZS9hbXAtYWNjZXNzLXYwLjEubWQpIGNvbXBvbmVudCBhZGRzIHN1cHBvcnQgZm9yIGF1dGhlbnRpY2F0aW9uIGFuZCBhdXRob3JpemF0aW9uLCBhbGxvd2luZyB5b3UgdG8gbGltaXQgYWNjZXNzIHRvIHBhcnRzIG9mIHlvdXIgQU1QIHBhZ2VzIGFzIHdlbGwgYXMgZGlzcGxheSBjdXN0b21pemVkIGNvbnRlbnQgZm9yIHRoZSBsb2dnZWQgaW4gdXNlci4gIEl0IGFsc28gYWxsb3dzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB2aWV3IGNvdW50aW5nLCBwYXl3YWxscyBhbmQgc3Vic2NyaXB0aW9ucy4gRm9yIHNhbXBsZSBgYW1wLWFjY2Vzc2Agc2VydmVyIGVuZHBvaW50cywgc2VlIHRoZSBbYW1wLXB1Ymxpc2hlci1zYW1wbGVdKGh0dHBzOi8vZ2l0aHViLmNvbS9hbXBwcm9qZWN0L2FtcC1wdWJsaXNoZXItc2FtcGxlKSBwcm9qZWN0LgotLT48IS0tIC0tPgo8IWRvY3R5cGUgaHRtbD4KPGh0bWwg4pqhIGxhbmc9ImVuIj4KPGhlYWQ+CjxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICA8dGl0bGU+YW1wLWFjY2VzczwvdGl0bGU+CiAgPHNjcmlwdCBhc3luYyBzcmM9Imh0dHBzOi8vY2RuLmFtcHByb2plY3Qub3JnL3YwLmpzIj48L3NjcmlwdD4KCiAgPCEtLSAjIyBTZXR1cCAtLT4KICA8IS0tIEltcG9ydCB0aGUgYGFtcC1hY2Nlc3NgIGNvbXBvbmVudCBpbiB0aGUgaGVhZGVyLiAtLT4KICA8c2NyaXB0IGFzeW5jIGN1c3RvbS1lbGVtZW50PSJhbXAtYWNjZXNzIiBzcmM9Imh0dHBzOi8vY2RuLmFtcHByb2plY3Qub3JnL3YwL2FtcC1hY2Nlc3MtMC4xLmpzIj48L3NjcmlwdD4KICA8IS0tIGBhbXAtYWNjZXNzYCByZXF1aXJlcyBgYW1wLWFuYWx5dGljc2AgdG8gYmUgaW1wb3J0ZWQgYXMgd2VsbC4gLS0+CiAgPHNjcmlwdCBhc3luYyBjdXN0b20tZWxlbWVudD0iYW1wLWFuYWx5dGljcyIgc3JjPSJodHRwczovL2Nkbi5hbXBwcm9qZWN0Lm9yZy92MC9hbXAtYW5hbHl0aWNzLTAuMS5qcyI+PC9zY3JpcHQ+CgogIDwhLS0gT3B0aW9uYWxseSwgdXNlIHRoZSBbYGFtcC1tdXN0YWNoZWBdKC9jb250ZW50L2FtcC1kZXYvZG9jdW1lbnRhdGlvbi9jb21wb25lbnRzL3JlZmVyZW5jZS9hbXAtbXVzdGFjaGUtdjAuMi5tZCkgY29tcG9uZW50IHRvIHNob3cgdGV4dCB3aXRoIHZhbHVlcyByZXBsYWNlZCBmcm9tIHRoZSBhdXRob3JpemF0aW9uIHJlc3BvbnNlIC0tPgogIDxzY3JpcHQgYXN5bmMgY3VzdG9tLXRlbXBsYXRlPSJhbXAtbXVzdGFjaGUiIHNyYz0iaHR0cHM6Ly9jZG4uYW1wcHJvamVjdC5vcmcvdjAvYW1wLW11c3RhY2hlLTAuMi5qcyI+PC9zY3JpcHQ+CgogIDwhLS0gQWRkIHRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgYGF1dGhvcml6YXRpb25gIGFuZCB0aGUgYGxvZ2luYCBlbmRwb2ludHMuIFdlIHByb3ZpZGUgdHdvIGxvZ2luIGVuZHBvaW50cywgb25lIGZvciBzaWduLWluIGFuZCBvbmUgZm9yIHNpZ24tb3V0LiBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGNyZWF0ZSBhIGZhbGxiYWNrIHJlc3BvbnNlIHRoYXQgd2lsbCBiZSB1c2VkIGlmIHRoZSBhdXRob3JpemF0aW9uIGZhaWxzIHdpdGggdGhlIGBhdXRob3JpemF0aW9uRmFsbGJhY2tSZXNwb25zZWAgYXR0cmlidXRlLgoKICAgIFRoZSBbUGluZ2JhY2sgRW5kcG9pbnRdKC9jb250ZW50L2FtcC1kZXYvZG9jdW1lbnRhdGlvbi9jb21wb25lbnRzL3JlZmVyZW5jZS9hbXAtYWNjZXNzLm1kI3BpbmdiYWNrLWVuZHBvaW50KSBpcyBjYWxsZWQgd2hlbiBhIHVzZXIgdmlld3MgdGhlIGRvY3VtZW50LCB3aGljaCBjYW4gYmUgdXNlZCB0byB1cGRhdGUgbWV0ZXJpbmcgaW5mb3JtYXRpb24uIFRoaXMgZnVuY3Rpb25hbGl0eSBpcyBub3QgdXNlZCBpbiB0aGlzIHNhbXBsZS4KICAtLT4KICA8c2NyaXB0IGlkPSJhbXAtYWNjZXNzIiB0eXBlPSJhcHBsaWNhdGlvbi9qc29uIj4KICAgIHsKICAgICAgICAiYXV0aG9yaXphdGlvbiI6ICIvZG9jdW1lbnRhdGlvbi9leGFtcGxlcy9hcGkvYW1wLWFjY2Vzcy9hdXRob3JpemF0aW9uP3JpZD1SRUFERVJfSUQmdXJsPUNBTk9OSUNBTF9VUkwmcmVmPURPQ1VNRU5UX1JFRkVSUkVSJl89UkFORE9NIiwKICAgICAgICAicGluZ2JhY2siOiAiL2RvY3VtZW50YXRpb24vZXhhbXBsZXMvYXBpL2FtcC1hY2Nlc3MvcGluZ2JhY2s/cmlkPVJFQURFUl9JRCZ1cmw9Q0FOT05JQ0FMX1VSTCZyZWY9RE9DVU1FTlRfUkVGRVJSRVImXz1SQU5ET00iLAogICAgICAgICJsb2dpbiI6IHsKICAgICAgICAgICJzaWduLWluIjogIi9kb2N1bWVudGF0aW9uL2V4YW1wbGVzL2FwaS9hbXAtYWNjZXNzL2xvZ2luP3JpZD1SRUFERVJfSUQmdXJsPUNBTk9OSUNBTF9VUkwiLAogICAgICAgICAgInNpZ24tb3V0IjogIi9kb2N1bWVudGF0aW9uL2V4YW1wbGVzL2FwaS9hbXAtYWNjZXNzL2xvZ291dCIKICAgICAgICB9LAogICAgICAgICJhdXRob3JpemF0aW9uRmFsbGJhY2tSZXNwb25zZSI6IHsKICAgICAgICAgICAgImVycm9yIjogdHJ1ZSwKICAgICAgICAgICAgImxvZ2dlZEluIjogZmFsc2UsCiAgICAgICAgICAgICJwb3dlclVzZXIiOiBmYWxzZQogICAgICAgIH0sCgkJInZlbmRvciI6ICJzY3JvbGwiLAoJCSJuYW1lc3BhY2UiOiAic2Nyb2xsIgogICAgfQogIDwvc2NyaXB0PgogIDxsaW5rIHJlbD0iY2Fub25pY2FsIiBocmVmPSJodHRwczovL2FtcC5kZXYvZG9jdW1lbnRhdGlvbi9leGFtcGxlcy9jb21wb25lbnRzL2FtcC1hY2Nlc3MvaW5kZXguaHRtbCI+CiAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCI+CiAgPHN0eWxlIGFtcC1ib2lsZXJwbGF0ZT5ib2R5ey13ZWJraXQtYW5pbWF0aW9uOi1hbXAtc3RhcnQgOHMgc3RlcHMoMSxlbmQpIDBzIDEgbm9ybWFsIGJvdGg7LW1vei1hbmltYXRpb246LWFtcC1zdGFydCA4cyBzdGVwcygxLGVuZCkgMHMgMSBub3JtYWwgYm90aDstbXMtYW5pbWF0aW9uOi1hbXAtc3RhcnQgOHMgc3RlcHMoMSxlbmQpIDBzIDEgbm9ybWFsIGJvdGg7YW5pbWF0aW9uOi1hbXAtc3RhcnQgOHMgc3RlcHMoMSxlbmQpIDBzIDEgbm9ybWFsIGJvdGh9QC13ZWJraXQta2V5ZnJhbWVzIC1hbXAtc3RhcnR7ZnJvbXt2aXNpYmlsaXR5OmhpZGRlbn10b3t2aXNpYmlsaXR5OnZpc2libGV9fUAtbW96LWtleWZyYW1lcyAtYW1wLXN0YXJ0e2Zyb217dmlzaWJpbGl0eTpoaWRkZW59dG97dmlzaWJpbGl0eTp2aXNpYmxlfX1ALW1zLWtleWZyYW1lcyAtYW1wLXN0YXJ0e2Zyb217dmlzaWJpbGl0eTpoaWRkZW59dG97dmlzaWJpbGl0eTp2aXNpYmxlfX1ALW8ta2V5ZnJhbWVzIC1hbXAtc3RhcnR7ZnJvbXt2aXNpYmlsaXR5OmhpZGRlbn10b3t2aXNpYmlsaXR5OnZpc2libGV9fUBrZXlmcmFtZXMgLWFtcC1zdGFydHtmcm9te3Zpc2liaWxpdHk6aGlkZGVufXRve3Zpc2liaWxpdHk6dmlzaWJsZX19PC9zdHlsZT48bm9zY3JpcHQ+PHN0eWxlIGFtcC1ib2lsZXJwbGF0ZT5ib2R5ey13ZWJraXQtYW5pbWF0aW9uOm5vbmU7LW1vei1hbmltYXRpb246bm9uZTstbXMtYW5pbWF0aW9uOm5vbmU7YW5pbWF0aW9uOm5vbmV9PC9zdHlsZT48L25vc2NyaXB0Pgo8L2hlYWQ+Cjxib2R5PgoKICA8IS0tICMjIENvbnRyb2xsaW5nIHZpc2liaWxpdHkgLS0+CiAgPCEtLSBUaGlzIHNlY3Rpb24gaXMgdmlzaWJsZSB0byBhbGwgdXNlcnMuIE5vIHNwZWNpYWwgbWFya3VwIGlzIG5lZWRlZCBpbiB0aGlzIGNhc2UuLS0+CiAgPHNlY3Rpb24+CiAgICBXZWxjb21lIHRvIHRoZSB3ZWJzaXRlISBUaGlzIHNlY3Rpb24gaXMgdmlzaWJsZSB0byBhbGwuCiAgPC9zZWN0aW9uPgoKICAgPCEtLSBVc2UgdGhlIGBhbXAtYWNjZXNzYCBhdHRyaWJ1dGUgdG8gY29udHJvbCB0aGUgdmlzaWJpbGl0eSBvZiBlYWNoIGNvbXBvbmVudC4gVGhlIGV4cHJlc3Npb24gbXVzdCBldmFsdWF0ZSB0byBhIGJvb2xlYW4gdmFsdWUuIElmIGl0IGV2YWx1YXRlcyB0byBgVFJVRWAsIHRoZSBzZWN0aW9uIHdpbGwgYmUgc2hvd24uCgogICAgV2UgdXNlIHRoZSBgbG9nZ2VkSW5gIHByb3BlcnR5IGZyb20gdGhlIHNlcnZlcidzIHJlc3BvbnNlIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSB1c2VyIGlzIGxvZ2dlZCBpbi4KICAtLT4KICA8c2VjdGlvbiBhbXAtYWNjZXNzPSJsb2dnZWRJbiI+CiAgICBUaGlzIHNlY3Rpb24gaXMgb25seSB2aXNpYmxlIGlmIHlvdSdyZSBsb2dnZWQgaW4uIFdlbGNvbWUgYmFjayEKICA8L3NlY3Rpb24+CgogIDwhLS0gVGhlIHJlc3BvbnNlIGZyb20gdGhlIHNlcnZlciBjYW4gYmUgdXNlZCB0byBjb252ZXkgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbG9nZ2VkIGluIHVzZXIuIEluIHRoaXMgY2FzZSwgd2UgZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIHVzZXJzIHdobyBoYXZlIHRoZSBgcG93ZXJVc2VyYCBwcm9wZXJ0eSBzZXQgaW4gYWRkaXRpb24gdG8gYmVpbmcgbG9nZ2VkIGluLgogIC0tPgogIDxzZWN0aW9uIGFtcC1hY2Nlc3M9ImxvZ2dlZEluIEFORCBwb3dlclVzZXIiPgogICAgVGhpcyBzZWN0aW9uIGlzIG9ubHkgdmlzaWJsZSBpZiB5b3UncmUgbG9nZ2VkIGluIDxlbT5hbmQ8L2VtPiBjbGFzc2lmaWVkIGFzICJwb3dlciB1c2VyIi4KICA8L3NlY3Rpb24+CgogIDwhLS0gSWYgdGhlIGBsb2dnZWRJbmAgcHJvcGVydHkgaGFzIHRoZSBkZWZhdWx0IHZhbHVlIG9mIGZhbHNlLCB3ZSBjYW4gYXNzdW1lIHRoYXQgdGhlIHVzZXIgaXMgbm90IGxvZ2dlZCBpbi4KICAgLS0+CiAgPHNlY3Rpb24gYW1wLWFjY2Vzcz0iTk9UIGxvZ2dlZEluIj4KICAgIFRoaXMgc2VjdGlvbiBpcyBvbmx5IHZpc2libGUgaWYgeW91J3JlIG5vdCBsb2dnZWQgaW4uCiAgPC9zZWN0aW9uPgoKICA8IS0tIENvbWJpbmUgYGFtcC1hY2Nlc3NgIGFuZCBgYW1wLW11c3RhY2hlYCB0byBzaG93IGluZm9ybWF0aW9uIHJldHVybmVkIGZyb20gdGhlIGF1dGhvcml6YXRpb24gcmVxdWVzdC4gSW4gdGhpcyBjYXNlIHdlIHNob3cgdGhlIGVtYWlsIHJldHVybmVkIGluIHRoZSBhdXRoZW50aWZpY2F0aW9uIHJlc3BvbnNlLgogIC0tPgogIDxzZWN0aW9uIGFtcC1hY2Nlc3M9ImxvZ2dlZEluIj4KICAgIDx0ZW1wbGF0ZSBhbXAtYWNjZXNzLXRlbXBsYXRlIHR5cGU9ImFtcC1tdXN0YWNoZSI+CiAgICAgIDxoMz5IZWxsbyB7e2VtYWlsfX0hPC9oMz4KCiAgICAgIHt7I3Bvd2VyVXNlcn19CiAgICAgIDxwPllvdSBhcmUgYSBwb3dlciB1c2VyLjwvcD4KICAgICAge3svcG93ZXJVc2VyfX0KICAgIDwvdGVtcGxhdGU+CiAgPC9zZWN0aW9uPgoKICA8IS0tICMjIExvZ2luICAtLT4KICA8IS0tIFVzZSBgb249InRhcDphbXAtYWNjZXNzLmxvZ2luLXNpZ24taW4iYCB0byBvcGVuIHRoZSBsb2dpbiBkaWFsb2cgd2hlbiB0aGUgZWxlbWVudCBpcyBjbGlja2VkLiBUaGlzIHNpbXBseSBvcGVucyBhIHBvcHVwIHdpbmRvdyB0aGF0IHRha2VzIHRoZSB1c2VyIHRvIHRoZSBVUkwgZGVmaW5lZCBpbnNpZGUgdGhlIGNvbmZpZ3VyYXRpb24gYXQgdGhlIHRvcC4gYGFtcC1hY2Nlc3MtaGlkZWAgd2lsbCBkZWZhdWx0IHRoZSBjb21wb25lbnQgdG8gYmUgaGlkZGVuIGFuZCBlbmFibGVkIGxhdGVyIGlmIHRoZSBgYW1wLWFjY2Vzc2AgZXhwcmVzc2lvbiBpcyBldmFsdWF0ZWQgdG8gYFRSVUVgIC0tPgogIDxidXR0b24gYW1wLWFjY2Vzcz0iTk9UIGxvZ2dlZEluIiBhbXAtYWNjZXNzLWhpZGUgb249InRhcDphbXAtYWNjZXNzLmxvZ2luLXNpZ24taW4iPgogICAgTG9naW4KICA8L2J1dHRvbj4KCiAgPCEtLSAjIyBMb2dvdXQgIC0tPgogIDwhLS0gVGhlIGxvZ291dCBsaW5rIHNob3VsZCBvbmx5IGJlIHNob3duIGZvciBsb2dnZWQgaW4gc3Vic2NyaWJlcnMuIFdlIHVzZSBhIHRyaWNrIGhlcmU6IHRoZSBsb2dvdXQgaXMgYSBsb2dpbiBhY3Rpb24gdGhhdCBkaXJlY3RseSByZWRpcmVjdHMgYmFjayB0byB0aGUgb3JpZ2luYWwgVVJMLiBUaGlzIGhhcyB0aGUgYWR2YW50YWdlIHRoYXQgdGhlIHBhZ2UgdXBkYXRlcyB3aXRob3V0IGJlaW5nIHJlbG9hZGVkLgogIC0tPgogIDxidXR0b24gYW1wLWFjY2Vzcz0ibG9nZ2VkSW4iIGFtcC1hY2Nlc3MtaGlkZSBvbj0idGFwOmFtcC1hY2Nlc3MubG9naW4tc2lnbi1vdXQiPgogICAgTG9nb3V0CiAgPC9idXR0b24+CiAgPCEtLSBDaGVjayBvdXQgdGhlIFtvZmZpY2lhbCBhbXAtYWNjZXNzIHNhbXBsZV0oaHR0cHM6Ly9yb2NreS1zaWVycmEtMTkxOS5oZXJva3VhcHAuY29tLykgZm9yIGRlbW9zIG9mIGZpcnN0LWNsaWNrLWZyZWUgYW5kIHZpZXcgY291bnRpbmcuIC0tPgoKICA8c2VjdGlvbiBhbXAtYWNjZXNzPSJOT1Qgc2Nyb2xsLnNjcm9sbCI+CiAgICBUaGlzIGlzIG9ubHkgc2hvd24gd2hlbiB1c2VyIG5vdCBpZGVudGlmaWVkIGFzIG1lbWJlciBvZiB0aGUgU2Nyb2xsIG5ldHdvcmsuCiAgPC9zZWN0aW9uPgo8L2JvZHk+PC9odG1sPg==)

Contributor guide

Open the contributing guide

Research direction

Start with the linked AMP Playground example and reproduce the missing validation error for an amp-access configuration using the Scroll vendor. Then trace the validator rule and the auto-extensions behavior in the NodeJS and PHP toolbox packages; done means the validator reports the missing amp-access-scroll script and both toolboxes add it automatically.

Written by the indexing model from the issue text.

Assessment

Tech stack
javascript, node.js, php
Domain
tooling
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
38/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.