Does semantic cache verification actually work?

Four papers on the same question, sharing one dataset battery, gray-zone architecture, and honest-calibration protocol — with the code and raw results public. We took the positive results seriously and tried just as hard to break them; here is what held and what didn't.

Updated September 9, 2026 · code and raw results: github.com/imxinchengyou/CacheVerifier · for the conceptual breakdown (false-positive taxonomy, hallucination memory, risk buckets), see Why Similarity Fails

Key findings

  • The mechanism is sound. With a perfect (oracle) verifier, synchronous gating lifts cache hit rate 20–28 percentage points at a matched error rate on both benchmarks — the headroom is real. (Core)
  • Off the shelf, most of that headroom goes unrealized. A real cross-encoder verifier delivers about +2pp at its best operating point, and the result is sensitive to configuration and data domain — a weak Go, not a blanket yes. (Core)
  • In-domain fine-tuning is the validated fix, and it's cheap. Fine-tuning the same verifier on your own gray-zone labels turns a fragile or net-harmful result into a consistent win across three benchmarks; it tolerates ~32% label noise and needs ~1,000 examples. (Core)
  • A formal error-rate guarantee is available and nearly free. Conformal Risk Control certifies a threshold that holds false-reuse risk at or below a target, exact at finite sample sizes, at under 3% utility cost versus an oracle — under a random split. (Paper B)
  • Real traffic drift can loosen that guarantee — and there's a fix. Chronological calibrate-then-deploy overshot the target by ~20–25% on one benchmark; an online adaptive threshold restores tracking. On multi-year production support traffic, fine-tuning itself turned actively harmful when the gray-zone positive rate drifted 5×, catchable with a cheap label-only monitor. (Core, Paper B, Paper D)
  • The cache can degrade itself over time. When it only grows on misses, its own reuse decisions reshape future candidates; realized risk more than triples on high-direct-hit-rate traffic, and only partly recovers with online recalibration. (Paper B)
  • Once a wrong answer costs more than ~1 extra model call, verification beats raising the threshold — on every dataset tested. Below that, just raise the threshold. (Paper B)
  • Deliberately adversarial phrasing breaks the off-the-shelf verifier: 84% false-accept. Fine-tuning on natural data gives no protection; targeted adversarial training plus an NLI-pretrained base bring it to single digits (5.9% / 3.6% / 15.7% across three datasets). (Paper C, Paper D)

Publications

Systems · Non-stationaritySeptember 2026

Stress-Testing Semantic Cache Reuse Decisions: Uncertainty Signals, a Discarded Similarity Signal, and Online Adaptive Thresholds

Tests several ways to get more from the verifier without retraining it. Two fail (uncertainty-based abstention; a per-request validity gate). Two work: feeding the discarded similarity score back into the decision, and an online adaptive threshold with its own finite-sample guarantee. An NLI-pretrained base cuts the adversarial false-accept rate to single digits.

doi.org/10.5281/zenodo.22665785

Risk control · EconomicsAugust 2026

Finite-Sample Risk Control for Semantic Cache Reuse Decisions: Formal Guarantees, a Self-Selection Feedback Loop, and Economics

Attaches a distribution-free, finite-sample error-rate guarantee (Conformal Risk Control) to the reuse decision, stress-tests it under chronological drift and a self-selection feedback loop, and gives an explicit cost-ratio rule for when synchronous verification is worth deploying.

doi.org/10.5281/zenodo.22663725

Robustness · Red-teamingAugust 2026

Adversarial Robustness of Semantic Cache Verifiers: Gaps Exposed by Red-Teaming and Partial Repair via Training

An off-the-shelf verifier false-accepts 84% of deliberately constructed adversarial query pairs; in-domain fine-tuning provides no protection; targeted adversarial training on five failure axes brings it down to 53.6%.

doi.org/10.5281/zenodo.22661312

Empirical study · Go/No-GoJuly 2026

Synchronous Online Verification Gating in Semantic Caches: An Empirical Study — Part I: Core Findings and the Go/No-Go Verdict

With an oracle verifier, synchronous gating lifts hit rate 20–28 points at matched error rate. With a real off-the-shelf verifier the gain collapses to about 2 points and is highly domain-dependent — a weak Go. In-domain fine-tuning on your own gray-zone labels is the validated remedy.

