GoogleChrome/lighthouse · error · Error

Step "${name}" did not return a result

Error message

Step "${name}" did not return a result

What it means

Thrown by auditGatherSteps() when Runner.audit() returns a falsy value (null or undefined) for a specific gather step. Runner.audit processes the step's artifacts through all configured audits. A null return indicates the audit was programmatically skipped or failed internally without throwing. This is an internal failure in the auditing pipeline, not a user API misuse.

Source

Thrown at core/user-flow.js:340

    const {artifacts, flags} = gatherStep;
    const name = getStepName(flags, artifacts);

    let runnerOptions = options.gatherStepRunnerOptions?.get(gatherStep);

    // If the gather step is not active, we must recreate the runner options.
    if (!runnerOptions) {
      // Step specific configs take precedence over a config for the entire flow.
      const config = options.config;
      const {gatherMode} = artifacts.GatherContext;
      const {resolvedConfig} = await initializeConfig(gatherMode, config, flags);
      runnerOptions = {
        resolvedConfig,
        computedCache: new Map(),
      };
    }

    const result = await Runner.audit(artifacts, runnerOptions);
    if (!result) throw new Error(`Step "${name}" did not return a result`);
    steps.push({lhr: result.lhr, name});
  }

  return {steps, name: getFlowName(options.name, gatherSteps)};
}


export {
  UserFlow,
  auditGatherSteps,
  getStepName,
  getFlowName,
  UIStrings,
};

View on GitHub (pinned to 9515cd4e58)

Solutions

  1. Check the Lighthouse version — ensure gather and audit use the same version
  2. Inspect the specific step's artifacts for completeness — verify GatherContext, URL, and settings are populated
  3. Enable debug logging to see Runner.audit internal behavior before the null return
  4. If using a custom config, verify it includes audits and doesn't filter them all out
  5. Try re-running the gather step — transient failures can produce incomplete artifacts
Defensive patterns

Strategy: try-catch

Try / catch

for (const gatherStep of gatherSteps) {
  const result = await Runner.audit(artifacts, runnerOptions);
  if (!result) {
    console.warn(`Step produced no result — check artifacts and config compatibility`);
    continue; // or collect failures and report at end
  }
  steps.push({lhr: result.lhr, name});
}

Prevention

When it happens

Trigger: Called from auditGatherSteps (user-flow.js:339). Fires when Runner.audit(artifacts, runnerOptions) returns null/undefined. This happens when the Runner encounters a condition that causes it to return null — typically an internal error path, a configuration that disables all audits, or a corrupted artifacts object that fails validation silently.

Common situations: Internal Lighthouse bug in Runner.audit for a specific artifacts shape. Corrupted or incomplete artifacts from a failed gather step. A custom config that removes all audits. Version mismatch between the gather and audit phases. Artifacts loaded from a saved flow that are missing required fields.

Related errors


AI-assisted analysis of GoogleChrome/lighthouse@9515cd4e58 (2026-08-13). Data as JSON: /api/errors/a93ffe99476b043c. Report an issue: GitHub.