lab-notes
BuilderProof editorial team16 min read283 views

Deploy quality: why two Lighthouse runs disagree (2026)

Two Lighthouse runs on the same deployed AI-builder output rarely return the same score. This note documents the variance phenomenon, names its seven sources from Google's own documentation, and publishes the median-of-five protocol a hands-on deploy-quality harness would have to meet. Corrected August 21, 2026: the June 2026 result table it accompanied has been withdrawn, and the account of how that table was produced is withdrawn with it.

Updated on August 21, 2026

Lab-notebook illustration of two web-performance score gauges reading slightly differently, parchment background with teal linework
Lab-notebook illustration of two web-performance score gauges reading slightly differently, parchment background with teal linework
On this page
Corrected August 21, 2026

This note was originally published on June 21, 2026 as a companion to the June 2026 deploy-quality result table. That table has since been withdrawn at source, and two things in this note have been corrected as a consequence. First, every statement that the deploy-quality table "remains the published reference" or "is unchanged by this note" is obsolete and has been removed; there is no published deploy-quality result set to defend or annotate. Second, a section describing how the v1 table was produced (audit machine, browser version, single-run protocol, axe-core pass) has been withdrawn: BuilderProof does not hold run artifacts for those figures, so an account of how they were produced is not something this lab can substantiate. What remains, and what this note is now for, is the variability constraint itself and the reproducibility protocol any future hands-on harness would have to meet. See methodology v1.1 for the current evidence basis.

Quick Answer

Two Lighthouse runs on the same deployed AI-builder output rarely return the same score, and a fluctuation of 5 to 10 points between consecutive runs on an unchanged page is normal, not a sign of a regression. This lab note, first published June 21, 2026 and corrected August 21, 2026, documents the variance phenomenon, names its seven primary sources after Google's own variability documentation, and publishes the median-of-five reproducibility protocol a hands-on deploy-quality harness would have to meet. BuilderProof publishes no deploy-quality result set at present: the June 2026 table was withdrawn. Any future publication reports median plus interquartile range, never a single run.

The hardest problem in scoring deploy quality is not deciding which builder wins. It is that two operators running Lighthouse against the same deployed artifact, on different machines and on different days, repeatedly produce different scores.1

This is not a flaw in any builder. It is a property of the measurement tool, and the Lighthouse team has documented it for years. But it has hard implications for how a benchmark may report deploy-quality numbers, and those implications were not addressed in the June 2026 axis as originally published. This note addresses them, and the correction notice above records how that failure was resolved.

What this post is and is not

This is a reproducibility note, and after the August 2026 correction it is a method-only document. It scores no builder and it restates no withdrawn number. What it publishes is the protocol a hands-on deploy-quality harness would have to follow, so that a reader can contest the procedure before any builder is scored under it.

The protocol applies symmetrically to every builder assessed. No builder is audited under different conditions from any other, and none is exempt from the run-log requirement in step 8.

The phenomenon

Lighthouse measures a deployed page along five categories: performance, accessibility, best practices, SEO, and progressive-web-app readiness. The BuilderProof deploy-quality axis reports three of those (performance, accessibility, SEO) plus a structured SEO checklist that goes beyond the Lighthouse SEO category.

The Lighthouse team's official variability documentation states the constraint directly: "The median Lighthouse score of 5 runs is twice as stable as 1 run."2 The implication is the inverse: a single Lighthouse run is, by Google's own measurement of its own tool, the least stable reporting unit available.

The public-facing magnitude of the drift is reported by independent practitioners in roughly the same range. A 2026 community write-up summarising the published guidance puts it at "a score fluctuation of 5 to 10 points between consecutive Lighthouse runs on the same page is completely normal. A fluctuation of 15 points or more" usually indicates a real change.3 The withdrawn June 2026 deploy-quality table reported single-run numbers. That reporting choice is exactly why a reader reproducing it could land 5 to 10 points away without anything having changed, and it is part of why the figures were withdrawn rather than annotated.

Seven sources of variability

A reproducibility protocol is only useful if it names what it is trying to control. Google's variability documentation lists seven primary sources of Lighthouse score variability. Translated to the AI-builder benchmark context, with notes on which sources the protocol can address and which it cannot:

Scroll to see more