doi.org/10.5281/zenodo.22660442

All four were distilled from a single complete technical report — doi.org/10.5281/zenodo.21703364 (concept DOI, resolves to the latest version).

Correction (2026-08-09): the SearchQueries dataset's candidate-answer field turned out to be an unpopulated placeholder for every record upstream, not the real generated answers this page originally reported — the verifier's second scoring input carried no information. Real answers were regenerated and every SearchQueries number below reflects that corrected re-run, not the original publication. LmArena and Quora were never affected. Full details in the Core paper's §5.7 erratum note.

4

independent datasets

3 public benchmarks + real support traffic from two brands

~130K

gray-zone examples evaluated

labeled (query, cached answer) pairs across all four datasets

~32%

label-noise breakeven point

nearly identical across all three benchmarks

1,000

examples for the hardest dataset to turn positive

LmArena and Quora help almost immediately; SearchQueries needs the most data

Question 1

How noisy can feedback labels be before fine-tuning backfires?

Production feedback (thumbs up/down, ticket reopens) is noisier than a research dataset's ground truth. We took a fixed 4,000-example slice per dataset and randomly flipped labels at six target noise rates, always evaluating against the untouched, clean held-out test set.

-0.13-0.06+0.00+0.07+0.130%5%10%20%30%40%LmArenaSearchQueriesQuora
View data table
Noise rateLmArenaSearchQueriesQuora
0%+0.1071+0.0168+0.0827
5%+0.0947+0.0153+0.0781
10%+0.0826+0.0161+0.0736
20%+0.0513+0.0147+0.0440
30%+0.0277+0.0035+0.0061
40%-0.1006-0.0108-0.0373

All three curves decay smoothly and now cross zero in nearly the same range — ~32% noise (32.2% LmArena, 32.1% SearchQueries, 31.4% Quora; Core paper §5.7). The shape holds across datasets, so we treat this as a conservative red line: below it, self-serve fine-tuning is safe by default; above it, the service now holds the new model back automatically instead of just warning — a job whose train_label_disagreement_rate clears a 30% cutoff comes back model_status: "held_for_review" rather than auto-activating (see the docs). A Health Check Report — a dry run against your own data, nothing deployed — is still the cheapest way to check where you land before running a real job.

Question 2

How much feedback do you need before fine-tuning is worth it?

A new tenant starts with zero labels. We fine-tuned independent models on increasing prefixes of each dataset's training stream — from 50 examples up to the full set — to find the point where it reliably helps rather than hurts.

-0.04+0.02+0.09+0.15+0.21501002005001000200040008000FullLmArenaSearchQueriesQuora
View data table
ExamplesLmArenaSearchQueriesQuora
50+0.0008-0.0126+0.0119
100+0.0115-0.0167+0.0194
200+0.0301-0.0170+0.0178
500+0.0504-0.0085+0.0015
1000+0.0798+0.0036+0.0491
2000+0.1096+0.0157+0.0655
4000+0.1361+0.0293+0.0963
8000+0.1706+0.0493+0.1086
Full+0.1879+0.1426+0.1176

All three curves keep climbing with more data — no plateau, even at the full training set. But below roughly 1,000 examples, SearchQueries — the dataset with the weakest untuned baseline — shows fine-tuning can actually be negative, not just "smaller gains"; Quora dips close to zero around 500 examples but stays positive, and LmArena is positive from the smallest sample size we tested. The risk is concentrated in domains where the untuned baseline is already weak. 1,000 examples is the smallest point where every dataset we tested turned reliably positive, so that's our default minimum before we recommend switching on fine-tuning.

Question 3

Does a fine-tuned verifier decay over time?

We split each dataset into 8 chronological chunks, fine-tuned a fresh model on each chunk as an "anchor," then evaluated every anchor against every chunk — including ones far in its future — and averaged the gain over baseline by time distance.

