evaluateSite(site, expectedMetrics, actualMetrics, metric, lanternMetric) {
    const expectedRaw = expectedMetrics[metric];
    if (expectedRaw === undefined) return null;

    const expected = Math.round(expectedRaw);
    if (expected === 0) return null;

    const actual = Math.round(actualMetrics[lanternMetric]);
    const diff = Math.abs(actual - expected);
    const diffAsPercent = diff / expected;

    return {
      ...site,
      expected,
      actual,
      diff,
      diffAsPercent,
      metric,
      lanternMetric,
    };
  }
@param {LanternSiteDefinition} site
@param {TargetMetrics} expectedMetrics
@param {LanternMetrics} actualMetrics
@param {keyof TargetMetrics} metric
@param {keyof LanternMetrics} lanternMetric
@return {(LanternEvaluation & LanternSiteDefinition)|null}