We audited our own AI visibility index. It did not survive.
In June we published a study of how much AI engines disagree about the best software. Re-examining it in September, we could neither reproduce it nor interpret its headline number. We asked each engine once, which means we never measured how much a single engine disagrees with itself. Below: three measurements that should have come first, and the four-line disclosure standard we now hold ourselves to.
The correction: what we published, and why we withdrew the headline
In June 2026 we published the AI Search Disagreement Index, reporting that AI engines fully agreed on a single top tool in 0 of 16 software categories. We presented that as a finding about the engines.
It was not sound, and the reason is simple enough that we should have caught it: we asked each engine once. A measurement taken once cannot be separated from the instrument's own noise. Before you can claim two engines disagree, you have to know how much one engine disagrees with itself across repeated asks. We never established that floor, so the number was uninterpretable rather than wrong.
We are publishing the correction here rather than editing the original quietly, and the original now carries a link to this page.
Finding 1: a model does not reproduce its own answer
We asked one model the same question repeatedly within a single session and measured how much of its own answer came back. We call this SA@n, self-agreement at n runs, reported as the overlap between the sets of company names returned.
| condition | SA@3 | top pick stable |
|---|---|---|
| temperature 0.3 (a common default) | 0.293 | 53% |
| temperature 0 | 0.752 | 93% |
Temperature explains most of the instability, and almost no AI-visibility product discloses the temperature it queries at. But note that temperature 0 does not reach 1.0 either. On batched mixture-of-experts inference, expert routing and floating-point reduction are not deterministic, so a provider's "deterministic" mode is not deterministic in the sense a researcher means.
Self-agreement for every model we could measure
| model | SA | 95% CI | n questions |
|---|---|---|---|
| openai-gpt-oss 20B | 0.906 | [0.813, 0.976] | 24 |
| openai-gpt-oss 120B | 0.823 | [0.764, 0.877] | 40 |
| meta-llama 70B | 0.811 | [0.693, 0.917] | 11 |
| alibaba-qwen 72B | 0.786 | [0.688, 0.903] | 7 |
| microsoft-phi 14B | 0.619 | [0.447, 0.775] | 8 |
| deepseek V3 | 0.619 | [0.503, 0.747] | 11 |
Bootstrap confidence intervals over questions, not over pairs. Any model with fewer than 5 questions carrying repeats is reported as insufficient data rather than given a number.
These are the floors. Every claim about two models differing has to clear them.
Finding 2: model size moves the answer as much as changing lab
The same weights family at two sizes, with the same prompt, the same temperature and the same hour, set against models from entirely different labs:
| comparison | agreement | 95% CI | floor | ratio | |
|---|---|---|---|---|---|
| openai-gpt-oss 20B vs meta-llama 70B | 0.088 | [0.024, 0.176] | 0.858 | 0.10 | different lab |
| openai-gpt-oss 20B vs alibaba-qwen 72B | 0.129 | [0.079, 0.192] | 0.846 | 0.15 | different lab |
| openai-gpt-oss 120B vs alibaba-qwen 72B | 0.147 | [0.084, 0.219] | 0.804 | 0.18 | different lab |
| openai-gpt-oss 120B vs meta-llama 70B | 0.151 | [0.054, 0.256] | 0.817 | 0.18 | different lab |
| openai-gpt-oss 120B vs microsoft-phi 14B | 0.191 | [0.093, 0.314] | 0.721 | 0.26 | different lab |
| openai-gpt-oss 20B vs microsoft-phi 14B | 0.198 | [0.082, 0.327] | 0.763 | 0.26 | different lab |
| openai-gpt-oss 20B vs deepseek V3 | 0.263 | [0.162, 0.375] | 0.762 | 0.35 | different lab |
| openai-gpt-oss 120B vs openai-gpt-oss 20B | 0.289 | [0.212, 0.372] | 0.864 | 0.33 | same family, different size |
| openai-gpt-oss 120B vs deepseek V3 | 0.382 | [0.282, 0.478] | 0.721 | 0.53 | different lab |
The smaller model answers less often, and is more consistent when it does
openai-gpt-oss 20B was the only model in this run that returned an empty answer to some questions. Re-asked directly, it returns nothing at all for them, so it is declining rather than being mis-parsed. It answered 27 of the 40 questions openai-gpt-oss 120B answered.
That matters, because a model which only answers what it finds easy would look more self-consistent for a reason that has nothing to do with consistency. So we checked, expecting to have to withdraw the result:
| comparison set | openai-gpt-oss 120B | openai-gpt-oss 20B |
|---|---|---|
| all questions each model answered | 0.823 | 0.906 |
| only the 27 questions BOTH answered | 0.804 | 0.906 |
| the 13 questions the smaller model skipped | 0.862 | declined |
The gap is wider like-for-like, not narrower. And on the questions the smaller model skipped, the larger one scored 0.862, above its own average of 0.823: the skipped set was the easier one for the larger model, so the selection effect runs against this finding rather than producing it. We report the refusal rate alongside the agreement figure because "answers less often, more consistently when it does" is the complete claim, and either half alone is misleading.
Finding 3: the instruments retire faster than the studies age
We probed every model this estate has actually run in a published or frozen artifact, with a positive control in each run so that a dead API key cannot be mistaken for a retired model.
| model | lab | host | state |
|---|---|---|---|
| gpt-oss-120b | OpenAI (open weights) | Groq | ALIVE |
| gpt-oss-20b | OpenAI (open weights) | Groq | ALIVE |
| llama-3.3-70b | Meta | Groq | RETIRED |
| llama-4-scout | Meta | Groq | RETIRED |
| qwen-3.6-27b | Alibaba | Groq | RETIRED |
| compound | Groq | Groq | RETIRED |
| compound-mini | Groq | Groq | RETIRED |
| gemini-2.5-flash | ALIVE | ||
| gemini-2.5-flash-lite | ALIVE |
5 of 9 (56%) no longer answer. Retired at their provider: llama-3.3-70b, llama-4-scout, qwen-3.6-27b, compound, compound-mini. This is why the June index cannot be re-run at any price: most of its panel no longer exists. Every published AI-visibility benchmark carries this expiry and none of them print it.
The standard we should have used
Four disclosures. Short enough to adopt, specific enough to fail:
- Model and size, not just the vendor name.
- Temperature.
- Run count per question.
- Measured SA@n for that model, in that run.
A visibility score without a floor is a guess with a decimal point. Ours are published above, including the ones that make our own earlier work look worse. If you publish AI-visibility numbers, we would rather you adopted these four lines than cited us.
Method, data and limits
- Every raw answer, every report file and every instrument in this study is published at /research/ai-recommendation-reliability-2026/ under CC BY 4.0, including the failed and rate-limited cells, so coverage can be recomputed independently.
- Questions come from a bank of real buyer queries; 40 distinct questions appear in this run.
- Agreement is Jaccard overlap over canonicalised company names, so "Anthropic pricing page" and "Claude Enterprise" are not scored as a disagreement.
- Confidence intervals are bootstrap over questions, not over pairs, because the pairs inside one question are not independent.
- Several models are served through a single inference host, so a host-level effect would be common to them and must not be read as labs agreeing.
- "Retired" means the provider no longer serves that model id on the probe date, verified against each provider's own published limits and deprecation notices. The weights may still exist elsewhere. The claim is about the reproducibility of a hosted measurement, which is what these products sell.
- This is one estate's roster on one date. It is a lower bound on the problem, not a census.
Prior work and primary sources: the Generative Engine Optimization paper (Aggarwal et al., KDD 2024) established the benchmark format this field builds on; Bing Webmaster Tools AI Performance is the first-party citation telemetry we compare against; Cloudflare Radar's crawl-to-refer ratio is the model for publishing a metric others can adopt; the KDD proceedings record carries the peer-reviewed version; and the full data release is licensed CC BY 4.0.
Questions
What is SA@n?
Self-agreement at n runs: ask one model the same question n times and measure how much of its own answer it reproduces. We report it as a Jaccard overlap of the company names returned. At temperature 0 across 10 questions it was 0.752; at temperature 0.3 it was 0.293.
Does temperature 0 make a model deterministic?
No. Across our runs the best self-agreement at temperature 0 was 0.906, not 1.0. Batched mixture-of-experts inference has non-deterministic routing and float reduction, so "deterministic mode" is not deterministic in practice.
Why does model size matter so much?
In our data, openai-gpt-oss 120B and openai-gpt-oss 20B, the same weights family at two sizes, agreed on 0.289 of named companies, while openai-gpt-oss 120B and deepseek V3, from different labs, agreed on 0.382. Changing size moved the answer about as much as changing vendor.
Can this study be reproduced?
Partly, and that is the third finding. Of 9 models we have run in a published or frozen artifact, 5 (56%) no longer answer at their provider. The scripts and raw answers are published at /research/ai-recommendation-reliability-2026/ so the method can be re-run on models that still exist.
Does this mean AI visibility tools are useless?
No. It means a single score without a stated temperature, run count and model identity cannot be interpreted, because the instrument's own noise is the same order as the effects being reported. The fix is disclosure, not abandonment.