Repository: GoogleChrome/lighthouse
Pull request #8382 (2019-04-17 22:24:49)

core(artifacts): create a PublicGathererArtifacts type
**Summary**
In conjuction with #8381, this moves us to blessed artifacts. The only non-typing change is to `ChromeConsoleMessages` which just removes the `Chrome` prefix. IMO, that feels more like the public API we might want to expose, but it's a trivial change if we want to revert.

Our friends at adspeed only use `ViewportDimensions`, `IFrameElements`, `devtoolsLogs`, and `traces`. We haven't created `IFrameElements` yet but we can always increase the scope of our blessed artifacts later.

After discussion with @brendankenny and @paulirish, we'll probably rely on documentation to prevent folks from venturing too far on their own with computed artifacts.

**Related Issues/PRs**
#8381



Patch:
diff --git a/lighthouse-core/audits/deprecations.js b/lighthouse-core/audits/deprecations.js
index acea4fd00..d7890c4b4 100644
--- a/lighthouse-core/audits/deprecations.js
+++ b/lighthouse-core/audits/deprecations.js
@@ -25,7 +25,7 @@ class Deprecations extends Audit {
       failureTitle: 'Uses deprecated APIs',
       description: 'Deprecated APIs will eventually be removed from the browser. ' +
           '[Learn more](https://www.chromestatus.com/features#deprecated).',
-      requiredArtifacts: ['ChromeConsoleMessages'],
+      requiredArtifacts: ['ConsoleMessages'],
     };
   }
 
@@ -34,7 +34,7 @@ class Deprecations extends Audit {
    * @return {LH.Audit.Product}
    */
   static audit(artifacts) {
-    const entries = artifacts.ChromeConsoleMessages;
+    const entries = artifacts.ConsoleMessages;
 
     const deprecations = entries.filter(log => log.entry.source === 'deprecation').map(log => {
       return {
diff --git a/lighthouse-core/audits/dobetterweb/geolocation-on-start.js b/lighthouse-core/audits/dobetterweb/geolocation-on-start.js
index a5cdfa328..bd2cfc312 100644
--- a/lighthouse-core/audits/dobetterweb/geolocation-on-start.js
+++ b/lighthouse-core/audits/dobetterweb/geolocation-on-start.js
@@ -25,7 +25,7 @@ class GeolocationOnStart extends ViolationAudit {
       description: 'Users are mistrustful of or confused by sites that request their ' +
           'location without context. Consider tying the request to user gestures instead. ' +
           '[Learn more](https://developers.google.com/web/tools/lighthouse/audits/geolocation-on-load).',
-      requiredArtifacts: ['ChromeConsoleMessages'],
+      requiredArtifacts: ['ConsoleMessages'],
     };
   }
 
diff --git a/lighthouse-core/audits/dobetterweb/no-document-write.js b/lighthouse-core/audits/dobetterweb/no-document-write.js
index e5c42eeed..61edf1a72 100644
--- a/lighthouse-core/audits/dobetterweb/no-document-write.js
+++ b/lighthouse-core/audits/dobetterweb/no-document-write.js
@@ -24,7 +24,7 @@ class NoDocWriteAudit extends ViolationAudit {
       description: 'For users on slow connections, external scripts dynamically injected via ' +
           '`document.write()` can delay page load by tens of seconds. ' +
           '[Learn more](https://developers.google.com/web/tools/lighthouse/audits/document-write).',
-      requiredArtifacts: ['ChromeConsoleMessages'],
+      requiredArtifacts: ['ConsoleMessages'],
     };
   }
 
diff --git a/lighthouse-core/audits/dobetterweb/notification-on-start.js b/lighthouse-core/audits/dobetterweb/notification-on-start.js
index 92e243470..d928c7007 100644
--- a/lighthouse-core/audits/dobetterweb/notification-on-start.js
+++ b/lighthouse-core/audits/dobetterweb/notification-on-start.js
@@ -25,7 +25,7 @@ class NotificationOnStart extends ViolationAudit {
       description: 'Users are mistrustful of or confused by sites that request to send ' +
           'notifications without context. Consider tying the request to user gestures ' +
           'instead. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/notifications-on-load).',
-      requiredArtifacts: ['ChromeConsoleMessages'],
+      requiredArtifacts: ['ConsoleMessages'],
     };
   }
 
diff --git a/lighthouse-core/audits/dobetterweb/uses-passive-event-listeners.js b/lighthouse-core/audits/dobetterweb/uses-passive-event-listeners.js
index 2bf4e5be0..036dd798a 100644
--- a/lighthouse-core/audits/dobetterweb/uses-passive-event-listeners.js
+++ b/lighthouse-core/audits/dobetterweb/uses-passive-event-listeners.js
@@ -25,7 +25,7 @@ class PassiveEventsAudit extends ViolationAudit {
       description: 'Consider marking your touch and wheel event listeners as `passive` ' +
           'to improve your page\'s scroll performance. ' +
           '[Learn more](https://developers.google.com/web/tools/lighthouse/audits/passive-event-listeners).',
-      requiredArtifacts: ['ChromeConsoleMessages'],
+      requiredArtifacts: ['ConsoleMessages'],
     };
   }
 
diff --git a/lighthouse-core/audits/errors-in-console.js b/lighthouse-core/audits/errors-in-console.js
index 74195a8e6..1df3399a4 100644
--- a/lighthouse-core/audits/errors-in-console.js
+++ b/lighthouse-core/audits/errors-in-console.js
@@ -23,7 +23,7 @@ class ErrorLogs extends Audit {
       description: 'Errors logged to the console indicate unresolved problems. ' +
         'They can come from network request failures and other browser concerns.',
       failureTitle: 'Browser errors were logged to the console',
-      requiredArtifacts: ['ChromeConsoleMessages', 'RuntimeExceptions'],
+      requiredArtifacts: ['ConsoleMessages', 'RuntimeExceptions'],
     };
   }
 