-0.04+0.06+0.15+0.25+0.3401234567LmArenaSearchQueriesQuora
View data table
Distance (chunks)LmArenaSearchQueriesQuora
0+0.1930+0.3080+0.2980
1+0.1110+0.0824+0.0890
2+0.1220+0.0781+0.0850
3+0.1210+0.0802+0.0840
4+0.1240+0.0751+0.0850
5+0.1130+0.0736+0.0840
6+0.1020+0.0668+0.0860
7+0.1290+0.0560+0.0690

After the initial same-window drop (distance 0→1, a memorization effect, not real generalization), LmArena and Quora both stay flat out to a distance of 7 chunks — no sign of decay. SearchQueries doesn't: its own baseline accuracy declines gradually over the same window, and the fine-tuning gain decays alongside it — down roughly a third from distance 1 to distance 7. That's real but mild drift, nowhere near the catastrophic decay in the Comcast counter-example below. Two of three benchmarks argue against needing high-frequency retraining; the third is a reminder to actually monitor for drift rather than assume it away.

Question 4

Can you actually guarantee my false-reuse rate?

Fine-tune jobs can certify a threshold via Conformal Risk Control (Angelopoulos et al., arXiv 2208.02814): a distribution-free, finite-sample guarantee that accepting only candidates above the certified threshold holds false-reuse risk at or below a target you set. Paper B tests how much that guarantee is worth, in two regimes. (Today, certification is informational — it reports the threshold that would satisfy your target, separately from whatever threshold /v1/verify actually enforces: Youden’s J by default, or a cost-sensitive pick — see Question 6 below.)

Under a random calibration/test split, the guarantee is exact and nearly free. Across all three benchmarks and four risk targets (5% down to 0.5%), realized risk lands almost exactly on target, at under 3% utility cost versus an oracle that knows the full score distribution — shrinking further with more data. A side finding: a verifier’s AUC ranking does not predict its usefulness under a fixed risk budget — SearchQueries has the lowest AUC of the three (0.60) yet certifies a higher reuse rate than Quora (AUC 0.63) at every target.

Under a chronological split — calibrate on past traffic, deploy on future traffic, which is what a real tenant does — it depends on how the traffic drifts:

  • LmArena: the guarantee held, conservatively, at every target.
  • SearchQueries: a real but mild overshoot (~20–25% above target), from a slow covariate drift in the verifier’s own score distribution as the cache fills — the detectable kind.
  • Quora: every target overshot, badly (up to 80% at the tightest). But Paper D re-checked this with an independent judge relabel and found the “drift” was an artifact of how the QQP dataset was assembled — its record order isn’t time, and the apparent difficulty gradient vanishes under fresh labels. Not a real production-drift failure.

The fix for the real case is an online adaptive threshold. Paper D adapts the certified threshold online in stream order (Adaptive Conformal Inference; Gibbs & Candès, 2021): realized risk returns to target at all four levels, at a modest hit-rate cost (16.4% → 13.4%). On genuinely drifting production traffic (the Comcast stream below), it showed no clear advantage over a static threshold — an honest null. Practically: a certified threshold is not good forever once computed, which is exactly why a certification’s certification_status tracks stale_recalibration_pending off the same drift monitor described below.

Question 5

Does the cache get worse over time because of its own reuse decisions?

Every experiment above inherits one convention from vCache's benchmark harness: every request gets written into the cache, hit or miss. A real system doesn't — a hit reuses an existing entry and writes nothing. Paper B (Formal Risk Control) §4.2 tests what that changes.

When the cache only grows on misses, its own past decisions shape which candidates are available later: an answer that keeps getting successfully reused never gets its own entry written, so future near-duplicates fall back on some other, less-exact entry that still happens to clear the verifier. This is a self-selection feedback loop, and its harm scales precisely with how often the cache is hit directly:

  • Quora (3.7% direct-hit rate): no measurable effect.
  • SearchQueries (28%): a moderate, statistically significant increase in realized risk.
  • LmArena (73%): realized risk more than triples.

Online recalibration compensates — up to a point. On Quora and SearchQueries it fully offsets the harm (and then some). On LmArena it helps but doesn't fully close the gap. And the obvious cheaper mitigation — occasionally rewrite popular entries instead of always — is a worse bargain than it looks: rewriting on 3 of every 4 hits still only removes about a third of the residual harm. The higher your cache's direct-hit rate — exactly the profile of a high-value, high-redundancy workload — the more a certified risk bound can drift looser than measured, and the more a recalibration cadence matters.