#SourceDefinition (paraphrased from Google docs)Can the protocol control it?
1Page nondeterminismA-B tests, randomised layouts, variable ad experiences served by the deployed page itselfPartially: the protocol can disable A-B tests on the operator side; vendor-side randomness has to be accepted
2Local network variabilityPacket loss, traffic shaping, bandwidth congestion on the operator's networkYes: pin to a controlled environment (loopback, internal network, or a fixed throttling profile)
3Tier-1 network variabilityCross-geo latency between the operator and the deployed originPartially: pin the audit location, fix the throttling, accept residual cross-geo noise
4Web-server variabilityInconsistent response delay from the origin or its CDNNo: this is a property of the builder's deploy target
5Client hardware variabilityProcessor and memory differences between audit machinesYes: fix the audit machine spec (per Google's recommendation, minimum 2 dedicated cores and 2 GB RAM; 4 cores plus 4 to 8 GB preferred)
6Client resource contentionBackground processes, browser extensions, anti-virus interfering with the auditYes: clean profile, no extensions, no concurrent Lighthouse runs
7Browser nondeterminismInherent execution-order variability in the browser engine itselfNo: this is the irreducible floor the median-of-N approach is designed to absorb

Four of the seven sources are addressable by the operator running the audit. Three (web-server variability, cross-geo latency residual, and browser nondeterminism) are not, and the median-of-five protocol is the residual mitigation for those.

Withdrawn: how the v1 table was produced

This section previously described the conditions under which the June 2026 deploy-quality table was produced: a single operator machine, a named browser version, one Lighthouse run per dimension per builder, an axe-core accessibility pass, and a single afternoon of sequential audits.

That account has been withdrawn as of August 21, 2026. The table it described has itself been withdrawn, and BuilderProof does not hold the per-run output, the machine record or the audit log that would let a reader verify any part of the description. A procedural account of a run that cannot be evidenced is not a methodology disclosure, it is a claim, and this lab does not publish claims it cannot support. Nothing is substituted in its place.

The consequence is worth stating plainly rather than burying: the protocol below has never been executed. It is a pre-registration, not a report. Publishing it still has value, because a protocol published before any score exists can be argued with on its merits instead of being reverse-engineered from a result someone already dislikes. But a reader should not infer from its specificity that a run happened.

The protocol the next iteration will adopt

The next iteration of the deploy-quality axis will follow this protocol on each of the seven builders in the cohort. The protocol is published here so that an external party reproducing or contesting the next deploy-quality table has a documented procedure to compare against.

Deploy-quality reproducibility protocol (v2-draft, June 21, 2026)
  1. Five runs per dimension per builder. Five Lighthouse runs per builder, per dimension (performance, accessibility, SEO). Total: 7 builders × 3 dimensions × 5 runs = 105 Lighthouse runs per axis pass. axe-core runs are categorical, not score-based, and stay at one run per builder.
  2. Median plus interquartile range. Each dimension cell in the table reports the median of the five runs, with the interquartile range (Q3 minus Q1) noted in a hover tooltip and a footnote. The single-number historical view stays available behind a toggle for continuity.
  3. Fixed audit machine. Audits run on a fixed laptop spec recorded in the methodology page (4 dedicated CPU cores, 8 GB RAM, no extensions, single user profile, no concurrent processes, no other Lighthouse instance running). This addresses sources 5 and 6 from the table above.
  4. Fixed throttling profile. Lighthouse Simulated throttling with the default 4G profile, locked to that profile for every builder in the run. No mobile-vs-desktop mixing within a single axis cell.
  5. Fixed audit location. A single geographic origin and a single ISP per axis pass. The location is recorded in the run-log metadata so that a counter-result from a different location can be evaluated against the same constraint.
  6. Operator-side A-B disabled. Where the operator running Lighthouse has any controlled randomisation (browser cookies, locale, viewport variants), it is fixed for the audit. This addresses part of source 1 from the table above.
  7. Cooldown between runs. A 30-second pause between runs on the same builder to let the operator machine return to a steady state, per the Lighthouse team's recommendation against concurrent runs.
  8. Run-log published. The full per-run JSON output for every Lighthouse run that contributes to a published number is archived in a public run-log so a reader can recompute the median, the IQR, or any other statistic of interest.

The protocol does not eliminate variance. It controls four of the seven sources of variance and reports the residual three honestly through the median-and-IQR pair. A counter-result that disagrees with a published median is now a falsifiable claim that has to be argued against the protocol, not against a single number.

Worked example: when median changes the recommendation

A worked example shows why the median-and-IQR pair matters more than the single number.

Suppose two hypothetical builders (call them X and Y) are audited on the deploy-quality performance dimension. Each gets five Lighthouse runs under the protocol above.

Scroll to see more

RunBuilder XBuilder Y
19194
28986
39092
48781
59290

Single-run reporting (the v1 approach). If only run 1 is reported, X scores 91 and Y scores 94, and Y looks better by 3 points. If only run 4 is reported, X scores 87 and Y scores 81, and X looks better by 6 points. The single-run reporting is unstable enough that, on this synthetic data, the direction of the comparison flips depending on which run the operator picks.

Median-of-five (the v2 protocol). X's runs sorted are 87, 89, 90, 91, 92; median 90, Q1 89, Q3 91, IQR 2. Y's runs sorted are 81, 86, 90, 92, 94; median 90, Q1 86, Q3 92, IQR 6. The medians are tied at 90. The IQR is informative: X is much more stable (IQR 2) than Y (IQR 6) on this dimension. A reader optimising for predictable performance picks X; a reader optimising for peak performance and tolerant of variance picks Y. Both readings are defensible from the same five runs, and both are obscured by single-number reporting.

The published table cell under the v2 protocol would read something like "90 (IQR 2)" for X and "90 (IQR 6)" for Y. The interesting comparison moves from the median to the IQR, which is what the data actually supports.

Where the protocol runs out of road

Reproducibility protocols address measurement variance. They do not address artifact variance, which is the larger problem when scoring an AI builder.

The published v2 first-build stability proposal introduced a six-category failure taxonomy (F1 through F6) for first-build outcomes. Two of those categories are directly relevant to deploy-quality reproducibility:

  • F4: deploy failure. The builder produces an artifact that does not deploy successfully on the first attempt; a manually patched deploy is then audited. The deploy-quality score of the patched build is not the same data point as the deploy-quality score of an unpatched build, but a single number does not surface that distinction. The next iteration of the axis will tag any cell where the audited build required a manual patch.
  • F6: vendor outage during the audit window. If the builder's hosting layer or CDN is degraded during the audit, the Lighthouse score reflects the outage rather than the deployed artifact. The protocol's audit-location and cooldown rules cannot help here. The next iteration will flag any run that overlaps a vendor incident (cross-referenced against the vendor's public status page) and exclude it from the median computation, with the exclusion noted in the run-log.

Both of these are outside the protocol's measurement-variance scope and are honest acknowledgements that even a well-designed reproducibility protocol has a floor below which the data is contaminated by the builder's own operational state.

What this means for a reader comparing deploy quality today

With the June 2026 table withdrawn, there is no BuilderProof deploy-quality result to interpret. A reader comparing builders on deploy quality in the meantime is better served by the constraint than by any number:

  1. Treat any single Lighthouse figure you see quoted anywhere, by any publication, as a point estimate carrying roughly plus-or-minus 5 to 10 points of noise, consistent with Google's own variability guidance and the community-reported drift range. That includes figures published by vendors about themselves.
  2. Prefer categorical signals over score signals. A recurring failure mode ("ships a client-only bundle", "no server-rendered HTML for crawlers") reproduces across runs; a performance score does not.
  3. Prefer axe-core style categorical accessibility findings over the Lighthouse accessibility score, for the same reason: an element either has an accessible name or it does not.
  4. If a comparison hinges on a gap smaller than 15 points, the gap is inside the noise floor and no single-run source, this one included, can settle it. Run the median-of-five protocol below on the two candidates yourself.

The documentation-derived deploy-quality assessment remains published and is explicit about being read off vendor documentation rather than measured. It is the honest substitute for a withdrawn measurement, and it is not the same thing as one.

Open questions

  1. Five runs versus eleven. Google's own documentation recommends a minimum of five and notes diminishing returns above that. Some practitioners argue eleven runs is the floor for reliable IQR estimation. The protocol fixes five for the next pass; a contributor argument for eleven is welcome.
  2. Throttling profile. Simulated throttling is more reproducible than DevTools throttling but less faithful to a real client. The protocol picks reproducibility; a counter-argument for fidelity (with a worked example showing where the recommendation would change) would shift the choice.
  3. Per-dimension medians versus a composite. The current table reports three dimensions independently. A composite "deploy quality" number is computable but obscures the dimension that drove the median. The protocol keeps the dimensions independent. A reader who prefers a composite view should construct it themselves from the run-log.
  4. F6 vendor-outage cross-reference. Several builders in the cohort do not publish a status page granular enough to cross-reference a five-minute Lighthouse run against. The protocol falls back to operator-recorded incident notes in those cases. A more robust mechanism is open.

Responses to these open questions are best raised against this lab note rather than against the June 2026 deploy-quality table, which this note does not modify.

FAQ

Q1. Is there a published BuilderProof deploy-quality score?
No, not as of August 21, 2026. The June 2026 table was withdrawn at source. This note documents the reporting protocol a future hands-on harness would have to meet before any score is published again.

Q2. Why is a 5-to-10-point Lighthouse difference normal?
Because Lighthouse measures a real deployed page across a noisy chain: network, server, client hardware, browser execution order. Google's own variability documentation lists seven sources of variability and reports that five-run medians are roughly twice as stable as single runs.

Q3. What would a run under this protocol change?
There is no prior ranking for it to change, because the v1 results were withdrawn. What the protocol buys is that any future ranking arrives with a median, an interquartile range and a published run-log, so a gap smaller than the noise floor is visible as such instead of being read as a difference.

Q4. Why publish the protocol before the run?
So that a reader who disagrees with the protocol can contest it before any builder has been scored under it. Publishing the rubric before producing scores is the same discipline applied in the v1 methodology and the v2 first-build stability proposal.

Q5. What about Lighthouse versus PageSpeed Insights?
PageSpeed Insights runs Lighthouse on Google infrastructure, which adds tier-1 network variability the protocol cannot control. The protocol pins audits to Lighthouse running locally on the fixed audit machine.

Q6. Does the protocol apply to axe-core accessibility checks?
Less directly. axe-core failures are categorical (an element either has a missing label or it does not). The single-run-per-builder model stays for the accessibility axe-core pass; only the Lighthouse-score dimensions move to median-of-five.

Q7. When will a deploy-quality table be published?
No date, and stating one would be dishonest. The blocking dependency is not the protocol, it is hands-on access: executing it requires running each builder in the cohort through a controlled build on a real account. Until that exists, this axis publishes method and a documentation-derived assessment, and no measured scores.

References

  1. Withdrawn August 21, 2026. This reference previously cited internal lab-notebook entries and a quoted external reader remark. Neither is a publicly checkable source, and BuilderProof does not retain the notebook it pointed to, so it cannot support a claim on this page. The variability constraint itself is sourced from references 2 to 4 below, all of which are public.
  2. Google Chrome team. Lighthouse Score Variability documentation. Verbatim: "The median Lighthouse score of 5 runs is twice as stable as 1 run." Retrieved June 21, 2026.
  3. Community write-up. Why Lighthouse scores vary between runs. Verbatim: "A score fluctuation of 5 to 10 points between consecutive Lighthouse runs on the same page is completely normal. A fluctuation of 15 points or more" usually indicates a real change. Dated April 23, 2026.
  4. Practitioner reference. DebugBear: How to reduce variance between Lighthouse tests. Useful for the disable-A-B-tests and third-party-isolation parts of the protocol. Dated April 9, 2026.
  5. BuilderProof deploy-quality axis definition. Deploy quality: brief and rubric (June 2026, results withdrawn August 21, 2026). The axis this protocol is written for. Method only; it publishes no scores.
  6. BuilderProof v1 methodology. How we benchmark AI app builders: the BuilderProof methodology v1. The reference methodology the protocol is intended to fit into.
  7. BuilderProof v2 first-build stability proposal. First-build stability: a v2 axis proposal (June 2026). Source of the F4 and F6 failure-mode taxonomy referenced in the protocol's out-of-road section.

Cite this benchmark

Plain text
BuilderProof editorial team. "Deploy quality: why two Lighthouse runs disagree (2026)". BuilderProof, June 2026. https://www.builderproof.org/benchmarks/deploy-quality-reproducibility-why-two-lighthouse-runs-disagree-june-2026.
BibTeX
@misc{builderproof-deploy-quality-reproducibility-why-two-lighthouse-runs-disagree-june-2026,
  title  = {{Deploy quality: why two Lighthouse runs disagree (2026)}},
  author = {{BuilderProof editorial team}},
  year   = {2026},
  month  = {jun},
  howpublished = {\url{https://www.builderproof.org/benchmarks/deploy-quality-reproducibility-why-two-lighthouse-runs-disagree-june-2026}},
  note   = {BuilderProof, builderproof.org}
}

Frequently asked questions

Does this change any score in the June 2026 deploy-quality table?

No. The June 2026 deploy-quality table is unchanged. This note documents how the next iteration will report the same axis, not how the current one is revised.

Why is a 5-to-10-point Lighthouse difference normal?

Because Lighthouse measures a real deployed page across a noisy chain: network, server, client hardware, browser execution order. Google's own variability documentation lists seven sources of variability and reports that five-run medians are roughly twice as stable as single runs.

Will the v2 protocol re-rank the cohort?

It may shift small gaps. Where two builders sit within 10 points of each other on the v1 table, the v2 medians may rank them differently or tie them. Where the v1 gap is larger than 15 points, the v2 ranking is unlikely to flip.

Why publish the protocol before the run?

So that a reader who disagrees with the protocol can contest it before any builder has been scored under it. Publishing the rubric before producing scores is the same discipline applied in the v1 methodology and the v2 first-build-stability proposal.

What about Lighthouse versus PageSpeed Insights?

PageSpeed Insights runs Lighthouse on Google infrastructure, which adds tier-1 network variability the protocol cannot control. The protocol pins audits to Lighthouse running locally on the fixed audit machine.

Does the protocol apply to axe-core accessibility checks?

Less directly. axe-core failures are categorical (an element either has a missing label or it does not). The single-run-per-builder model stays for the accessibility axe-core pass; only the Lighthouse-score dimensions move to median-of-five.

When will the v2 deploy-quality table be published?

No firm date as of June 21, 2026. The dependencies are: lock the run-log infrastructure, agree the protocol with any external contributor responses to this lab note, then schedule the seven-builder audit run.