@@ -32,7 +32,7 @@ class ErrorLogs extends Audit {
    * @return {LH.Audit.Product}
    */
   static audit(artifacts) {
-    const consoleEntries = artifacts.ChromeConsoleMessages;
+    const consoleEntries = artifacts.ConsoleMessages;
     const runtimeExceptions = artifacts.RuntimeExceptions;
     /** @type {Array<{source: string, description: string|undefined, url: string|undefined}>} */
     const consoleRows =
diff --git a/lighthouse-core/audits/violation-audit.js b/lighthouse-core/audits/violation-audit.js
index b259537ee..92f434930 100644
--- a/lighthouse-core/audits/violation-audit.js
+++ b/lighthouse-core/audits/violation-audit.js
@@ -15,7 +15,7 @@ class ViolationAudit extends Audit {
    */
   static getViolationResults(artifacts, pattern) {
     const seen = new Set();
-    return artifacts.ChromeConsoleMessages
+    return artifacts.ConsoleMessages
         .map(message => message.entry)
         .filter(entry => entry.url && entry.source === 'violation' && pattern.test(entry.text))
         .map(entry => ({label: `line: ${entry.lineNumber}`, url: entry.url}))
diff --git a/lighthouse-core/config/default-config.js b/lighthouse-core/config/default-config.js
index 86dc25925..48951810b 100644
--- a/lighthouse-core/config/default-config.js
+++ b/lighthouse-core/config/default-config.js
@@ -114,7 +114,7 @@ const defaultConfig = {
       'css-usage',
       'viewport-dimensions',
       'runtime-exceptions',
-      'chrome-console-messages',
+      'console-messages',
       'anchor-elements',
       'image-elements',
       'link-elements',
@@ -475,6 +475,7 @@ const defaultConfig = {
         {id: 'link-text', weight: 1, group: 'seo-content'},
         {id: 'is-crawlable', weight: 1, group: 'seo-crawl'},
         {id: 'robots-txt', weight: 1, group: 'seo-crawl'},
+        {id: 'image-alt', weight: 1, group: 'seo-content'},
         {id: 'hreflang', weight: 1, group: 'seo-content'},
         {id: 'canonical', weight: 1, group: 'seo-content'},
         {id: 'font-size', weight: 1, group: 'seo-mobile'},
diff --git a/lighthouse-core/gather/gatherers/chrome-console-messages.js b/lighthouse-core/gather/gatherers/console-messages.js
similarity index 92%
rename from lighthouse-core/gather/gatherers/chrome-console-messages.js
rename to lighthouse-core/gather/gatherers/console-messages.js
index 2444e6c7f..3093c9746 100644
--- a/lighthouse-core/gather/gatherers/chrome-console-messages.js
+++ b/lighthouse-core/gather/gatherers/console-messages.js
@@ -12,7 +12,7 @@
 
 const Gatherer = require('./gatherer');
 
-class ChromeConsoleMessages extends Gatherer {
+class ConsoleMessages extends Gatherer {
   constructor() {
     super();
     /** @type {Array<LH.Crdp.Log.EntryAddedEvent>} */
@@ -41,7 +41,7 @@ class ChromeConsoleMessages extends Gatherer {
 
   /**
    * @param {LH.Gatherer.PassContext} passContext
-   * @return {Promise<LH.Artifacts['ChromeConsoleMessages']>}
+   * @return {Promise<LH.Artifacts['ConsoleMessages']>}
    */
   async afterPass(passContext) {
     await passContext.driver.sendCommand('Log.stopViolationsReport');
@@ -51,4 +51,4 @@ class ChromeConsoleMessages extends Gatherer {
   }
 }
 
-module.exports = ChromeConsoleMessages;
+module.exports = ConsoleMessages;
diff --git a/proto/sample_v2_round_trip.json b/proto/sample_v2_round_trip.json
index e9a1122bf..53783bfa9 100644
--- a/proto/sample_v2_round_trip.json
+++ b/proto/sample_v2_round_trip.json
@@ -3478,6 +3478,11 @@
                     "id": "robots-txt", 
                     "weight": 0.0
                 }, 
+                {
+                    "group": "seo-content", 
+                    "id": "image-alt", 
+                    "weight": 1.0
+                }, 
                 {
                     "group": "seo-content", 
                     "id": "hreflang", 
@@ -3511,7 +3516,7 @@
             "description": "These checks ensure that your page is optimized for search engine results ranking. There are additional factors Lighthouse does not check that may affect your search ranking. [Learn more](https://support.google.com/webmasters/answer/35769).", 
             "id": "seo", 
             "manualDescription": "Run these additional validators on your site to check additional SEO best practices.", 
-            "score": 0.9, 
+            "score": 0.82, 
             "title": "SEO"
         }
     }, 
diff --git a/types/artifacts.d.ts b/types/artifacts.d.ts
index db5e250f4..a563f5648 100644
--- a/types/artifacts.d.ts
+++ b/types/artifacts.d.ts
@@ -47,11 +47,33 @@ declare global {
       Timing: Artifacts.MeasureEntry[];
     }
 
+    /**
+     * Artifacts provided by the default gatherers that are exposed to plugins with a hardended API.
+     * NOTE: any breaking changes here are considered breaking Lighthouse changes that must be done
+     * on a major version bump.
+     */
+    export interface PublicGathererArtifacts {
+      /** Console deprecation and intervention warnings logged by Chrome during page load. */
+      ConsoleMessages: Crdp.Log.EntryAddedEvent[];
+      /** Information on size and loading for all the images in the page. Natural size information for `picture` and CSS images is only available if the image was one of the largest 50 images. */
+      ImageElements: Artifacts.ImageElement[];
+      /** All the link elements on the page or equivalently declared in `Link` headers. @see https://html.spec.whatwg.org/multipage/links.html */
+      LinkElements: Artifacts.LinkElement[];
+      /** The values of the <meta> elements in the head. */
+      MetaElements: Array<{name: string, content?: string}>;
+      /** Set of exceptions thrown during page load. */
+      RuntimeExceptions: Crdp.Runtime.ExceptionThrownEvent[];
+      /** Information on all script elements in the page. Also contains the content of all requested scripts and the networkRecord requestId that contained their content. Note, HTML documents will have one entry per script tag, all with the same requestId. */
+      ScriptElements: Array<Artifacts.ScriptElement>;
+      /** The dimensions and devicePixelRatio of the loaded viewport. */
+      ViewportDimensions: Artifacts.ViewportDimensions;
+    }
+
     /**
      * Artifacts provided by the default gatherers. Augment this interface when adding additional
-     * gatherers.
+     * gatherers. Changes to these artifacts are not considered a breaking Lighthouse change.
      */
-    export interface GathererArtifacts {
+    export interface GathererArtifacts extends PublicGathererArtifacts {
       /** The results of running the aXe accessibility tests on the page. */
       Accessibility: Artifacts.Accessibility;
       /** Array of all anchors on the page. */
@@ -60,8 +82,6 @@ declare global {
       AppCacheManifest: string | null;
       /** Array of all URLs cached in CacheStorage. */
       CacheContents: string[];
-      /** Console deprecation and intervention warnings logged by Chrome during page load. */
-      ChromeConsoleMessages: Crdp.Log.EntryAddedEvent[];
       /** CSS coverage information for styles used by page's final state. */
       CSSUsage: {rules: Crdp.CSS.RuleUsage[], stylesheets: Artifacts.CSSStyleSheetInfo[]};
       /** Information on the document's doctype(or null if not present), specifically the name, publicId, and systemId.
@@ -71,26 +91,18 @@ declare global {
       DOMStats: Artifacts.DOMStats;
       /** Relevant attributes and child properties of all <object>s, <embed>s and <applet>s in the page. */
       EmbeddedContent: Artifacts.EmbeddedContentInfo[];
-      /** All the link elements on the page or equivalently declared in `Link` headers. @see https://html.spec.whatwg.org/multipage/links.html */
-      LinkElements: Artifacts.LinkElement[];
       /** Information for font faces used in the page. */
       Fonts: Artifacts.Font[];
       /** Information on poorly sized font usage and the text affected by it. */
       FontSize: Artifacts.FontSize;
-      /** The hreflang and href values of all link[rel=alternate] nodes found in HEAD. */
-      Hreflang: {href: string, hreflang: string}[];
       /** The page's document body innerText if loaded with JavaScript disabled. */
       HTMLWithoutJavaScript: {bodyText: string, hasNoScript: boolean};
       /** Whether the page ended up on an HTTPS page after attempting to load the HTTP version. */
       HTTPRedirect: {value: boolean};
-      /** Information on size and loading for all the images in the page. Natural size information for `picture` and CSS images is only available if the image was one of the largest 50 images. */
-      ImageElements: Artifacts.ImageElement[];
       /** JS coverage information for code used during page load. */
       JsUsage: Crdp.Profiler.ScriptCoverage[];
       /** Parsed version of the page's Web App Manifest, or null if none found. */
       Manifest: Artifacts.Manifest | null;
-      /** The values of the <meta> elements in the head. */
-      MetaElements: Array<{name: string, content?: string}>;
       /** The URL loaded with interception */
       MixedContent: {url: string};
       /** The status code of the attempted load of the page while network access is disabled. */
@@ -103,10 +115,6 @@ declare global {
       ResponseCompression: {requestId: string, url: string, mimeType: string, transferSize: number, resourceSize: number, gzipSize?: number}[];
       /** Information on fetching and the content of the /robots.txt file. */
       RobotsTxt: {status: number|null, content: string|null};
-      /** Set of exceptions thrown during page load. */
-      RuntimeExceptions: Crdp.Runtime.ExceptionThrownEvent[];
-      /** Information on all script elements in the page. Also contains the content of all requested scripts and the networkRecord requestId that contained their content. Note, HTML documents will have one entry per script tag, all with the same requestId. */
-      ScriptElements: Array<Artifacts.ScriptElement>;
       /** Version information for all ServiceWorkers active after the first page load. */
       ServiceWorker: {versions: Crdp.ServiceWorker.ServiceWorkerVersion[], registrations: Crdp.ServiceWorker.ServiceWorkerRegistration[]};
       /** The status of an offline fetch of the page's start_url. -1 and a explanation if missing or there was an error. */
@@ -115,8 +123,6 @@ declare global {
       TagsBlockingFirstPaint: Artifacts.TagBlockingFirstPaint[];
       /** Information about tap targets including their position and size. */
       TapTargets: Artifacts.TapTarget[];
-      /** The dimensions and devicePixelRatio of the loaded viewport. */
-      ViewportDimensions: Artifacts.ViewportDimensions;
     }
 
     module Artifacts {


Test patch:
diff --git a/lighthouse-cli/test/cli/__snapshots__/index-test.js.snap b/lighthouse-cli/test/cli/__snapshots__/index-test.js.snap
index aeaddcff2..593c3c48d 100644
--- a/lighthouse-cli/test/cli/__snapshots__/index-test.js.snap
+++ b/lighthouse-cli/test/cli/__snapshots__/index-test.js.snap
@@ -962,6 +962,11 @@ Object {
           "id": "robots-txt",
           "weight": 1,
         },
+        Object {
+          "group": "seo-content",
+          "id": "image-alt",
+          "weight": 1,
+        },
         Object {
           "group": "seo-content",
           "id": "hreflang",
@@ -1079,7 +1084,7 @@ Object {
           "path": "runtime-exceptions",
         },
         Object {
-          "path": "chrome-console-messages",
+          "path": "console-messages",
         },
         Object {
           "path": "anchor-elements",
diff --git a/lighthouse-core/test/audits/deprecations-test.js b/lighthouse-core/test/audits/deprecations-test.js
index 0aff362a9..2fbb0b8b5 100644
--- a/lighthouse-core/test/audits/deprecations-test.js
+++ b/lighthouse-core/test/audits/deprecations-test.js
@@ -13,7 +13,7 @@ const assert = require('assert');
 describe('Console deprecations audit', () => {
   it('passes when no console messages were found', () => {
     const auditResult = DeprecationsAudit.audit({
-      ChromeConsoleMessages: [],
+      ConsoleMessages: [],
     });
     assert.equal(auditResult.score, 1);
     assert.equal(auditResult.details.items.length, 0);
@@ -21,7 +21,7 @@ describe('Console deprecations audit', () => {
 
   it('handles deprecations that do not have url or line numbers', () => {
     const auditResult = DeprecationsAudit.audit({
-      ChromeConsoleMessages: [
+      ConsoleMessages: [
         {
           entry: {
             source: 'deprecation',
@@ -41,7 +41,7 @@ describe('Console deprecations audit', () => {
     const URL = 'http://example.com';
 
     const auditResult = DeprecationsAudit.audit({
-      ChromeConsoleMessages: [
+      ConsoleMessages: [
         {
           entry: {
             source: 'deprecation',
diff --git a/lighthouse-core/test/audits/dobetterweb/geolocation-on-start-test.js b/lighthouse-core/test/audits/dobetterweb/geolocation-on-start-test.js
index e6681ab9c..b0e5c3fc3 100644
--- a/lighthouse-core/test/audits/dobetterweb/geolocation-on-start-test.js
+++ b/lighthouse-core/test/audits/dobetterweb/geolocation-on-start-test.js
@@ -15,7 +15,7 @@ describe('UX: geolocation audit', () => {
     const text = 'Do not request geolocation permission without a user action.';
 
     const auditResult = GeolocationOnStartAudit.audit({
-      ChromeConsoleMessages: [
+      ConsoleMessages: [
         {entry: {source: 'violation', url: 'https://example.com/', text}},
         {entry: {source: 'violation', url: 'https://example2.com/two', text}},
         {entry: {source: 'violation', url: 'http://abc.com/', text: 'No document.write'}},
@@ -28,7 +28,7 @@ describe('UX: geolocation audit', () => {
 
   it('passes when geolocation has not been automatically requested', () => {
     const auditResult = GeolocationOnStartAudit.audit({
-      ChromeConsoleMessages: [],
+      ConsoleMessages: [],
     });
     assert.equal(auditResult.score, 1);
     assert.equal(auditResult.details.items.length, 0);
diff --git a/lighthouse-core/test/audits/dobetterweb/no-document-write-test.js b/lighthouse-core/test/audits/dobetterweb/no-document-write-test.js
index 6a3172b72..7c49f428c 100644
--- a/lighthouse-core/test/audits/dobetterweb/no-document-write-test.js
+++ b/lighthouse-core/test/audits/dobetterweb/no-document-write-test.js
@@ -15,7 +15,7 @@ const URL = 'https://example.com';
 describe('Page does not use document.write()', () => {
   it('passes when document.write() is not used', () => {
     const auditResult = DocWriteUseAudit.audit({
-      ChromeConsoleMessages: [],
+      ConsoleMessages: [],
       URL: {finalUrl: URL},
     });
     assert.equal(auditResult.score, 1);
@@ -26,7 +26,7 @@ describe('Page does not use document.write()', () => {
     const text = 'Do not use document.write';
     const auditResult = DocWriteUseAudit.audit({
       URL: {finalUrl: URL},
-      ChromeConsoleMessages: [
+      ConsoleMessages: [
         {entry: {source: 'violation', url: 'https://example.com/', text}},
         {entry: {source: 'violation', url: 'https://example2.com/two', text}},
         {entry: {source: 'violation', url: 'http://abc.com/', text: 'Long event handler!'}},
diff --git a/lighthouse-core/test/audits/dobetterweb/notification-on-start-test.js b/lighthouse-core/test/audits/dobetterweb/notification-on-start-test.js
index 8a50e5f33..94dfe8915 100644
--- a/lighthouse-core/test/audits/dobetterweb/notification-on-start-test.js
+++ b/lighthouse-core/test/audits/dobetterweb/notification-on-start-test.js
@@ -14,7 +14,7 @@ describe('UX: notification audit', () => {
   it('fails when notification has been automatically requested', () => {
     const text = 'Do not request notification permission without a user action.';
     const auditResult = NotificationOnStart.audit({
-      ChromeConsoleMessages: [
+      ConsoleMessages: [
         {entry: {source: 'violation', url: 'https://example.com/', text}},
         {entry: {source: 'violation', url: 'https://example2.com/two', text}},
         {entry: {source: 'violation', url: 'http://abc.com/', text: 'No document.write'}},
@@ -27,7 +27,7 @@ describe('UX: notification audit', () => {
 
   it('passes when notification has not been automatically requested', () => {
     const auditResult = NotificationOnStart.audit({
-      ChromeConsoleMessages: [],
+      ConsoleMessages: [],
     });
     assert.equal(auditResult.score, 1);
     assert.equal(auditResult.details.items.length, 0);
diff --git a/lighthouse-core/test/audits/dobetterweb/uses-passive-event-listeners-test.js b/lighthouse-core/test/audits/dobetterweb/uses-passive-event-listeners-test.js
index 505fb6021..8077cac54 100644
--- a/lighthouse-core/test/audits/dobetterweb/uses-passive-event-listeners-test.js
+++ b/lighthouse-core/test/audits/dobetterweb/uses-passive-event-listeners-test.js
@@ -15,7 +15,7 @@ describe('Page uses passive events listeners where applicable', () => {
     const text = 'Use passive event listeners when you do not use preventDefault';
 
     const auditResult = PassiveEventsAudit.audit({
-      ChromeConsoleMessages: [
+      ConsoleMessages: [
         {entry: {source: 'violation', url: 'https://example.com/', text}},
         {entry: {source: 'violation', url: 'https://example2.com/two', text}},
         {entry: {source: 'violation', url: 'https://example2.com/two', text}}, // duplicate
@@ -30,7 +30,7 @@ describe('Page uses passive events listeners where applicable', () => {
 
   it('passes scroll blocking listeners should be passive', () => {
     const auditResult = PassiveEventsAudit.audit({
-      ChromeConsoleMessages: [],
+      ConsoleMessages: [],
     });
     assert.equal(auditResult.score, 1);
     assert.equal(auditResult.extendedInfo.value.length, 0);
diff --git a/lighthouse-core/test/audits/errors-in-console-test.js b/lighthouse-core/test/audits/errors-in-console-test.js
index 3238927e6..6382a9d46 100644
--- a/lighthouse-core/test/audits/errors-in-console-test.js
+++ b/lighthouse-core/test/audits/errors-in-console-test.js
@@ -13,7 +13,7 @@ const assert = require('assert');
 describe('Console error logs audit', () => {
   it('passes when no console messages were found', () => {
     const auditResult = ErrorLogsAudit.audit({
-      ChromeConsoleMessages: [],
+      ConsoleMessages: [],
       RuntimeExceptions: [],
     });
     assert.equal(auditResult.rawValue, 0);
@@ -24,7 +24,7 @@ describe('Console error logs audit', () => {
 
   it('filter out the non error logs', () => {
     const auditResult = ErrorLogsAudit.audit({
-      ChromeConsoleMessages: [
+      ConsoleMessages: [
         {
           entry: {
             level: 'info',
@@ -42,7 +42,7 @@ describe('Console error logs audit', () => {
 
   it('fails when error logs are found ', () => {
     const auditResult = ErrorLogsAudit.audit({
-      ChromeConsoleMessages: [
+      ConsoleMessages: [
         {
           entry: {
             level: 'error',
@@ -98,7 +98,7 @@ describe('Console error logs audit', () => {
 
   it('handle the case when some logs fields are undefined', () => {
     const auditResult = ErrorLogsAudit.audit({
-      ChromeConsoleMessages: [
+      ConsoleMessages: [
         {
           entry: {
             level: 'error',
@@ -119,7 +119,7 @@ describe('Console error logs audit', () => {
   // Checks bug #4188
   it('handle the case when exception info is not present', () => {
     const auditResult = ErrorLogsAudit.audit({
-      ChromeConsoleMessages: [],
+      ConsoleMessages: [],
       RuntimeExceptions: [{
         'timestamp': 1506535813608.003,
         'exceptionDetails': {
diff --git a/lighthouse-core/test/results/artifacts/artifacts.json b/lighthouse-core/test/results/artifacts/artifacts.json
index d91391fc8..0aef7b229 100644
--- a/lighthouse-core/test/results/artifacts/artifacts.json
+++ b/lighthouse-core/test/results/artifacts/artifacts.json
@@ -406,7 +406,7 @@
       }
     }
   ],
-  "ChromeConsoleMessages": [
+  "ConsoleMessages": [
     {
       "entry": {
         "source": "other",
diff --git a/lighthouse-core/test/results/sample_v2.json b/lighthouse-core/test/results/sample_v2.json
index c7ed7e658..b9e493af3 100644
--- a/lighthouse-core/test/results/sample_v2.json
+++ b/lighthouse-core/test/results/sample_v2.json
@@ -3491,6 +3491,11 @@
           "weight": 0,
           "group": "seo-crawl"
         },
+        {
+          "id": "image-alt",
+          "weight": 1,
+          "group": "seo-content"
+        },
         {
           "id": "hreflang",
           "weight": 1,
@@ -3522,7 +3527,7 @@
         }
       ],
       "id": "seo",
-      "score": 0.9
+      "score": 0.82
     },
     "pwa": {
       "title": "Progressive Web App",
@@ -5438,4 +5443,4 @@
     }
   },
   "stackPacks": []
-}
+}
\ No newline at end of file