Question 6

Should a wrong answer and a missed cache always cost the same?

Every threshold above this point was picked via Youden's J — the operating point maximizing true-positive rate minus false-positive rate, which implicitly treats a wrong approval and a missed cache as equally costly. For most real businesses they aren't: a wrong answer served with a cache hit's confidence — the wrong refund policy, the wrong cancellation step — usually costs more than the one extra LLM call a miss costs. Paper B (Formal Risk Control) §4.3 swept a cost ratio r (how many times more expensive a wrong approval is than a miss) up to 1,000× across three datasets and found the cost-minimizing operating point moves meaningfully away from Youden's J's once r departs from 1 — so a large gap between a cost-sensitive pick and the default isn't a bug. A 2026-09-10 follow-up measured, on real calibration data, how sensitive the actual picked threshold is to r itself, and the answer is lopsided: wide, near-tied-threshold plateaus really do exist, but almost entirely below r≈1 or above r≈5–20 — the ranges where the win/loss question above is already settled either way. In the range most businesses' true r plausibly falls into — roughly single digits to the teens — the picked threshold changes densely (25–55 distinct thresholds within about one decade of r, across the datasets tested, a ~1–7% step), so a rough order-of-magnitude guess isn't enough to land on the right threshold in that range.

Fine-tune jobs now report threshold_by_cost_ratio — what threshold would be picked at r = 0.5/1/2/5/10 on your own calibration data — and accept an optional cost_ratio to pick the LIVE threshold that way instead of Youden's J. This is Phase 1 and 2 of a 3-phase rollout: the numbers are surfaced (Phase 1) and opt-in cost-sensitive selection works end to end (Phase 2). The Fine-tune Jobs dashboard also turns that same fixed grid into a plain-language picker ("a wrong answer is roughly twice as costly as a missed cache") with a one-click way to carry a preset row into your next job — a lighter-weight step toward Phase 3's original goal, not that goal itself: a true guided flow (ask what a wrong answer and an escalation roughly cost you, derive a custom r from the answer instead of picking from five fixed presets) isn't built yet. The threshold-sensitivity finding above makes that gap more consequential, not less — if picked thresholds really did sit on wide plateaus throughout, a rough five-preset guess would be good enough; since they don't in the range that matters, a derived r is worth more than the preset picker can offer. Paper B §4.3 itself is explicit that no real business's actual r has been measured — the research validates the mechanism, not any specific ratio; see the docs for how to use it on your own data.

Question 7

Why not just raise the similarity threshold instead?

The cheapest defense against a wrong cache hit isn't a verifier at all — it's turning up your cache's similarity threshold so fewer borderline candidates get reused. No latency, no dependency, no data leaving your box; you just lose some hit rate. Any honest case for adding a verifier has to clear that bar: at a matched error rate, does routing the gray zone through a verifier buy back more hit rate than simply tightening the threshold would have? The Core paper §5.11 swept the upper similarity cutoff τ_high (the point above which similarity alone is trusted) across a full grid and compared each result to the pure raise-the-threshold frontier on the same traffic. (For a standalone walkthrough of how those cutoffs work and how to set one, see Semantic cache similarity thresholds.)

Dataset (untuned verifier AUC)τ_high 0.890.920.950.970.99
LmArena (0.72)+0.05+0.09+0.28+1.42+5.18
Quora (0.63)+0.16+0.16+0.11+0.11+0.11
SearchQueries, corrected (0.60)+0.23+0.32+0.33+0.30−0.11

Best hit-rate net lead (percentage points) of verifier-gated gray-zone reuse over the pure raise-the-threshold Pareto frontier, at a matched error rate, per τ_high slice.

The verifier's edge over just tightening the threshold is real but small, and entirely dependent on how good the verifier is on your data. On LmArena, where the off-the-shelf verifier already has genuine discriminative power (AUC 0.72), it's worth about +1.4pp of hit rate at the standard operating point (τ_high = 0.97, the table's own column — the paper's earlier fair-comparison estimate was +1.9pp, the gap is resampling noise) — and up to ~5pp only if you also push τ_high to 0.99, an aggressive setting that hands the verifier the whole high-similarity band and, per the row below, backfires on a weaker-verifier domain. On Quora it's a rounding error at every setting — the QQP task's own score-separability ceiling, not threshold choice, is the binding constraint. And on SearchQueries, where the untuned verifier is near-random (AUC 0.60), widening the gray zone too far (τ_high = 0.99) makes things actively worse than the threshold alone would have — the verifier introduces more bad calls than it prevents. This is the same message as Question 2 and the counter-example below, in a different metric: the verifier only earns its place when it's measurably more trustworthy than raw similarity on your traffic, which is exactly what a Health Check measures and what fine-tuning (Question 2) is for. The corollary for pricing and adoption: if a Health Check shows your gray zone is Quora-shaped, raising the threshold is the right call and you don't need this.

And on total cost, not just the hit-rate / error-rate trade-off

The table above holds the error rate fixed and compares hit rate — which still treats a wrong answer and a missed cache as equally bad. They aren't. Paper B §4.3 redoes the comparison on a single total-cost axis: let r = (cost of one wrong reused answer) ÷ (cost of one extra LLM call), sweep it from 0.1 to 500, and at each r take the cheapest operating point for "just raise the threshold" and the cheapest for "keep the threshold, verify the gray zone" — then ask which policy costs less. Same held-out traffic, same datasets.

-67%-25%+17%+59%+102%0.5125102050100200500LmArenaSearchQueriesQuora
View data table
Cost ratio rLmArenaSearchQueriesQuora
0.5-14.0%-50.6%-17.1%
1+14.3%-13.7%-8.3%
2+11.9%+4.7%-0.8%
5+7.6%-1.4%+0.1%
10+4.2%+2.7%+1.0%
20+3.9%+13.9%+2.7%
50+17.6%+35.8%+7.3%
100+25.7%+54.6%+13.8%
200+31.1%+71.0%+23.4%
500+34.9%+85.3%+39.3%

Percent lower total cost of routing the gray zone through the off-the-shelf verifier vs. raising the threshold, at each r. Above zero, the verifier is the cheaper policy. Fine-tuning (Question 2) shifts every crossing left: LmArena's break-even drops from r ≈ 0.7 to ≈ 0.3, Quora's from ≈ 5 to ≈ 2.

The break-even r is where the verifier stops costing money and starts saving it — ≈ 0.7 on LmArena, ≈ 1.4–4 (a window) then ≈ 9+ on SearchQueries, ≈ 5 on Quora, all for the untuned verifier. Read plainly: once a wrong answer costs more than about one extra model call — which is almost any support, billing, or policy answer — verification is the cheaper policy on every dataset here. Where a miss is as expensive as a wrong answer, or more (r ≲ 1), you should just raise the threshold and aim for maximum hit rate. This is the curve a buyer actually needs: not "the model is more accurate" (it is, by AUC) but "at your cost ratio, does the accuracy pay for the dependency."

Stated limitations from Paper B §4.3: r is a free parameter — this has never been measured for a real business, so every number above is "if your r lands here," not a claim about where it does. The cost model is linear (cost(r) = r · error_rate + (1 − hit_rate)); it assumes a run of wrong answers costs a simple multiple of one, which the reputational version of the cost probably isn't.

Question 8

How much latency does synchronous verification add?

Synchronous verification runs on the request path, so it costs latency — but only on gray-zone candidates, not every request. Measured server-side on the production no-GPU box: the verifier's model forward pass is ~17ms; the full server stack (auth, tenant lookup, serialization, reverse proxy, no external network) is p50 ~33ms / p95 ~44ms / p99 ~47ms. Deployed in the same region as your cache, expected added latency is ~9–19ms per request.

That figure excludes the client-to-origin network hop, which depends on deployment topology. One real data point: 150 calls from a US-East client (Virginia) to the production API measured a full round trip of p50 ~33ms / p95 ~39ms (2026-09-09) — nearly identical to the server-only figure, i.e. network overhead was close to zero for that specific US-domestic path. That's a single geography and a single run, not a claim that network overhead is negligible everywhere — a client on another continent, or not co-located with our CDN egress path, will see a different number.

An LLM-judge fallback — used by asynchronous designs like Krites — is far heavier: a real API-class judge measured a mean ~1.7s, though that's an upper bound over an international network path with cold connections. This is the cost a scoring cross-encoder avoids by staying a scoring model, not a generative one. (Core §5.5; the FAQ has the current production numbers.)

Question 9

What if someone phrases a question specifically to fool the verifier?

Every number above is measured on natural benchmark traffic — hard cases the datasets happen to contain, not cases built to beat the verifier. Paper C builds them on purpose: an LLM generates query pairs that look nearly identical but need opposite answers, across five axes — negation ("can I" vs. "can I not"), quantity swap, direction reversal ("convert A to B" vs. "B to A"), named-entity swap, and action-verb swap ("cancel" vs. "pause").

On 306 adversarial pairs that clear the similarity gate, the off-the-shelf verifier false-accepts 84.0% (95% CI [79.7%, 87.9%]) — it confidently approves an answer that is the literal opposite of correct. Negation is the worst axis (96%), consistent with the base model never being trained for polarity.

In-domain fine-tuning — the remedy that repairs natural-data accuracy — gives no protection here (87.6%, confidence interval almost fully overlapping). Learning a dataset's natural noise distribution and learning robustness to constructed attacks are different capabilities.

Targeted adversarial training helps, partially. Mixing a small batch of adversarial examples (3.8% of the training set) covering the five known axes drops the false-accept rate to 53.6%, with no loss of natural-data AUC. Paper D pushes further — a word-level diff of what changed between the two questions, plus swapping the base model to one pretrained on natural-language inference rather than passage ranking — reaching 5.9% on LmArena, 3.6% on Quora, 15.7% on SearchQueries. Named-entity swap is the one axis no amount of training data moved; only the pretraining-objective change did.

The honest summary: this is mitigated, not solved. A deployment with real adversarial exposure — a public support bot where users may phrase things to get the answer they want — should not rely on natural-data accuracy numbers alone.

Real-world stress test

The one place it broke — and why that's useful

The benchmark questions above were checked against public research datasets. We then reran the same battery on real production data: 3.5 years of Comcast and Amazon customer-support conversations (Kaggle's Customer Support on Twitter dataset). Amazon confirmed everything above. Comcast didn't — fine-tuning was negative, more data made it worse (AUC briefly fell below random chance), and gains decayed with time distance instead of holding flat.

The root cause wasn't noisy labels or too little data — it was that the gray-zone hit rate itself drifted 5× between the training window and later traffic (1.0% → 5.2%). A model calibrated on one base rate silently stopped applying to a different one. That's a distinct failure mode from "the verifier got stale," and it's why drift monitoring watches positive-rate stability, not just accuracy — the same chunked z-test and Page-Hinkley detector caught this shift several chunks before it would have shown up as a Group-level accuracy drop.

The same base-rate-mismatch insight now also runs inside a single fine-tune job, not just across production traffic over time: a two-proportion z-test checks whether the segment a threshold gets calibrated on has quietly drifted from the segment the model trained on, and holds the new model back rather than auto-activating it if they don't match (see the docs).

What didn't work

Simpler things we tried that didn't beat the verifier

A verifier is only worth adding if cheaper alternatives don't do the job. Several don't:

  • Bucket queries by their action verb — a popular suggestion: forbid "cancel" and "pause" from sharing a cache bucket. Tested on three datasets, it never raised discriminative power, and on LmArena it caused a statistically significant regression (−0.098 AUC). It screens out the easy negatives and leaves the verifier facing only the hard ones — same verb, opposite object direction. (Core §5.10)
  • Swap in a bigger or more broadly trained off-the-shelf reranker. A 12-layer model and a different-lineage reranker both produced near-identical, small gains (about +0.02 AUC each) on the dataset that separates the two variables — far short of what fine-tuning on your own data reaches. (Core §5.12)
  • Rewrite a rejected candidate to fit the new query instead of calling it a miss (the TweakLLM idea). The rewritten answers were judged wrong 22–61% of the time, and whether a rewrite succeeded was nearly unrelated to whether the rejection was justified in the first place. (Core §5.13)
  • Use the verifier's own confidence to decide when to escalate to an LLM judge. Once you compare against a threshold already tuned to your cost ratio, the score's distance to that threshold carries no exploitable structure. (Paper D §4.1)
  • Add a per-request "is this still in-distribution" gate on the risk certificate. The distribution shift on real streams is too diffuse to localize to individual requests — and the gate rejects correct reuses slightly more often than errors. (Paper D §4.2)

The one free improvement that did work: feeding the similarity score — which the gray-zone gate normally discards once the verifier runs — back into the decision as a second input. It's a measurable Pareto gain, but only where the verifier's own signal is weak (+1.7pp hit rate on SearchQueries; −1.1pp on LmArena, where the verifier is already strong and the extra parameter mostly adds estimation noise). A noise-injection experiment confirms the direction is causal. Same lesson as every question above: the verifier earns its place only when it's measurably more trustworthy than raw similarity on your traffic. (Paper D §4.5)

Limitations, stated plainly

  • • Noise was injected by uniform random label flips, not a modeled real-world feedback error distribution — real thumbs-down noise may be systematic rather than random.
  • • Three of four datasets are public research benchmarks, not private customer data — query style, label quality, and traffic patterns may differ systematically from any one business.
  • • The real-traffic dataset (2014–2017 Twitter support) predates today's AI-assisted support workflows and used embedding-similarity clustering as a proxy for "equivalent question," not human labels.
  • • "~32% noise" and "1,000 examples" are reasonable starting points validated across the datasets we tested — not universal constants for every domain.
  • • Adversarial robustness is measured only on LmArena and one verifier family — LLM-generated pairs on five failure axes. Whether the 84% / 53.6% / single-digit figures transfer to other datasets, other verifier architectures, or attack types outside those five is untested.
  • • The honest-calibration and risk-control results assume the verifier's score ranking is stable between the calibration window and deployment. Paper D shows that assumption isn't free — a drifting gray-zone positive rate or a covariate score-distribution shift breaks it — which is why the response is an online adaptive threshold plus drift monitoring, not a one-time calibration.

Cite this

@misc{xin2026nonstat}
@misc{xin2026nonstat,
  author    = {Xin, Chengyou},
  title     = {Stress-Testing Semantic Cache Reuse Decisions: Uncertainty Signals, a Discarded Similarity Signal, and Online Adaptive Thresholds},
  year      = {2026},
  month     = sep,
  publisher = {Zenodo},
  doi       = {10.5281/zenodo.22665785},
  url       = {https://doi.org/10.5281/zenodo.22665785}
}
@misc{xin2026crc}
@misc{xin2026crc,
  author    = {Xin, Chengyou},
  title     = {Finite-Sample Risk Control for Semantic Cache Reuse Decisions: Formal Guarantees, a Self-Selection Feedback Loop, and Economics},
  year      = {2026},
  month     = aug,
  publisher = {Zenodo},
  doi       = {10.5281/zenodo.22663725},
  url       = {https://doi.org/10.5281/zenodo.22663725}
}
@misc{xin2026adv}
@misc{xin2026adv,
  author    = {Xin, Chengyou},
  title     = {Adversarial Robustness of Semantic Cache Verifiers: Gaps Exposed by Red-Teaming and Partial Repair via Training},
  year      = {2026},
  month     = aug,
  publisher = {Zenodo},
  doi       = {10.5281/zenodo.22661312},
  url       = {https://doi.org/10.5281/zenodo.22661312}
}
@misc{xin2026sync}
@misc{xin2026sync,
  author    = {Xin, Chengyou},
  title     = {Synchronous Online Verification Gating in Semantic Caches: An Empirical Study --- Part I: Core Findings and the Go/No-Go Verdict},
  year      = {2026},
  month     = jul,
  publisher = {Zenodo},
  doi       = {10.5281/zenodo.22660442},
  url       = {https://doi.org/10.5281/zenodo.22660442}
}

Or cite the umbrella technical report by its concept DOI, 10.5281/zenodo.21703364.

Want the same evaluation on your own traffic? Get a Health Check report — or run it entirely on your own machine, nothing uploaded (Local Health Check).