-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPAPER_EN.tex
More file actions
1279 lines (993 loc) · 230 KB
/
Copy pathPAPER_EN.tex
File metadata and controls
1279 lines (993 loc) · 230 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
\documentclass[11pt]{article}
\usepackage[margin=1.15in]{geometry}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{amsmath,amssymb,amstext}
\usepackage{newpxtext}
\usepackage[vvarbb]{newpxmath}
\usepackage{microtype}
\usepackage{graphicx}
\usepackage{booktabs}
\usepackage{enumitem}
\usepackage{xcolor}
\usepackage{array}
\usepackage{caption}
\usepackage{titlesec}
\usepackage{fancyhdr}
\usepackage[normalem]{ulem}
\usepackage{hyperref}
\definecolor{headingcolor}{HTML}{1F3864}
\definecolor{linkcolor}{HTML}{2A5DB0}
\hypersetup{
colorlinks=true,
linkcolor=linkcolor,
citecolor=linkcolor,
urlcolor=linkcolor,
pdftitle={Synchronous Online Verification Gating in Semantic Caches},
pdfauthor={Chengyou Xin}
}
% Section headings: sans, bold, small-caps-ish color accent to set them
% apart from the serif body text without introducing a second display face.
\titleformat{\section}
{\normalfont\sffamily\bfseries\large\color{headingcolor}}
{\thesection}{0.6em}{}
\titleformat{\subsection}
{\normalfont\sffamily\bfseries\color{headingcolor}}
{\thesubsection}{0.6em}{}
\titlespacing*{\section}{0pt}{1.6em}{0.7em}
\titlespacing*{\subsection}{0pt}{1.2em}{0.4em}
\captionsetup{font=small,labelfont={bf,sf},labelsep=colon,margin=8pt,skip=8pt}
\renewcommand{\arraystretch}{1.2}
\setlist[itemize]{itemsep=3pt,topsep=4pt}
\setlist[enumerate]{itemsep=3pt,topsep=4pt}
\pagestyle{fancy}
\fancyhf{}
\fancyhead[L]{\small\sffamily\textsc{Synchronous Verification Gating in Semantic Caches}}
\fancyhead[R]{\small\sffamily\thepage}
\renewcommand{\headrulewidth}{0.4pt}
\fancypagestyle{plain}{
\fancyhf{}
\fancyfoot[C]{\small\sffamily\thepage}
\renewcommand{\headrulewidth}{0pt}
}
\newcommand{\taulow}{\ensuremath{\tau_{\text{low}}}}
\newcommand{\tauhigh}{\ensuremath{\tau_{\text{high}}}}
\title{\textbf{Synchronous Online Verification Gating in Semantic Caches}\\[6pt]
{\Large\normalfont An Empirical Study}}
\author{Chengyou Xin \\[2pt] \small\textsc{LoopDot AI Research}}
\date{\small 2026-07-26}
\begin{document}
\maketitle
\thispagestyle{plain}
\begin{center}
\small\textbf{Code and full experimental artifacts:} this repository, \texttt{cacheverifier/}, \texttt{results/}, \texttt{configs/}
\end{center}
\vspace{4pt}
\begin{quote}
\noindent\textbf{Erratum (added 2026-08-09, after the paper's initial release / Zenodo DOI 10.5281/zenodo.21703365 and sharing on HN/Reddit/Twitter)}
\noindent The SearchQueries dataset's Group D/E results had a data defect: the upstream vCache HuggingFace dataset (\texttt{vCache/\allowbreak SemBenchmarkSearchQueries})'s \texttt{response\_\allowbreak llama\_\allowbreak 3\_\allowbreak 8b} column was never actually populated for this split --- all 150,000 records' \texttt{answer} field was the identical constant placeholder string (``Not required for the benchmark because of the id\_set''), not the ``Llama-3-8B-generated answers'' this paper originally described. This meant the Group D/E cross-encoder verifier's second scoring input (the candidate answer text) was identical across every candidate and carried no discriminative information --- sufficient on its own to explain the previously reported ``near-chance'' verifier performance on SearchQueries, with no need for a more complex semantic explanation (this paper's working ``axis problem'' hypothesis, see \texttt{RESEARCH\_\allowbreak PROPOSAL.md} \S10 direction 5, has also been ruled out as the primary cause).
\noindent Real answers have been regenerated with the DeepSeek API (\texttt{deepseek-chat}; not Llama-3-8B, since no API access to that specific model was available) for the 103,188 affected records (the candidates actually read by the verifier in the gray zone, 68.8\% of the dataset), and the full Group D/E results --- including all downstream ablations (Section~\ref{sec:deployment}) --- were rerun using the identical match trace and a threshold grid recalibrated to the corrected model's own score distribution (rather than reusing the old grid --- exactly the lesson this paper's own Section~\ref{sec:groupd} already emphasized), on the same machine that produced the original Group E results. Every SearchQueries figure in the body below has been replaced with the corrected version; the original (defective) result files remain archived in \texttt{results/\allowbreak search\_\allowbreak queries\_\allowbreak groupD\_\allowbreak cross\_\allowbreak encoder.json} / \texttt{search\_\allowbreak queries\_\allowbreak groupE\_\allowbreak finetuned.json} for diffing. \textbf{The correction is not uniformly ``better.''} The fine-tuned Group E result is now stronger than originally reported, but the off-the-shelf Group D result is now worse --- the original data made it look merely ``close to ineffective''; the corrected data reveals it is genuinely worse than doing nothing at most operating points (details in Sections~\ref{sec:groupd}/\ref{sec:groupe}). The three downstream ablations (label-noise robustness, cold-start data requirements, drift decay) each moved in the same direction: the placeholder data had systematically \emph{understated} these deployment risks. This defect does not affect any LmArena, Quora, or Twitter customer-support results --- none of them ever depended on the missing column.
\end{quote}
\begin{abstract}
\noindent
Semantic caches replace exact matching with vector similarity to reuse an LLM's past answers, but similarity and answer correctness are not the same quantity: static similarity thresholds have been reported in production to produce false-positive rates in the double digits. A recent line of work, vCache, learns per-embedding adaptive thresholds online in exchange for a formal error-rate bound; another, Krites, introduces an LLM judge in the similarity gray zone, but that verification is designed to run \textbf{asynchronously}, off the serving path, and its own evaluation always substitutes a ground-truth oracle for the real judge --- the paper itself discusses ``blocking, synchronous verification'' as an alternative but neither implements nor measures it. This paper fills that specific gap: under a single-tier cache architecture, using a \textbf{real} (non-oracle) lightweight verifier, gating cache hits \textbf{synchronously} and online, and running a formal Pareto-frontier comparison against static-threshold and adaptive-threshold baselines on two public benchmarks (SemCacheLMArena and SemCacheSearchQueries, roughly 210{,}000 real requests combined).
The headline finding is \textbf{conditional, not unqualified}: with an oracle verifier, synchronous gating raises hit rate by 20--28 percentage points at matched error rate on both datasets, proving the mechanism has substantial theoretical headroom. Swapping in an off-the-shelf real verifier (an ms-marco cross-encoder) cashes in only a small slice of that headroom, and only on the conversational dataset (LmArena) --- under the fairest possible comparison (interpolated against the static-threshold frontier), the best reproducible net gain is about +1.9 percentage points of hit rate (statistically significant but modest), while on the short-query dataset (SearchQueries) this off-the-shelf verifier \textbf{causes more net harm than benefit} (36 tested operating points: 1 win, 12 ties, 23 losses to the static-threshold frontier; held-out AUC 0.5984, above chance but still not enough to reliably beat an already-strong similarity baseline) --- \textbf{[2026-08-15 update]} but this ``net harmful'' verdict itself used a post-hoc grid-searched threshold; retested with honest calibration (chronological calibration/test split, Youden's J threshold selection --- see the end of Section~\ref{sec:groupd}), the same untuned verifier instead beats the static-threshold frontier at every tested point. A substantial share of the original verdict was itself a product of the grid search, not solely a reflection of the verifier lacking discriminative power --- a qualification discovered after this paper's initial Go/No-Go evaluation, and one that should be weighed alongside the ``weak Go'' verdict discussed below. Accordingly, this paper's Go/No-Go verdict is a \textbf{weak Go}: the mechanism is not falsified, but the naive expectation that ``any off-the-shelf verifier will meaningfully improve the cache'' is refuted by the evidence --- how well the verifier matches the data domain is the variable that actually determines whether this mechanism has practical value. A follow-up experiment (Section~\ref{sec:groupe}) tests this diagnosis directly: fine-tuning the same cross-encoder on each dataset's own gray-zone labels raises held-out AUC from 0.72 to 0.88 on LmArena and, more importantly, from 0.5984 to 0.7120 on SearchQueries --- turning that net-harmful result into a verifier that beats the static-threshold frontier at 53 of 54 tested operating points, 1 tie, zero losses (best net lead +4.50 percentage points). A third, independently-sourced dataset (Quora Question Pairs, outside vCache's own benchmarks) replicates the same pattern at a smaller magnitude proportional to its own lower headroom: across all three datasets tested, fine-tuning never produced a worse result than the untuned verifier. \textbf{[2026-08-16 update]} This grid-search methodology could itself carry the same optimism bias; retested with the identical honest calibration used above (chronological calibration/test split, Youden's J), the zero-loss verdict holds unchanged, LmArena/SearchQueries's net lead actually increases, and Quora's narrows without reversing direction --- see the end of Section~\ref{sec:groupd}. Three further ablations (Section~\ref{sec:deployment}) test whether this survives realistic deployment conditions: fine-tuning tolerates label noise up to roughly 30\% before turning harmful, keeps improving with more cold-start data with no observed saturation point, and --- contrary to expectation --- shows no continued decay in benefit as production traffic drifts away from its fine-tuning window, all three findings holding consistently across datasets. A fourth check (Section~\ref{sec:twitter}) repeats the recipe on real production customer-support traffic (two brands from a public Twitter support-ticket corpus, spanning up to 3.5 years): one brand (e-commerce) replicates every prior finding, but the other (telecom, the longest and only multi-year traffic history tested) is a genuine counter-example --- fine-tuning turns harmful regardless of label noise, more cold-start data makes it worse rather than better, and its benefit decays continuously rather than plateauing --- all three traced to a single cause, a non-stationary gray-zone positive rate across the traffic's history, which revises Section~\ref{sec:deployment}'s re-tuning-cadence conclusion from unconditional to conditional on monitoring that stability. A prototype monitor for exactly that instability (Section~\ref{sec:monitor}) --- two classical change-point tests run on gray-zone labels alone, no extra inference required --- flags the shift partway through the affected brand's held-out traffic while never false-alarming on the unaffected one, turning this from an identified risk into a demonstrated, low-cost detection capability. \textbf{[2026-08-17 update]} Two methodological gaps previously flagged as limitations have now been closed (Sections~\ref{sec:latency}, \ref{sec:tauhigh}): the oracle's latency was an unmeasured 70ms modeling assumption, and a real API measurement shows that figure was low by roughly 24x (measured mean 1687.8ms), directly weakening the claim that synchronous verification's latency cost is negligible; \tauhigh\ was previously fixed at a single anchor, and sweeping it reveals its optimal value is dataset-dependent --- widening \tauhigh\ more than triples the net lead on LmArena, while the same change flips SearchQueries (corrected) to a net loss. A third correction targets Group B (Section~\ref{sec:groupb}): a line-by-line comparison against the official vCache implementation found that the official code seeds every cache entry with two synthetic bootstrap observations this paper's port lacked, making this paper's original reproduction harder to exit cold start than the official algorithm; after the fix, Group B's hit rate rises 4.4x--29.1x across all three datasets while error rate stays below target $\delta$ throughout (the formal guarantee is unaffected) --- the originally reported hit-rate ranges in Section~\ref{sec:groupb} should be read as this paper's prior port, not the official vCache algorithm's true ceiling. \textbf{[2026-08-19 update]} Section~\ref{sec:reranker} tested whether a larger or more broadly-trained off-the-shelf reranker closes the SearchQueries gap: \texttt{ms-marco-MiniLM-L12-v2} (same distribution, pure capacity increase) and \texttt{BAAI/\allowbreak bge-reranker-base} (broader training distribution, also larger) produced nearly identical gains (+0.0226 vs.\ +0.0214) on the one dataset that actually separates the two variables (SearchQueries) --- neither ``the model is too small'' nor ``the training distribution is wrong'' explains the gap; off-the-shelf model selection, in either direction, fails to meaningfully close it within the scope tested, and the in-domain fine-tuning from Section~\ref{sec:groupe} remains the only verified remedy. \textbf{[2026-08-19 update]} Section~\ref{sec:crc} upgrades gray-zone threshold calibration from a point estimate to finite-sample risk control: Conformal Risk Control (CRC) gives a formal guarantee --- ``reusing this hit keeps the error rate under a user-specified budget $\alpha$'' --- under a random-split assumption, and across three datasets and four alpha levels (5\%/2\%/1\%/0.5\%), the certified risk's efficiency loss relative to a full-distribution oracle stays within 3\% of 1.0 throughout; the finite-sample cost is essentially negligible at the sample sizes tested. The same framework surfaces two new findings: a verifier's AUC ranking does not equal its risk-constrained reuse-utility ranking (SearchQueries, the lowest-AUC dataset, has higher reuse throughout than higher-AUC Quora); and re-running the same calibration under a chronological (rather than random) split leaves LmArena safe --- its drift direction happens to favor conservatism --- but produces a genuine, systematic guarantee violation on Quora (exceeding target at all four alpha levels, up to 80\% relative overshoot) --- this paper's first measurable exchangeability failure, showing that calibrating on historical traffic and deploying to future traffic cannot be assumed safe by default. A direct numeric comparison against vCache was judged infeasible after a methodology audit (three structural mismatches: decision granularity, synchronous vs.\ asynchronous verification, and guarantee type), replaced with a structural comparison table; see Section~\ref{sec:crc} for details. \textbf{[2026-08-20 update]} Section~\ref{sec:rewrite} is a negative ablation: it tests whether the TweakLLM paradigm (``rewrite a rejected candidate's answer with a lightweight LLM instead of calling it a miss'') beats the existing binary gate. Across three datasets, the rewritten-then-judged error rate (22\%--61\%, dataset-dependent) is far higher than the binary gate's status quo of ``reject means miss, zero error risk,'' and the rewrite call's own latency (mean 2.7--6.2 seconds) is not clearly lower than a fresh generation's would be either. A counter-intuitive headline finding: the false-reject stratum, where the candidate should have been accepted, shows almost no difference in judged-incorrect rate from the true-reject stratum, where the candidate genuinely was a different question (95\% confidence intervals overlap on all three datasets) --- whether the rewrite succeeds appears almost unrelated to whether the verifier's original rejection was itself justified. \textbf{[2026-08-22 update]} Section~\ref{sec:topk} tests a design choice made everywhere else in this paper: retrieving a single nearest neighbor only. An external, independent re-derivation of this project flagged that \texttt{VectorCacheStore} hardcodes \texttt{k=1}, so if that one candidate falls in the gray zone and is rejected, the request is judged a miss even when the semantic second-nearest neighbor would have been correct and was never seen. A prior monotonicity argument (HNSW returns neighbors in descending similarity order, so once rank-1 is below \taulow\ no later candidate can be better) narrows the test to exactly one branch: rank-1 in the gray zone and rejected. A pure ground-truth ceiling (no verifier calls) shows non-trivial headroom on all three datasets: 0.75\% of all requests on LmArena, 1.62\% on Quora, 5.66\% on SearchQueries (corrected) have a correct candidate that was never surfaced. Plugging in a real verifier (off-the-shelf and the same fine-tuned checkpoint as Section~\ref{sec:groupe}) to test a K=2 cascade again produces three different stories: on LmArena, hit rate rises significantly while error rate never moves significantly at any grid point --- close to a free lunch; on Quora, the effect is essentially zero, consistent with its small ceiling; on SearchQueries there is a real trade-off --- 43\%--53\% of 36--54 grid points show both hit rate and error rate rising significantly, and fine-tuning narrows that share from 53\% to 43\% without eliminating it. K and fine-tuning are complementary, not substitute, levers: at a fixed error-rate ceiling, using both always yields the highest hit rate. \textbf{[2026-08-28 update]} Section~\ref{sec:selfselect} tests an open question left by Section~\ref{sec:crc}'s CRC work: Protocol R/T both test static splits of a fixed historical trace, not a genuine online closed loop --- if the CRC gate's own reuse/reject decisions feed back into future cache state, that could induce a self-selection feedback loop. A genuine online closed-loop simulation (built without modifying the experiment framework the rest of this paper depends on) compares ``insert regardless of hit/miss'' (this paper's existing convention elsewhere) against ``insert only on miss'' (closer to real production semantics). The result is a precise monotonic dose-response relationship: the higher the direct-hit rate (Quora 3.7\% $<$ SearchQueries 28.1\% $<$ LmArena 72.8\%), the more self-selection sparsifies the cache and the larger the resulting harm --- no detectable effect on Quora, a moderate significant harm on SearchQueries, and on LmArena realized risk more than triples (strongly significant). A case-by-case audit of 1{,}098 false-accepts on LmArena confirms 68.9\% match a specific mechanism: a correct candidate that never earns an independent cache write because it keeps being successfully reused, forcing later equivalent queries to match an incorrect substitute --- not a statistical coincidence. Online recalibration fully compensates for this harm on Quora and SearchQueries, but not on LmArena, leaving an unlocated threshold between the two as an open question. \textbf{[2026-08-29 update]} A cleaner single-variable manipulation locates this threshold: generalizing the binary ``insert on hit'' switch into a continuous write probability $p$ (rather than approximating it indirectly via \tauhigh\ or synthetic duplicate data, both of which would introduce additional confounds), swept over $p \in \{0.1, 0.25, 0.5, 0.75\}$ on LmArena. The harm does decrease monotonically with $p$, but slowly --- at $p=0.75$, residual harm is still only about 35\% lower than at $p=0$, and the effect never leaves the significant range anywhere across the tested interval. The qualitative audit was also extended to all three datasets: the crowding-out mechanism explains 68.9\% of LmArena's false-accepts but only 12.4\% of SearchQueries' explainable cases --- SearchQueries' self-selection harm is mostly driven by a different, still-unidentified mechanism, so the mechanism verified on LmArena cannot simply be assumed to generalize to other datasets. \textbf{[2026-08-30 update]} Section~\ref{sec:costsensitive} replaces the hit-rate/error-rate frontier with an explicit cost-ratio analysis: $\mathrm{cost}(r) = r \times \mathrm{error\_rate} + (1 - \mathrm{hit\_rate})$, where $r$ is the cost of an error relative to the cost of a miss. After closing a grid-coverage gap in D/E's honest calibration (extended to $\taulow \in \{0.80,...,0.99\}$ to match Group A, via 6 new GPU-computed operating points --- the original narrower grid had produced a spurious ``static threshold wins again at high $r$'' artifact on LmArena that fully disappears once closed), all three datasets show the same qualitative result: when the cost of an error clearly exceeds the cost of a miss (typically $r \gtrsim 1$--9, dataset-dependent), synchronous verification is economically superior to a static threshold almost universally; only when misses and errors cost about the same, or misses cost more, does a static threshold aimed at maximum hit rate win. Section~\ref{sec:redteam} uses an LLM (DeepSeek) to generate adversarial samples covering five known failure axes (negation, action-verb swap, direction reversal, named-entity swap, quantity swap) and tests the verifier's worst-case behavior on deliberately constructed hard cases rather than natural benchmark data: on 306 samples clearing the gray-zone threshold, the off-the-shelf verifier's false-accept rate is 84.0\% (95\% CI [79.7\%,87.9\%]), far exceeding anything measured on natural data elsewhere in this paper; more importantly, the in-domain fine-tuning shown in Section~\ref{sec:groupe} to substantially repair natural-data discriminative power provides \textbf{no protection whatsoever} on these adversarial samples (87.6\%, CI nearly fully overlapping the untuned result) --- fine-tuning learns this dataset's natural noise distribution, not a general robustness to deliberately constructed attacks, and the two are different capabilities. \textbf{[2026-08-30 update]} Section~\ref{sec:advtrain} directly tests Section~\ref{sec:redteam}'s open question (d): can training specifically targeted at these five failure axes close the gap? Mixing a fresh, non-overlapping batch of 223 adversarial training triples (only 3.8\% of the combined training set) into Section~\ref{sec:groupe}'s original natural training data and re-running the identical fine-tuning procedure leaves natural-data AUC essentially unchanged (0.8749 vs.\ the original 0.88) but cuts the adversarial held-out false-accept rate from 84--88\% to 53.6\% (95\% CI [48.0\%,59.2\%], non-overlapping with either baseline) --- a real, significant improvement proving this capability gap is not a fundamental limitation of the fine-tuning mechanism, just a missing slice of training data. But 53.6\% still means more than half of adversarial samples fool the verifier, and one category (named-entity swap) actually got worse (48.7\%$\to$61.5\%) --- substantially mitigated, far from solved.
\end{abstract}
\section{Introduction}
\label{sec:intro}
Semantic caching --- replacing exact matching with vector similarity --- is a standard technique for cutting the cost and latency of LLM applications today. AWS reports that semantic caching can cut cost by up to 86\% and improve latency by up to 88\%. But similarity and answer correctness are different quantities: a poorly configured semantic cache can have a false-positive rate as high as 99\%, and engineering teams have had to ship emergency hotfixes after a cache served an incorrect refund policy.
Existing cache-hit logic is essentially $\text{sim}(q, h) \geq \tau \rightarrow \text{hit}$, where $\text{sim}$ measures \emph{Question $\approx$ Question$'$}, while the question that actually matters is \emph{does Question $\rightarrow$ Answer still hold} --- an answer-relevance / entailment problem, not a similarity problem. ``Can my dog eat honey'' and ``what's the deal with dogs and honey'' can score highly similar, but ``how do I pause my subscription'' versus ``how do I cancel my subscription'' --- a pair with high similarity and completely different correct answers --- is exactly what a static threshold cannot distinguish.
Three published works each address part of this problem (Section~\ref{sec:related}), but none has directly measured: \emph{under a single-tier architecture with no offline curation, and with a real model rather than ground truth standing in for the verifier, is it actually worth putting verification on the serving path?} That is this paper's question:
\begin{quote}
\itshape
Under a single-tier cache architecture, can a real, lightweight verifier doing synchronous online gating achieve a higher hit rate than existing methods (static threshold, adaptive threshold) at a comparable error rate --- or a lower error rate at a comparable hit rate?
\end{quote}
This paper's contribution is purely empirical:
\begin{enumerate}[leftmargin=*]
\item A reproducible evaluation pipeline (HNSW approximate nearest neighbor + a single-pass cached trace + cheap grid replay) that makes a full four-group sweep over roughly 210{,}000 real requests tractable. The nearest-neighbor search that this sweep would otherwise repeat once per grid point is the dominant cost under brute force --- extrapolating to about 19 hours for Groups A and B's threshold/delta grids alone --- and collapses to a single, minutes-long pass under HNSW; verifier inference (Group D) and bootstrap confidence intervals remain separate, non-negligible costs that this optimization does not eliminate (see Section~\ref{sec:groupd} and Section~\ref{sec:latency}).
\item A line-by-line port of vCache's \texttt{VerifiedDecisionPolicy} (logistic-regression threshold estimation, delta-method variance, randomized exploration probability), not a simplified approximation.
\item Two measurements missing from the current literature: (a) the real (non-oracle) false-approve/false-reject rate of a verifier in a semantic-caching setting; (b) the actual latency cost of synchronous versus asynchronous verification.
\item An honest, interpolation-corrected Go/No-Go verdict --- the mechanism works but is highly verifier-dependent, rather than a blanket ``verification helps'' or ``verification doesn't help'' conclusion.
\end{enumerate}
\section{Related Work}
\label{sec:related}
\begin{table}[h]
\centering
\small
\begin{tabular}{@{}p{2.1cm}p{3.6cm}p{2.2cm}p{2.2cm}p{3.6cm}@{}}
\toprule
\textbf{Work} & \textbf{Core method} & \textbf{Introduces a verifier?} & \textbf{Sync/async} & \textbf{Architectural precondition} \\
\midrule
GPTCache (Bang, 2023) & Global fixed similarity threshold & No & --- & Single-tier \\
\addlinespace
vCache (Schroeder et al., 2025) & Online per-embedding threshold learning with an error-rate convergence guarantee & No & --- & Single-tier \\
\addlinespace
Krites (2026) & Static threshold unchanged; gray-zone matches trigger an \textbf{asynchronous} LLM judge that, on approval, promotes the answer into a dynamic tier & Yes, but only for promotion & \textbf{Asynchronous, off the serving path} & Two-tier: offline-curated static tier + online dynamic tier \\
\addlinespace
Calibration Gap (Baral et al., 2026) & Calibrates the single similarity score already produced by the retrieval/reranking stage (P-CHR AUC / CRR); adds no separate stage & No --- calibrates the one existing signal, not a decoupled second-stage verifier & --- & Single-tier, one-signal architecture (better selection/calibration, still ``score $\geq$ threshold $\rightarrow$ hit'') \\
\addlinespace
TweakLLM (2025) & On a match, skips accept/reject and uses a lightweight LLM to \textbf{dynamically rewrite} the cached answer to fit the new query & Partial --- substitutes generative rewriting for a binary decision & Synchronous, on the serving path & Single-tier, but reframes ``verification'' as ``editing'' \\
\bottomrule
\end{tabular}
\caption{Positioning relative to prior semantic-caching work.}
\end{table}
The last two rows are not Krites-style direct competitors but represent two adjacent, different lines of work --- ``calibrate the existing signal better'' and ``sidestep verification by editing the content instead'' --- whose relationship to this paper's positioning is discussed via the external cross-validation in Section~\ref{sec:golo}; they are not analyzed against the same three points below.
Three points fix this paper's position relative to Krites specifically:
\begin{enumerate}[leftmargin=*]
\item Krites explicitly discusses putting the judge directly on the serving path for blocking verification, and predicts that ``such a policy adds an extra model call to many requests, increasing both average and tail latency, eroding the cache's own benefit'' --- but \textbf{neither implements nor measures it}.
\item Krites' evaluation ``does not run the LLM judge in simulation\ldots\ but instantiates $J$ directly from the benchmark's ground-truth equivalence-class relation,'' and its Discussion concedes that ``in production, an LLM-based verifier will have a non-zero false-reject and false-approve rate,'' but only offers an analytical upper bound --- \textbf{no empirical measurement}.
\item Krites' architectural precondition is a two-tier cache (an offline-curated static tier plus an online dynamic tier); its contribution is ``promoting a verified static answer into the dynamic tier,'' not ``judging in real time whether this hit can be trusted.'' The mechanism does not apply to a single-tier dynamic cache deployment with no offline curation pipeline.
\end{enumerate}
This paper's four experimental groups map directly onto those three gaps: Groups A and B reproduce existing baselines; Group C keeps Krites' own oracle verifier-fidelity assumption but makes verification synchronous, isolating the cost of ``going synchronous'' as a single variable; Group D swaps in a real verifier, isolating the cost of ``oracle $\rightarrow$ real'' as a single variable.
\section{Method}
\subsection{Four experimental groups}
\begin{table}[h]
\centering
\small
\begin{tabular}{@{}lp{2.6cm}p{9cm}@{}}
\toprule
\textbf{Group} & \textbf{Method} & \textbf{Description} \\
\midrule
A & Static threshold & $\text{sim} \geq \tau \rightarrow \text{hit}$, reproducing GPTCache; $\tau$ taken from the \texttt{STATIC\_\allowbreak THRESHOLDS} grid in vCache's own \texttt{benchmarks/\allowbreak benchmark.py} \\
\addlinespace
B & Adaptive threshold & A line-by-line port of vCache's \texttt{VerifiedDecisionPolicy} (Section~\ref{sec:groupb}), not a simplified approximation \\
\addlinespace
C & Sync + oracle verifier & The gray zone synchronously calls a ``perfect'' verifier (judging via ground-truth equivalence classes), but assigns it a non-zero modeled latency standing in for a real LLM judge (70ms default) \\
\addlinespace
D & Sync + real verifier & The gray zone synchronously calls a real, non-oracle model \\
\bottomrule
\end{tabular}
\caption{The four experimental groups.}
\end{table}
C and D share the same decision mechanism (\texttt{SynchronousVerifiedPolicy}):
\begin{quote}
\begin{verbatim}
sim(q, h) >= tau_high -> serve directly (high confidence, no verifier call)
tau_low <= sim(q, h) < tau_high -> call the verifier synchronously;
serve if approved, else fall through
sim(q, h) < tau_low -> fall through directly (low confidence, no verifier call)
\end{verbatim}
\end{quote}
The only difference between C and D is the verifier implementation --- that is the point of the design: C isolates ``synchronous vs.\ asynchronous'' (under Krites' own verifier-fidelity assumption), and D isolates ``oracle vs.\ real model.''
\subsection{A faithful port of Group B}
\label{sec:groupb}
In vCache's official code (\texttt{vcache-project/\allowbreak vCache}, \texttt{vcache/\allowbreak vcache\_\allowbreak policy/\allowbreak strategies/\allowbreak verified.py}), \texttt{VerifiedDecisionPolicy}'s core logic is:
\begin{enumerate}[leftmargin=*]
\item Each cache entry independently maintains its own observation history $(\text{similarity}, \text{is\_correct})$, with \textbf{no global fallback across entries} --- with fewer than 6 observations, the policy always declines to exploit (EXPLORE).
\item Once an entry reaches 6 observations, a 1-D logistic regression (similarity $\rightarrow$ correctness) is fit on its history, yielding a threshold estimate $\hat{t}$ and a slope $\gamma$.
\item The variance $\text{var}_t$ of $\hat{t}$ is estimated via the delta method (or, under perfect separation, looked up in an empirical variance table shipped with the paper's own code).
\item Over a 50-point epsilon grid, a set of candidate confidence upper bounds $t'$ is computed and inverted into an ``explore probability'' $\tau_{\text{explore}}$, such that the expected error rate stays below the target $\delta$.
\item A random draw $u \sim \text{Uniform}(0,1)$ decides the action: explore (miss, verify, and update the observation history) if $u \leq \tau_{\text{explore}}$, otherwise exploit (hit, no verification).
\end{enumerate}
This paper's \texttt{AdaptiveThresholdPolicy} ports all five steps line by line, including the exact empirical variance-table values from the paper's own code, rather than substituting a simplified confidence-interval approximation. This distinction matters: an earlier, simpler Wilson-score-upper-bound approximation (used in an early version of this codebase) introduced a global fallback mechanism absent from the original paper, which systematically overstated hit rate.
\subsection{Computational efficiency: one pass, cheap replay}
Because every request --- hit or miss --- is unconditionally inserted into the cache (matching vCache's own harness), the sequence of ``which historical entry does this request match'' for Groups A/C/D is \textbf{entirely independent of the threshold parameters}. The evaluation pipeline exploits this by splitting the computation into three steps:
\begin{enumerate}[leftmargin=*]
\item \texttt{build\_\allowbreak match\_\allowbreak trace}: one pass over the whole stream using HNSW (rather than brute force), recording each request's nearest-neighbor match --- computed exactly once.
\item \texttt{score\_\allowbreak gray\_\allowbreak zone}: the verifier scores, exactly once, every candidate whose similarity falls within the union of the entire parameter sweep.
\item \texttt{replay}: for each $(\taulow, \tauhigh, \text{threshold})$ combination, hit/miss decisions are cheaply re-derived from the cached results of the two steps above --- without touching the ANN index or the verifier model again.
\end{enumerate}
An empirical extrapolation of brute-force nearest-neighbor search (20{,}000 records, 1024 dimensions, 56 seconds per pass) shows that, without this optimization, repeating that search once per grid point across Groups A and B's threshold/delta grids on roughly 210{,}000 real records would take about 19 hours; with HNSW, the single shared pass collapses to minutes. This does not make the whole pipeline minutes-long end to end --- Group D's real verifier inference and the 200-resample bootstrap confidence intervals are separate costs unaffected by the ANN backend (Sections~\ref{sec:groupd} and~\ref{sec:latency}) --- but it removes what would otherwise be the dominant, and otherwise-prohibitive, bottleneck. This fast path was cross-checked record-by-record against the slow path (\texttt{ExperimentRunner} + \texttt{SynchronousVerifiedPolicy}) run one grid point at a time, under identical parameters, and produced identical results.
\subsection{Ground truth for correctness}
Following vCache's own harness: whether two records' answers are equivalent is judged by the dataset's own equivalence-class label (\texttt{ID\_\allowbreak Set} / \texttt{id\_\allowbreak set}), not by calling a real LLM to compare semantics. A hit's correctness is whether the matched historical entry shares the current request's equivalence class; on a miss, the same check (``would it have been correct had it hit'') is also performed, so every single request yields a full TP/FP/TN/FN entry in the confusion matrix.
\section{Experimental Setup}
\subsection{Datasets}
\begin{table}[h]
\centering
\small
\begin{tabular}{@{}lp{2cm}p{5cm}p{4.2cm}@{}}
\toprule
\textbf{Dataset} & \textbf{Size} & \textbf{Source} & \textbf{Characteristics} \\
\midrule
SemCacheLMArena & 60{,}000 (of 63{,}796) & LM-Arena human-preference logs; GPT-4o-mini-generated, 3{,}500 classes with 1--23 paraphrases each & Conversational, long-form, high lexical diversity \\
\addlinespace
SemCacheSearchQueries & 150{,}000 & ORCAS search logs, Llama-3-8B answers, equivalence classes via union-find + LLM judge & Short queries, keyword-dense \\
\bottomrule
\end{tabular}
\caption{Datasets used.}
\end{table}
Both datasets come directly from HuggingFace \texttt{vCache/\allowbreak SemBenchmarkLmArena} and \texttt{vCache/\allowbreak SemBenchmarkSearchQueries}, using the datasets' own \textbf{precomputed embeddings} (\texttt{emb\_\allowbreak e5\_\allowbreak large\_\allowbreak v2} for LmArena, \texttt{emb\_\allowbreak gte} for SearchQueries) rather than re-encoding with sentence-transformers --- even with a matching model name, re-encoding risks failing to reproduce the paper's numbers due to version or pooling differences.
\subsection{Online evaluation protocol}
Following vCache's official harness: \textbf{no offline history split}. The cache starts empty, and the first $N$ records of the dataset are streamed once, in their original order. Groups A/C/D require no pre-calibration; Group B's threshold learning also happens entirely online, within this same single pass. This differs from this project's originally planned 20\%/80\% history/eval split, which was abandoned specifically so results would be directly comparable to already-published numbers.
\subsection{Hyperparameter grids}
\label{sec:grids}
\begin{itemize}[leftmargin=*]
\item Group A's $\tau$: $[0.80, 0.83, 0.86, 0.89, 0.92, 0.95, 0.97, 0.98, 0.99]$ (matching vCache's \texttt{STATIC\_\allowbreak THRESHOLDS}).
\item Group B's target error rate $\delta$: $[0.01, 0.015, 0.02, 0.025, 0.03, 0.035, 0.04, 0.05, 0.06, 0.07]$ (matching vCache's \texttt{DELTAS}).
\item Group C/D's \tauhigh\ fixed at $0.97$ (one of Group A's own grid points, for comparability); \taulow\ swept over $[0.80, 0.83, 0.86, 0.89, 0.92, 0.95]$.
\item Group D's verifier raw-score decision threshold is swept as a separate axis: $[-2, -1, 0, 1, 2]$ for LmArena, $[-11.5, -11.0, -10.5, -10.0, -9.0, -8.0]$ for SearchQueries --- the two datasets use different grids for the reason given in Section~\ref{sec:groupd}.
\end{itemize}
\subsection{Verifier implementations}
\label{sec:verifiers}
\begin{itemize}[leftmargin=*]
\item \textbf{Oracle} (Group C): approves based on ground-truth equivalence class, with a fixed 70ms modeled latency standing in for the API-class LLM judge (GPT-4.1-nano) Krites itself would call --- an explicitly labeled modeling assumption, not a measurement.
\item \textbf{Cross-Encoder} (Group D): \texttt{cross-encoder/\allowbreak ms-marco-MiniLM-L6-v2}, scoring the relevance of (query, candidate cached answer), with latency measured as actual CPU inference time.
\end{itemize}
\subsection{Metrics}
Hit rate; error rate (global, denominator over all requests); precision/recall (treating ``was it served'' as a prediction of ``was the match correct''); gray-zone-specific false-approve/false-reject rates (computed only over the $\text{verifier\_invoked}=\text{True}$ subset, kept distinct from the global confusion matrix); verifier call rate; mean verifier latency; expected added latency (call rate $\times$ mean latency). Hit rate and error rate are both reported with 95\% bootstrap confidence intervals (200 resamples).
\section{Results}
\subsection{Group A: the classic static-threshold trade-off}
\label{sec:groupa}
\begin{figure}[h]
\centering
\includegraphics[width=0.85\textwidth]{results/lmarena_pareto_full.png}
\caption{Four-group Pareto comparison on SemCacheLMArena.}
\label{fig:lmarena}
\end{figure}
\begin{figure}[h]
\centering
\includegraphics[width=0.85\textwidth]{results/search_queries_pareto_full.png}
\caption{Four-group Pareto comparison on SemCacheSearchQueries.}
\label{fig:searchqueries}
\end{figure}
\begin{table}[h]
\centering
\small
\begin{tabular}{@{}lccc@{}}
\toprule
\textbf{Dataset} & $\tau=0.80$ & $\tau=0.97$ & $\tau=0.99$ \\
\midrule
LmArena & hit 99.7\% / error \textbf{11.4\%} & hit 72.8\% / error 5.16\% & hit 36.1\% / error 2.68\% \\
SearchQueries & hit 85.6\% / error \textbf{34.3\%} & hit 28.1\% / error 4.66\% & hit 10.9\% / error 1.37\% \\
\bottomrule
\end{tabular}
\caption{Group A operating points at three representative thresholds.}
\end{table}
Figures~\ref{fig:lmarena} and~\ref{fig:searchqueries} plot all four groups together; Group A's own curve is discussed first. The error rate at a loose threshold --- 11.4\% on LmArena, a striking 34.3\% on SearchQueries --- is empirical confirmation of this paper's motivation (Section~\ref{sec:intro}): SearchQueries' short, keyword-dense queries produce far more confusable pairs (e.g.\ ``pause'' vs.\ ``cancel'') than LmArena, so the problem with plain threshold tuning is worse on this kind of data.
\subsection{Group B: trading hit rate for a formal error-rate guarantee}
\begin{table}[h]
\centering
\small
\begin{tabular}{@{}lcc@{}}
\toprule
\textbf{Dataset} & \textbf{Hit-rate range} & \textbf{Error-rate range} \\
\midrule
LmArena & 0.04\%--0.26\% & 0.01\%--0.05\% \\
SearchQueries & 0.16\%--0.69\% & 0.03\%--0.14\% \\
\bottomrule
\end{tabular}
\caption{Group B operating range across the full $\delta$ grid.}
\end{table}
On both datasets, the faithfully ported vCache \texttt{VerifiedDecisionPolicy} drives hit rate to near zero while pushing error rate far below the target $\delta$. This is a structural cost of the algorithm itself: it requires the \textbf{exact same specific cache entry} to be hit as the nearest neighbor by subsequent requests at least 6 times --- all misses --- before it can ever be exploited. When paraphrases within a semantic class scatter their matches across different historical entries of that same class, any single entry rarely accumulates 6 observations, so most entries stay stuck in cold start. This matches vCache's own core selling point --- trading hit rate for a formal guarantee --- rather than indicating a porting error. Because Group B's operating point sits at a completely different hit-rate scale than A/C/D, it is not included directly in the Go/No-Go comparison below.
\textbf{[2026-08-17 update, a real discrepancy found by comparing line-by-line against the official implementation]} Section~\ref{sec:limitations}'s limitations noted that Group B's port had been checked line-by-line against vCache's source but never numerically cross-validated against a run of the official code on the same data. Cloning the official repository (\texttt{github.com/\allowbreak vcache-project/\allowbreak vCache}) and checking the \texttt{\_\allowbreak Algorithm} class's formulas line by line confirmed the design matrix, gamma clipping, $\hat{t}$, the perfect-separation variance table, the delta-method variance, the tau grid search, the EXPLORE/EXPLOIT mapping, and observing only on the miss branch all match this paper's port exactly. But one previously undocumented real difference turned up: the official \texttt{EmbeddingMetadataObj} (a cache entry's metadata object) is constructed with \textbf{two synthetic bootstrap observations pre-seeded} --- $(\text{similarity}=0.0, \text{label}=\text{incorrect})$ and $(\text{similarity}=1.0, \text{label}=\text{correct})$ --- that are never removed; this paper's port (\texttt{\_\allowbreak EmbeddingStats}) started from an empty list. This means the official implementation only needs \textbf{4 real observations} to clear the \texttt{min\_\allowbreak observations=6} cold-start gate, versus \textbf{6 real observations} for this paper's prior port --- and every subsequent fit differs systematically from the official one for lacking those two seed points.
After the fix (\texttt{cacheverifier/\allowbreak cache/\allowbreak adaptive\_\allowbreak threshold.py::\allowbreak \_\allowbreak EmbeddingStats.observations}'s default changed from an empty list to \texttt{[(0.0, 0), (1.0, 1)]}), Group B was rerun at full scale on all three datasets (the $\delta$ grid was reduced from the original 10 points to 4 representative values, $[0.01, 0.03, 0.05, 0.07]$, to control the added compute cost from fitting triggering far more often):
\begin{table}[h]
\centering
\small
\begin{tabular}{@{}lcccccc@{}}
\toprule
\textbf{Dataset} & $\bm{\delta}$ & \textbf{Hit rate before} & \textbf{Hit rate after} & \textbf{Ratio} & \textbf{Error rate after} & \textbf{Still} $\bm{\le \delta}$\textbf{?} \\
\midrule
LmArena & 0.01 & 0.04\% & 1.21\% & 29.1x & 0.02\% & yes \\
LmArena & 0.07 & 0.26\% & 3.57\% & 13.5x & 0.20\% & yes \\
Quora & 0.01 & 0.02\% & 0.12\% & 5.4x & 0.09\% & yes \\
Quora & 0.07 & 0.16\% & 0.91\% & 5.6x & 0.73\% & yes \\
SearchQueries (corrected) & 0.01 & 0.16\% & 0.80\% & 5.1x & 0.12\% & yes \\
SearchQueries (corrected) & 0.07 & 0.69\% & 3.06\% & 4.4x & 0.68\% & yes \\
\bottomrule
\end{tabular}
\caption{Group B hit rate before/after the seed-observation fix, at the two extreme tested $\delta$ values.}
\end{table}
Hit rate rose across all three datasets and all four $\delta$ values, with LmArena's gain (13.5x--29.1x) markedly larger than Quora/SearchQueries' (4.4x--5.6x) --- a plausible explanation is that LmArena's semantic classes scatter their paraphrases more (Section~\ref{sec:datasets}: 3,500 classes, 1--23 paraphrases each), so any single entry already found it harder to accumulate observations, making the ``two fewer real observations needed'' shortcut proportionally more valuable there --- though this explanation was not independently verified. \textbf{Error rate stayed below the target $\delta$ at all 12 tested points --- the formal guarantee was never violated.} This is not ``the mechanism itself has near-zero hit rate'' being overturned, but rather this paper's prior port being needlessly conservative in a way that didn't compromise correctness but did systematically leave hit rate on the table. The ranges reported in the table above should therefore be read as this paper's \emph{prior port's} hit rate, not the true ceiling achievable by the official vCache algorithm; the discussion below (the Go/No-Go criterion only compares A/C/D, never B directly) is unaffected by this correction. One unrelated, pre-existing CLI bug turned up in the same pass: \texttt{run\_\allowbreak baselines.py}'s \texttt{--target-error-rates}/\texttt{--threshold-grid} override flags only take effect on the \texttt{--dataset} code path and are silently ignored when \texttt{--config} is used (an indentation bug puts the override logic inside the \texttt{else} branch) --- worked around here by using \texttt{--dataset} with explicit \texttt{--embedder}/\texttt{--max-samples}, but the bug itself remains unfixed.
\subsection{Group C: the theoretical ceiling of the synchronous mechanism}
\label{sec:groupc}
Following the same approach used for A, C's and D's points are compared against a \textbf{linear interpolation} of Group A's own Pareto frontier (rather than only against A's tested discrete grid points, which --- being coarser --- would understate A's true achievable performance):
\begin{table}[h]
\centering
\small
\begin{tabular}{@{}lcc@{}}
\toprule
\textbf{Dataset} & \textbf{C's max.\ lead over A's interpolated frontier} & \textbf{All grid points lead?} \\
\midrule
LmArena & \textbf{+20.6 pp} (hit rate, matched error rate) & Yes (6/6) \\
SearchQueries & \textbf{+27.9 pp} & Yes (6/6) \\
\bottomrule
\end{tabular}
\caption{Group C (oracle) versus Group A's interpolated frontier.}
\end{table}
Under the assumption of a perfect verifier, the synchronous gating mechanism has substantial theoretical headroom on both datasets, and more so on SearchQueries --- because that dataset has more candidates that are ``high similarity but wrong,'' giving a verifier more room to recover. This shows the mechanism itself is not falsified: the question is not whether synchronous verification is worth doing in principle, but which verifier to use.
\subsection{Group D: a real verifier cashes in only a sliver of that ceiling}
\label{sec:groupd}
The same interpolation-based comparison, applied to Group D (30 grid points for LmArena, 36 for SearchQueries):
\begin{table}[h]
\centering
\small
\begin{tabular}{@{}lccccc@{}}
\toprule
\textbf{Dataset} & \textbf{Beats A} & \textbf{Tied} & \textbf{Loses} & \textbf{Best net lead} \\
\midrule
LmArena & 14/30 & 5/30 & 11/30 & \textbf{+1.9 pp} ($\taulow{=}0.89$, threshold$\approx 0$, error$\approx 5.99\%$) \\
SearchQueries (corrected, see erratum) & 1/36 & 12/36 & 23/36 & \textbf{+0.30 pp} ($\taulow{=}0.95$, threshold$=9$, error$\approx 5.85\%$) \\
\bottomrule
\end{tabular}
\caption{Group D (cross-encoder) versus Group A's interpolated frontier.}
\end{table}
LmArena's best point is statistically significant: hit rate 89.4\% (95\% CI [89.2\%, 89.7\%]) versus Group A's nearest comparable point ($\tau=0.95$, error rate 5.96\%): hit rate 87.0\% (95\% CI [86.7\%, 87.3\%]) --- the two confidence intervals do not overlap. But this lead is \textbf{less than one-tenth} of the oracle ceiling (+20.6pp), and more than a third of the 30 tested points (11) actually did \emph{worse} than simply tuning the static threshold --- meaning this real verifier's benefit depends heavily on the specific $(\taulow, \text{threshold})$ chosen, not a robust region one can set and forget.
The SearchQueries result (corrected, see erratum above) is \textbf{net harmful}, not ``effectively zero'': only 1 of 36 grid points genuinely beats Group A's interpolated frontier, 12 tie, and \textbf{23 lose} to the static-threshold frontier; the best point's lead is only +0.30 percentage points. The gray zone's false-approve and false-reject rates fluctuate in the 21\%--50\% and 33\%--74\% ranges respectively --- not the ``no signal'' pattern of near-chance rates, but a model that is genuinely using the candidate answer's real content to make a judgment, and is frequently wrong, badly enough that the net effect is worse than no verifier at all. This is also why this paper used different verifier-score threshold grids for the two datasets (Section~\ref{sec:grids}): the grid calibrated on LmArena ($[-2,-1,0,1,2]$) applied to SearchQueries revealed that dataset's real score distribution (corrected) is $[-11.5, 11.6]$, mean $\approx 5.9$ --- shaped quite differently from LmArena's, requiring a grid chosen from SearchQueries' own percentiles ($[1,3,5,7,9,11]$) rather than reused wholesale. This remains a direct empirical demonstration that verifier hyperparameters do not transfer across domains; only the specific numbers have changed with the erratum.
\textbf{[2026-08-15, honest-calibration ablation, directly testing the methodological issue flagged by this section's threshold grid]} The verdict above uses this paper's original approach: sweep a hand-picked, coarse threshold grid, then report the best point in that grid --- exactly the methodological weakness Section~\ref{sec:limitations}'s limitations already flag (``the threshold grid is calibrated post hoc, not fixed in advance on an independent held-out set''). Since the commercial product \texttt{cacheverifier-service} already implements an honest calibration procedure (Youden's J statistic, \texttt{verifier\_\allowbreak core/\allowbreak finetune.py::\allowbreak select\_\allowbreak threshold}), that same procedure was run against this paper's three datasets: at each $\taulow$, the gray-zone stream is split chronologically into a calibration half and a test half; the threshold is picked via Youden's J on the calibration half only, then hit rate/error rate is measured honestly on the test half, which never influenced the threshold, and compared against Group A's interpolated frontier:
\begin{table}[h]
\centering
\small
\begin{tabular}{@{}lp{0.5\textwidth}@{}}
\toprule
\textbf{Dataset} & \textbf{Honest calibration vs.\ Group A frontier (6 tested points)} \\
\midrule
SearchQueries (corrected, full 150,000 records) & \textbf{6/6 beat}, +0.78pp to +3.67pp \\
LmArena (full 60,000 records) & 5/6 beat by a small margin (+0.17pp to +3.04pp), 1/6 ($\taulow{=}0.95$) lost by a small margin (-0.56pp) \\
Quora (full 60,000 records) & 6/6 lost by a small margin, -0.12pp to -1.77pp \\
\bottomrule
\end{tabular}
\caption{Honest-calibration ablation vs.\ Group A, all three datasets.}
\end{table}
\textbf{The SearchQueries verdict reverses.} Under an honestly-calibrated threshold, the same untuned, off-the-shelf verifier beats the static-threshold frontier at all 6 tested points, rather than the ``23 of 36 grid points lost to the static threshold'' reported above. This suggests a substantial share of the original ``net harmful'' verdict was itself an artifact of the grid search --- the hand-picked raw score values ($[1,3,5,7,9,11]$) most likely never covered the operating point Youden's J is able to find, rather than reflecting a genuine absence of usable discriminative power on this dataset. LmArena's honest-calibration result is directionally consistent with, and of similar magnitude to, the originally reported result (+1.9pp at the best point), without the qualitative reversal seen on SearchQueries (an initial run was inflated by a non-random subsample and was corrected with a full-dataset rerun; see \texttt{RESEARCH\_\allowbreak PROPOSAL.md} \S10 direction 1 for the full account). Quora is the only dataset where honest calibration makes things worse --- diagnosis shows this is not a calibration-method problem but the dataset's own structural difficulty: the verifier's overall score AUC is about 0.61 (real signal exists), but the score distributions of correct and incorrect candidates overlap substantially, traceable to the QQP paraphrase-detection task itself mixing annotation noise with deliberately-constructed ``surface-similar, semantically-different'' hard negatives (e.g.\ ``George H.W. Bush'' vs.\ ``George W. Bush'' --- two different presidents, nearly identical text) that cap how separable any single threshold can make this dataset; see \texttt{RESEARCH\_\allowbreak PROPOSAL.md} \S10 direction 1 for details.
Taken together, the three datasets show that honest calibration is \textbf{not} a free correction that reliably helps --- removing the known bias of post-hoc grid search can make results better or worse depending on how genuinely separable the verifier's off-the-shelf scores are on that domain. For SearchQueries, removing the grid-search bias reveals a verifier that had usable signal all along, which the original evaluation simply failed to find; for Quora, removing the bias reveals the verifier's own signal ceiling. \textbf{This result initially covered only the untuned Group D.} Section~\ref{sec:groupe}'s fine-tuned Group E numbers (53/54 wins on SearchQueries) still used the same post-hoc grid-search method and had not yet been re-examined under honest calibration at the time --- \textbf{[2026-08-16, Group E tested, no longer an open question]} the identical procedure (chronological calibration/test split per $\taulow$, Youden's J picked on the calibration half only) was rerun against each dataset's own Group E fine-tuned verifier (script \texttt{scripts/\allowbreak threshold\_\allowbreak calibration\_\allowbreak ablation\_\allowbreak groupE.py}; raw logs/JSON in \texttt{results/\allowbreak logs/\allowbreak } and \texttt{results/\allowbreak *\_\allowbreak groupE\_\allowbreak honest\_\allowbreak calibration.json}):
\begin{table}[h]
\centering
\small
\begin{tabular}{@{}lp{0.32\textwidth}p{0.1\textwidth}p{0.32\textwidth}@{}}
\toprule
\textbf{Dataset} & \textbf{Honest calibration vs.\ Group A frontier (6 tested points)} & \textbf{Best net lead} & \textbf{Original grid search (reported above)} \\
\midrule
LmArena & \textbf{6/6 beat} & +5.66pp & (no exact count reported; text says ``nearly every tested point'') \\
SearchQueries (corrected) & \textbf{6/6 beat} & +7.74pp & 53/54 beat, 1 tie, 0 lost, +4.50pp \\
Quora & 3/6 beat, 3/6 tie, \textbf{0/6 lost} & +0.43pp & 19/48 beat, 29/48 tie, 0/48 lost, +2.03pp \\
\bottomrule
\end{tabular}
\caption{Honest-calibration ablation, Group E (fine-tuned verifier), all three datasets.}
\end{table}
The verdict: \textbf{Group E's core qualitative claim --- the fine-tuned verifier is never a net loss against the static-threshold frontier --- holds fully under honest calibration}, zero losses on all three datasets. But the magnitude splits the same way Group D did: LmArena and SearchQueries's honest-calibration lead does not shrink but actually grows (+5.66pp, +7.74pp, both exceeding the originally reported grid-search numbers), while Quora narrows substantially (+2.03pp $\to$ +0.43pp, the same direction as Group D's honest-calibration narrowing, traceable to the same QQP score-separability ceiling diagnosed earlier in this section rather than a calibration-method artifact). One methodological caveat: honest calibration yields exactly one test point per $\taulow$ (calibration/test split in half each), while the original grid search swept a whole threshold grid per $\taulow$, so ``6/6'' and ``53/54'' have non-comparable denominators --- what is comparable is the \emph{direction} (win/tie/loss proportions) and the \emph{magnitude of the lead when winning}, not a direct ratio-to-ratio comparison. A second caveat concerns data provenance: the LmArena and SearchQueries (corrected) checkpoints used here are the exact same ones that produced this paper's original Section~\ref{sec:groupe} numbers (hosted at Hugging Face \texttt{ChengyouXin/\allowbreak cacheverifier-lmarena}, and the locally-verified \texttt{finetuned\_\allowbreak verifier\_\allowbreak model\_\allowbreak searchqueries\_\allowbreak corrected}, respectively); Quora's original 2026 checkpoint was never persisted anywhere (not committed to the repo, never uploaded to Hugging Face, and long since cleaned off disk), so it was retrained here from the exact original train/test split (\texttt{results/\allowbreak finetune\_\allowbreak verifier\_\allowbreak experiment\_\allowbreak quora.examples.json}, 11,928 train / 5,112 test, matching the original record counts exactly) --- the retrained baseline AUC reproduces the original report bit-for-bit (0.6309, deterministic given a fixed untuned model and test set) and the retrained fine-tuned AUC is close (0.7407 vs.\ the original 0.7393, $\Delta$=0.0014), reasonably a faithful replication of the same experiment rather than an incomparable new one, but it is not literally the same weights, and that distinction is recorded here rather than glossed over.
\subsection{The latency cost of going synchronous}
\label{sec:latency}
At its highest-call-rate operating point (SearchQueries, $\taulow=0.80$: 57.5\% of requests enter the gray zone), the oracle (70ms modeled latency) adds an average of +40.3ms per request; the real cross-encoder's measured average latency at a comparable call rate is about 66--68ms (measured when the SearchQueries run executed alone; the LmArena run's measured latency was inflated to about 288ms because it competed for CPU with three other parallel jobs, and should not be treated as a reliable estimate of the model's own latency). Both figures quantify something Krites' own paper only judged qualitatively (``will increase latency'') without measuring.
\textbf{[2026-08-17 update, a real measurement of the oracle's latency]} The 70ms figure above is a modeling assumption explicitly flagged in Section~\ref{sec:verifiers} (``representing the order of magnitude of the API-class LLM judge Krites would call, GPT-4.1-nano'') that was never empirically validated --- also listed as a gap in Section~\ref{sec:limitations}'s limitations. \texttt{scripts/\allowbreak measure\_\allowbreak oracle\_\allowbreak judge\_\allowbreak latency.py} ran a real measurement: with no access to a GPT-4.1-nano API, DeepSeek (\texttt{deepseek-chat}) was used as a same-class stand-in (small, API-hosted, not locally deployed) --- the same substitution principle already used and documented for the SearchQueries erratum (``no Llama-3-8B access, substituted DeepSeek''). 50 (query, candidate cached answer) pairs were drawn from each of LmArena/Quora/SearchQueries (candidates from neighboring records, mirroring what a real gray-zone judge call sees), sent as an equivalence-judgment prompt structurally similar to Krites' own asynchronous judge (``is the candidate still a correct answer to the query --- YES/NO only''), and called sequentially (not concurrently) to record wall-clock latency, 150 calls total:
\begin{table}[h]
\centering
\small
\begin{tabular}{@{}lc@{}}
\toprule
\textbf{Statistic} & \textbf{Value} \\
\midrule
Paper's modeling assumption & 70ms \\
Measured mean & \textbf{1687.8ms} \\
Measured median & 1651.1ms \\
p95 & 2064.9ms \\
min / max & 1347.9ms / 2765.2ms \\
\bottomrule
\end{tabular}
\caption{Real API-latency measurement (DeepSeek, $n=150$) vs.\ the paper's modeled Oracle latency.}
\end{table}
The measured mean is \textbf{about 24x} the modeling assumption. 70ms looks more like the order of magnitude of network round-trip/queueing overhead alone, without accounting for the time a real LLM actually needs to generate tokens. Substituting this measured mean for the constant 70ms at the operating points reported earlier in this section (this only recomputes the ``expected added latency = call rate $\times$ mean latency'' statistic --- it changes no hit-rate/error-rate number, since the oracle's correctness judgment is independent of the latency value):
\begin{table}[h]
\centering
\small
\begin{tabular}{@{}lccc@{}}
\toprule
\textbf{Dataset (highest-call-rate point)} & \textbf{Gray-zone call rate} & \textbf{Expected added latency (modeled)} & \textbf{Expected added latency (real)} \\
\midrule
SearchQueries ($\taulow=0.80$) & 57.5\% & 40.3ms & \textbf{970.5ms} \\
Quora ($\taulow=0.80$) & 28.4\% & 19.9ms & \textbf{479.3ms} \\
LmArena ($\taulow=0.80$) & 26.8\% & 18.8ms & \textbf{452.3ms} \\
\bottomrule
\end{tabular}
\caption{Expected added latency: modeled 70ms vs.\ the real measured mean, at each dataset's highest-call-rate point.}
\end{table}
This moves the latency cost from ``tens of milliseconds, probably negligible'' to ``hundreds of milliseconds to nearly a second, worth taking seriously'' --- directly affecting how much weight Section~\ref{sec:golo}'s claim that ``synchronicity itself doesn't erode benefit, at the cost of a quantifiable latency'' should carry; see the update to Section~\ref{sec:golo}. This measurement has its own limits worth stating: DeepSeek and GPT-4.1-nano are different models on different hosting infrastructure, and measured latency will vary with the specific API provider, region, and concurrency strategy --- the order of magnitude reported here, not the precise millisecond figure, is this measurement's main contribution, and the original 70ms assumption is very likely an underestimate by roughly this order of magnitude regardless of which API provider is substituted in.
\subsection{Group E: a domain-fine-tuned verifier closes the gap across all three datasets}
\label{sec:groupe}
Section~\ref{sec:groupd}'s diagnosis was that the off-the-shelf cross-encoder's benefit is fragile on LmArena and entirely absent on SearchQueries, because the model was never calibrated to either dataset's own gray zone. A direct test: fine-tune the same base model (\texttt{cross-encoder/\allowbreak ms-marco-MiniLM-L6-v2}) separately on each dataset's own gray-zone examples --- pairs of $(\text{query}, \text{candidate cached answer})$ with a binary ``would this hit have been correct'' label --- and see how much of Group D's shortfall against Group C's ceiling closes on each.
\textbf{Setup.} Each dataset's gray zone ($\taulow=0.80, \tauhigh=0.97$) is split \textbf{by stream position, not randomly} --- the first 70\% for fine-tuning, the last 30\% held out for evaluation --- mirroring a real ``calibrate on past traffic, deploy on future traffic'' deployment rather than i.i.d.\ cross-validation. LmArena yields 16,102 labeled examples (11,271 train / 4,831 test); SearchQueries, being shorter-text and higher-call-rate (Section~\ref{sec:latency}), yields far more: 86,280 (60,398 train / 25,886 test). The base model is fine-tuned for one epoch with sentence-transformers' \texttt{CrossEncoderTrainer} and a binary cross-entropy loss, on CPU --- LmArena's longer conversational text took 43 minutes to fine-tune; SearchQueries' short keyword queries, despite 5.4$\times$ more training examples, took under 6 minutes, since per-example compute scales with sequence length.
\textbf{Held-out AUC.}
\begin{table}[h]
\centering
\small
\begin{tabular}{@{}lccc@{}}
\toprule
\textbf{Dataset} & \textbf{Untuned AUC} & \textbf{Fine-tuned AUC} & $\boldsymbol{\Delta}$ \\
\midrule
LmArena & 0.7212 & 0.8789 & \textbf{+0.158} \\
SearchQueries & 0.5984 (corrected; original 0.4881 was a placeholder-data defect, see erratum above) & 0.7120 & \textbf{+0.114} \\
\bottomrule
\end{tabular}
\caption{Held-out ROC-AUC before and after fine-tuning, both datasets.}
\end{table}
LmArena's untuned verifier already had some signal (0.72); fine-tuning sharpens it. SearchQueries' untuned verifier (corrected, see erratum above) has AUC 0.5984 --- also real signal, but as Section~\ref{sec:groupd} shows, that signal is frequently used to make the wrong call, so the net effect is worse than no verifier at all. Fine-tuning does not fully repair the absolute gap to LmArena (0.7120 vs.\ 0.88), but it moves the model from \emph{has signal, frequently misuses it} to \emph{has real signal and mostly uses it correctly}.
\textbf{Effect on the Pareto frontier.} Plugging each fine-tuned model back into the same synchronous gray-zone gating mechanism (\texttt{SynchronousVerifiedPolicy}, unchanged) and replaying it over the full stream as Group E, then comparing against Group A's interpolated frontier --- the same test Section~\ref{sec:groupd} applied to Group D:
\begin{table}[h]
\centering
\small
\begin{tabular}{@{}lp{0.34\textwidth}p{0.4\textwidth}@{}}
\toprule
\textbf{Dataset} & \textbf{Group D vs.\ A (Sec.~\ref{sec:groupd})} & \textbf{Group E vs.\ A} \\
\midrule
LmArena & 14/30 beat, 11/30 lost, best +1.9pp & hit rate \textbf{+2.8 to +8.3pp} vs.\ D at matched error; frontier strictly wider \\
SearchQueries (corrected, see erratum) & \textbf{1/36 beat, 12/36 tied, 23/36 lost}, best +0.30pp & \textbf{53/54 beat, 1/54 tied, 0/54 lost}, best net lead \textbf{+4.50pp} \\
\bottomrule
\end{tabular}
\caption{Group D versus Group E, each against Group A's interpolated frontier.}
\end{table}
\begin{figure}[h]
\centering
\includegraphics[width=0.85\textwidth]{results/lmarena_pareto_full_with_finetune.png}
\caption{Group E (fine-tuned verifier) added to the four-group Pareto comparison on SemCacheLMArena.}
\label{fig:lmarena-groupe}
\end{figure}
\begin{figure}[h]
\centering
\includegraphics[width=0.85\textwidth]{results/search_queries_pareto_full_with_finetune.png}
\caption{Group E (fine-tuned verifier) added to the four-group Pareto comparison on SemCacheSearchQueries.}
\label{fig:searchqueries-groupe}
\end{figure}
Figures~\ref{fig:lmarena-groupe} and~\ref{fig:searchqueries-groupe} plot Group E alongside the original four groups on each dataset. The two datasets tell different but complementary stories. On LmArena, fine-tuning turns a fragile, partly-losing verifier into one that strictly dominates the static-threshold frontier and widens the achievable region in both directions (error rate down to $\approx$0.052, hit rate up to $\approx$0.96). On SearchQueries (corrected, see erratum above), fine-tuning turns a verifier that was \textbf{net harmful} --- 23 of 36 operating points lost to the static threshold, not ``indistinguishable from chance'' --- into one that beats the static baseline at 53 of 54 tested operating points, ties at 1, and loses at zero (best net lead +4.50pp), even though its absolute AUC (0.7120) remains well below LmArena's (0.88). This qualitative swing --- from ``net harmful'' to ``wins almost everywhere'' --- is more extreme than the ``null result to real improvement'' swing originally reported, and changes the picture on the dataset this paper's Go/No-Go verdict rested most heavily on even more than before.
This is the clearest evidence in this paper that Section~\ref{sec:golo}'s diagnosis (``the variable that matters is how well the verifier matches the data domain'') is actionable, not just descriptive: the same base architecture, given in-domain labeled examples that the online system already produces for free as a byproduct of running Group C/D (every gray-zone request's eventual correctness is knowable from the same ground-truth equivalence labels used to score the experiment), converts a fragile-or-nonexistent Group D result into a robust improvement over the static-threshold frontier on both datasets tested.
\textbf{A third, independently-sourced check.} To rule out that this pattern is specific to vCache's own two benchmarks, the same recipe was repeated on Quora Question Pairs (GLUE's mirror) --- 60,000 short, real user-submitted questions with human-annotated duplicate labels, a domain neither vCache nor this paper's earlier experiments touched. Quora has no LLM-generated answers or native equivalence-class column, so --- unlike LmArena/SearchQueries --- equivalence classes were reconstructed via union-find over duplicate-labeled pairs, and \texttt{answer = query} (a past matched question's own text stands in for ``the cached response''); full construction details are in \texttt{scripts/\allowbreak convert\_\allowbreak quora\_\allowbreak dataset.py}. Quora's oracle ceiling is markedly lower than the other two datasets (+11.3pp over Group A's frontier, vs.\ +20.6pp on LmArena and +27.9pp on SearchQueries), because only about a third of Quora's questions belong to a multi-member duplicate class --- most questions here are simply unique, capping how much any verifier could ever help.
Group D's off-the-shelf verifier again adds essentially nothing (0/54 beat, 50/54 tied, 4/54 \emph{lost} to the static-threshold frontier, best net lead +0.11pp) --- the untuned verifier's held-out AUC (0.6309) is well above chance, and now sits in the same tier as SearchQueries' corrected 0.5984 (both ``has some discriminative power, not enough to reliably beat an already-strong similarity baseline,'' rather than the originally-reported contrast of ``SearchQueries near-chance, Quora not coincidental'' --- SearchQueries' earlier 0.4881 was itself a data defect and should not be read as a real discriminative-power baseline; see erratum above and Section~\ref{sec:groupd}). Fine-tuning (11,928 in-domain examples) raises AUC to 0.7393 (+0.108) and, plugged back in as Group E, turns that null result into a modest but unambiguous win: 19/48 grid points beat Group A's frontier, 29/48 tied, \textbf{0/48 lost} (best net lead +2.03pp; +0.76pp mean improvement over Group D at matched error rate). The margin is the smallest of the three datasets --- proportional to Quora's smaller headroom --- but the qualitative pattern now holds across corrected SearchQueries and original LmArena alike: across all three independently-sourced datasets tested, fine-tuning \textbf{never produced a worse result than the untuned verifier}, and converted every fragile, null, or (as with SearchQueries' corrected Group D) net-harmful result into at least a modest, loss-free improvement over the static-threshold baseline.
\begin{figure}[h]
\centering
\includegraphics[width=0.85\textwidth]{results/quora_pareto_full_with_finetune.png}
\caption{Group E (fine-tuned verifier) added to the four-group Pareto comparison on Quora Question Pairs --- a third, independently-sourced dataset.}
\label{fig:quora-groupe}
\end{figure}
\subsection{Practical deployment considerations: label noise, cold start, and drift}
\label{sec:deployment}
Section~\ref{sec:groupe} fine-tunes on clean, oracle-quality labels harvested from Groups C/D's own ground truth. Three further questions determine whether this translates into an operable production capability rather than a lab result: (1) how much label noise --- from a realistic feedback signal such as user thumbs-up/down, rather than an oracle --- can the fine-tuning tolerate before it stops helping, or starts actively hurting; (2) how many labeled examples does a newly onboarded deployment need to accumulate before turning fine-tuning on is worth the risk; (3) how quickly does a fine-tuned verifier's advantage decay as production traffic drifts away from its training window, which determines how often it must be refreshed. Each was tested on all three datasets, reusing the same fine-tuning recipe as Section~\ref{sec:groupe}, on an NVIDIA T4 GPU.
\textbf{Label noise robustness.} Training labels in a 4,000-example fixed subset were randomly flipped at five noise levels (0/5/10/20/30/40\%) before fine-tuning (one epoch); test labels were never touched, so held-out AUC always measures against true ground truth.
\begin{table}[h]
\centering
\small
\begin{tabular}{@{}lccc@{}}
\toprule
\textbf{Noise} & \textbf{LmArena $\Delta$} & \textbf{SearchQueries $\Delta$ (corrected)} & \textbf{Quora $\Delta$} \\
\midrule
0\% & +0.107 & +0.017 & +0.083 \\
10\% & +0.083 & +0.016 & +0.074 \\
20\% & +0.051 & +0.015 & +0.044 \\
30\% & +0.028 & +0.003 & +0.006 \\
40\% & \textbf{-0.101} & \textbf{-0.011} & \textbf{-0.037} \\
\bottomrule
\end{tabular}
\caption{AUC delta vs.\ train label noise, all three datasets.}
\end{table}
\textbf{[2026-08-09, rerun on corrected data, replacing the placeholder-data result]} All three datasets show the same shape: a gentle, roughly linear decline through 30\% noise, then a rapid approach to, or across, zero. The interpolated zero-crossing is \textbf{32.2\% for LmArena, $\approx$32.1\% for SearchQueries (corrected), and 31.4\% for Quora} --- all three now nearly identical. This differs from the original finding: on the placeholder data, SearchQueries looked like the noise-tolerant outlier, never crossing zero even at 40\%; corrected, that apparent exception disappears and it lines up with the other two. Below roughly 30\% label-noise, fine-tuning reliably helps; above it, \textbf{all three} datasets actively learn the wrong association and perform worse than not fine-tuning at all --- SearchQueries is no longer the exception.
\textbf{Cold-start data requirements.} The same recipe was re-run with increasingly larger prefixes of each dataset's own (temporally ordered) training split, from 50 examples up to the full available set (three epochs, to give small subsets a fair chance to converge).
\begin{table}[h]
\centering
\small
\begin{tabular}{@{}lccc@{}}
\toprule
\textbf{Train size} & \textbf{LmArena $\Delta$} & \textbf{SearchQueries $\Delta$ (corrected)} & \textbf{Quora $\Delta$} \\
\midrule
50 & +0.001 & \textbf{-0.013} & +0.012 \\
200 & +0.030 & \textbf{-0.017} & +0.018 \\
500 & +0.050 & \textbf{-0.008} & +0.002 \\
1{,}000 & +0.080 & +0.004 & +0.049 \\
4{,}000 & +0.136 & +0.029 & +0.096 \\
Full (11.3k--60.4k) & +0.188 & +0.143 & +0.118 \\
\bottomrule
\end{tabular}
\caption{AUC delta vs.\ cold-start training set size, all three datasets.}
\end{table}
\textbf{[2026-08-09, rerun on corrected data, replacing the placeholder-data result]} All three curves rise smoothly on a log scale with \textbf{no saturation} even at full dataset size --- more in-domain data keeps helping. But the small-sample region is not uniformly benign: SearchQueries (corrected untuned baseline AUC 0.5984, no longer near chance) shows a \textbf{wider} negative-return zone than originally reported --- not ``below roughly 200 examples,'' but persisting through 500 and only turning positive at 1{,}000, roughly a 5x higher threshold than the original (placeholder-data) estimate. This risk is not visible on LmArena's stronger baseline at the same sizes. The direction of the correction runs opposite to the naive guess: the placeholder-data ``baseline'' was uninformative noise with almost no real signal left to disrupt; the corrected baseline already carries real discriminative power (0.5984), which small-sample fine-tuning more easily scrambles --- hence a \emph{wider}, not narrower, negative-return zone.
\textbf{Temporal drift and re-tuning cadence.} Each dataset's full gray-zone stream (train+test recombined, resorted by original position) was split into 8 equal-sized sequential chunks. A model fine-tuned on chunk $i$ (the ``anchor'') was frozen and evaluated on every chunk $j \geq i$; delta (vs.\ that chunk's own untuned baseline) was averaged across all anchors at each temporal distance $j-i$.
\begin{table}[h]
\centering
\small
\begin{tabular}{@{}lccc@{}}
\toprule
\textbf{Distance} & \textbf{LmArena $\Delta$} & \textbf{SearchQueries $\Delta$} & \textbf{Quora $\Delta$} \\
\midrule
0 (same chunk) & +0.193 & +0.308 & +0.298 \\
1 & +0.111 & +0.082 & +0.089 \\
4 & +0.124 & +0.075 & +0.085 \\
7 (farthest) & +0.129 & +0.056 & +0.069 \\
\bottomrule
\end{tabular}
\caption{Mean AUC delta vs.\ temporal distance from the fine-tuning anchor, all three datasets.}
\end{table}
\textbf{[2026-08-09, rerun on corrected data --- conclusion differs from the original]} The original analysis concluded that none of the three datasets showed continued decay beyond the first temporal step, with SearchQueries as the strongest evidence for this because its untuned baseline AUC appeared nearly flat over time (0.48--0.51). That specific supporting observation no longer holds: corrected, SearchQueries' untuned baseline AUC across the 8 chunks is $[0.643, 0.631, 0.628, 0.614, 0.612, 0.612, 0.602, 0.594]$ --- monotonically declining, about 7.7\% peak-to-trough, not flat. The ``flat baseline'' observed on placeholder data now looks like another symptom of that defect (a constant, information-free placeholder text is naturally more likely to produce a stable-looking but meaningless score distribution in any time window) rather than evidence of ``no real difficulty drift.'' Correspondingly, the delta itself does not fully plateau past distance 1 either --- it declines gradually from +0.082 to +0.056 (roughly a 32\% relative decline) --- closer to the (much smaller-magnitude) continued-decay pattern comcastcares shows in Section~\ref{sec:twitter} than to the ``zero decay'' originally reported. SearchQueries moves from ``the cleanest example of zero decay'' to a third data point showing mild-but-real decay --- far short of comcastcares' catastrophic decay, but directionally closer to it than to ``no decay at all.'' LmArena's own baseline does drift substantially by chunk (0.93 $\to$ 0.71, driven by a large positive-rate shift), yet the fine-tuned model's \emph{relative} edge over that same drifting baseline still does not decay --- the fine-tuned verifier's discriminative power generalizes across time even when the underlying task difficulty changes; this LmArena finding is unaffected by the erratum.
\textbf{Consolidated implication (updated 2026-08-09).} Cold start and drift are both \textbf{more pronounced than originally reported} for SearchQueries specifically --- not ``smaller than expected, generalizing cleanly across three datasets.'' The negative-return cold-start zone widened roughly 5x ($\approx$200 to $\approx$1{,}000 examples), and drift went from ``zero decay'' to ``mild but real decay.'' LmArena and Quora are unaffected by this correction (their \texttt{answer} fields never depended on the missing column). The one risk requiring careful engineering is feedback-signal quality: a noise-detection gate that estimates a deployment's actual label-noise rate (e.g.\ against a small manually-audited sample) before enabling fine-tuning is not optional, and the minimum-data floor should be set more conservatively for weak-baseline (harder) domains than for strong-baseline ones --- this correction is itself a concrete instance of that advice.
\subsection{A fourth check: real production customer-support traffic, and a genuine counter-example}
\label{sec:twitter}
Sections~\ref{sec:groupe}--\ref{sec:deployment} validate the fine-tuning recipe on three datasets, but all three are public research benchmarks, not real business traffic. As a further check, the same recipe was applied to two brands' streams from the Kaggle ``Customer Support on Twitter'' dataset (Axelbrooke, 2017; CC0) --- 3M+ real support tweets from dozens of companies' official accounts, with genuine per-tweet timestamps and full thread structure (\texttt{tweet\_\allowbreak id}, \texttt{in\_\allowbreak response\_\allowbreak to\_\allowbreak tweet\_\allowbreak id}, \texttt{response\_\allowbreak tweet\_\allowbreak id}, \texttt{created\_\allowbreak at}). Two brands were selected to match e-commerce and telecom use cases specifically: \textbf{AmazonHelp} (60,000 query-answer pairs, 2015-06 to 2017-10) and \textbf{comcastcares} (30,180 pairs, 2014-07 to 2017-12 --- a 3.5-year span, the longest of any dataset in this paper).
\textbf{Construction.} Neither brand's stream has an LLM-generated answer or a native equivalence-class label. A company's reply tweet is paired with the customer tweet it answers (query, answer); since there is no ground truth for ``these two customer questions are the same issue,'' equivalence classes are reconstructed from a real behavioral signal --- whether the company sent near-duplicate replies, clustered by cosine similarity of sentence embeddings (\texttt{sentence-transformers/\allowbreak all-MiniLM-L6-v2}, threshold 0.92, via sentence-transformers' \texttt{community\_\allowbreak detection} utility) rather than requiring exact string equality, since canned replies are frequently personalized (customer name, order number). An earlier exact-string-match version of this construction under-counted true duplicates so severely it produced a false-accept rate near 100\% under Group A --- a labeling artifact corrected before drawing any conclusions; full details are in \texttt{scripts/\allowbreak convert\_\allowbreak twitter\_\allowbreak cs\_\allowbreak dataset.py}.
\textbf{Group E: a genuine split result.} Repeating Section~\ref{sec:groupe}'s fine-tuning recipe on each brand's own gray zone:
\begin{table}[h]
\centering
\small
\begin{tabular}{@{}lcccc@{}}
\toprule
\textbf{Brand} & \textbf{Train/test pos.\ rate} & \textbf{Untuned AUC} & \textbf{Fine-tuned AUC} & \textbf{$\Delta$} \\
\midrule
AmazonHelp & 1.47\% / 1.02\% (consistent) & 0.666 & 0.722 & \textbf{+0.056} \\
comcastcares & \textbf{1.0\% / 5.2\% (5$\times$ mismatch)} & 0.864 & 0.678 & \textbf{-0.186} \\
\bottomrule
\end{tabular}
\caption{Group E fine-tuning results on real customer-support traffic (gray-zone train/test: AmazonHelp 4{,}361/1{,}870; comcastcares 2{,}579/1{,}106).}
\end{table}
AmazonHelp replicates Section~\ref{sec:groupe}'s pattern exactly. comcastcares does not: fine-tuning makes the verifier \emph{worse} than not fine-tuning at all, despite a training-set size (2,579) above the floor Section~\ref{sec:deployment} identified as generally safe. The diagnosis is a training/test \textbf{base-rate mismatch}: the fraction of gray-zone queries that are genuinely reusable is 1.0\% in the (earlier) training window but 5.2\% in the (later) held-out window --- a decision boundary learned under one prior shifts to a different regime, and no amount of label cleanliness fixes a mismatched prior.
\textbf{The three deployment ablations diverge in the same direction.} Repeating Section~\ref{sec:deployment}'s exact protocol on both brands:
\emph{Label noise} --- comcastcares is negative at \textbf{every} noise level tested, including 0\% (clean labels): $\Delta = -0.186$ at 0\%, ranging -0.15 to -0.23 through 40\%. This rules out noise as the driver; the base-rate mismatch alone is sufficient to make fine-tuning harmful regardless of label quality. AmazonHelp crosses to negative earlier ($\sim$5--10\%) than LmArena/Quora's $\sim$30\% zero-crossing, plausibly reflecting its smaller absolute training set (capped at 4,000) relative to the original three datasets.
\emph{Cold start} --- AmazonHelp continues Section~\ref{sec:deployment}'s ``more data helps, no saturation'' pattern ($\Delta = +0.064$ at 50 examples to +0.097 at 4,000). comcastcares does not: $\Delta$ degrades from -0.004 (50 examples) to a catastrophic \textbf{-0.569 at 2{,}000 examples (AUC 0.295, worse than chance)}, partially recovering to -0.219 at the full 2,579. This is the first observation, across four datasets, of more training data making a fine-tuned verifier \emph{worse} rather than merely failing to help --- consistent with a model trained on an increasingly larger sample of the low-base-rate window becoming a more confidently miscalibrated classifier for the high-base-rate test window.
\emph{Drift} --- AmazonHelp again matches Section~\ref{sec:deployment} (decay to a plateau, no continued degradation through distance 5, matching the memorization-then-flat pattern). comcastcares instead shows genuine \textbf{continued decay from distance 3 onward} ($\Delta = -0.19$ at distance 3 to -0.24 at distance 5, with 5 and 4 anchor-pairs respectively --- not a single noisy point), the first dataset in this paper to violate Section~\ref{sec:deployment}'s ``no continued decay'' finding.
\textbf{A single root cause, observed three ways.} comcastcares' untuned baseline AUC, computed per chunk across its 8-chunk drift split, is $[0.522, 0.39, 0.493, 0.408, 0.551, 0.569, 0.808, 0.877]$ --- non-monotonic and markedly higher in the later chunks, indicating the underlying stream's difficulty and positive-class rate are not stationary over its 3.5-year span (plausibly reflecting evolving support-template standardization). This single instability explains all three otherwise-separate anomalies: clean labels still fail (noise), more data trains a more confidently wrong model (cold start), and the verifier's edge keeps eroding rather than plateauing (drift). AmazonHelp, with a shorter recorded span ($\sim$2.4 years) and a stable positive rate, shows none of these failure modes and instead replicates Sections~\ref{sec:groupe}--\ref{sec:deployment} exactly.
\textbf{Revising Section~\ref{sec:deployment}'s conclusion.} The three-dataset finding that ``cold start and drift are smaller risks than expected, with no need for high-frequency re-tuning'' was drawn from benchmarks with comparatively short or synthetic temporal spans. comcastcares --- the only dataset in this paper with multi-year real production history --- is a direct counter-example, and the mechanism responsible (a non-stationary base rate, not merely the passage of time) is identifiable and monitorable. The practical revision: a deployment should track the \emph{stability of the gray-zone positive rate} between its fine-tuning window and current traffic, not just discriminative-power decay, and treat a detected shift as a distinct re-tuning trigger, independent of the calendar-time-based cadence Section~\ref{sec:deployment}'s other three datasets suggested was unnecessary. This is a strictly narrower, not reversed, conclusion: the risk is real but detectable, and appears specifically correlated with the length and stability of the traffic history --- a variable a synthetic re-slicing of a static benchmark (Section~\ref{sec:deployment}'s method) cannot expose, and only genuinely long-horizon production data (as tested here) can.
\subsection{A prototype monitor for the risk Section~\ref{sec:twitter} identifies}
\label{sec:monitor}
Section~\ref{sec:twitter}'s diagnosis is that comcastcares' fine-tuning failure traces to a single, identifiable cause: a shift in the gray-zone positive rate between the fine-tuning window and current traffic. If that diagnosis is right, a lightweight monitor on the positive-rate signal alone --- computed from labels the online system already produces for free, with no embedding inference or model training --- should be able to flag the instability before it degrades Group E's benefit. This is tested directly, on both brands, using two classical change-point detection methods applied to the chronological \texttt{would\_\allowbreak be\_\allowbreak correct} label sequence: (1) a chunked two-proportion z-test comparing each of 8 sequential held-out chunks against the training-window baseline rate, and (2) a Page-Hinkley sequential test, which processes the held-out stream one example at a time and flags the first position where cumulative deviation from the baseline exceeds a threshold --- closer to how an actual online monitor would run.
\begin{table}[h]
\centering
\small
\begin{tabular}{@{}lccc@{}}
\toprule
\textbf{Brand} & \textbf{Train-window pos.\ rate} & \textbf{z-test: first chunk flagged} & \textbf{Page-Hinkley: flagged at} \\
\midrule
comcastcares & 1.01\% & \textbf{chunk 5/8} ($p = 2\times10^{-20}$) & \textbf{held-out example 664/1{,}106} (chunk 5) \\
AmazonHelp & 1.47\% & never (min $p = 0.06$) & never \\
\bottomrule
\end{tabular}
\caption{Positive-rate monitor results: both methods flag comcastcares' shift and neither false-alarms on AmazonHelp.}
\end{table}
Both methods agree on comcastcares --- flagging the shift roughly halfway through the held-out window, well before the point where Section~\ref{sec:twitter}'s drift experiment showed continued AUC decay setting in --- and neither method false-alarms on AmazonHelp, the brand with a stable positive rate and no observed failure mode. This converts Section~\ref{sec:twitter}'s diagnosis from a plausible explanation into a testable, low-cost detection capability: a deployment could run this monitor continuously on data it already has, with no additional inference cost, and use a flagged shift as a concrete re-tuning trigger rather than relying on a fixed calendar schedule or waiting for downstream AUC to visibly degrade.
This remains a prototype, not a validated production monitor: it was tested retrospectively on a static held-out set rather than a genuinely streaming deployment, its threshold hyperparameters ($\alpha=0.01$ for the z-test; $\delta=0.005, \lambda=8.0$ for Page-Hinkley) were not tuned or validated beyond this single comparison, and it has only been tested on two datasets --- one with the failure mode and one without. But the core finding --- that the exact instability responsible for Section~\ref{sec:twitter}'s counter-example is detectable from labels alone, cheaply and without a false alarm on the brand that didn't need one --- is a concrete answer to the open question Section~\ref{sec:twitter} raised, not just a proposal for one.
\subsection{A tested and refuted hypothesis: action-verb bucketing as a pre-filter}
\label{sec:bucketing}
After this paper's publication, a Reddit discussion (r/LLMDevs, 2026-08-03, prompted by this paper's ``cancel/pause subscription'' example --- a high-similarity pair with different correct answers) proposed a remedy that had until now stayed at the design stage: extract an action verb from each query, forbid queries with different action verbs from sharing a cache bucket, and only run similarity/verification within a bucket. The motivation was to shrink the fraction of candidates the verifier actually has to adjudicate down to the ``genuinely ambiguous, same-bucket'' subset, raising that subset's measured discriminative power. The discussion converged on a concrete implementation principle: build the bucket key only from deterministic morphological normalization (lemmatization), never a semantic/embedding-based one --- since the latter would reintroduce the ``axis problem'' into the bucketing step itself. The full design history is recorded in \texttt{RESEARCH\_\allowbreak PROPOSAL.md} \S10, direction 7.
\textbf{Setup.} Using spaCy dependency parsing (the sentence's ROOT token if tagged VERB, else the sole VERB-tagged token, else extraction fails) on each of three datasets' (LmArena, Quora, corrected SearchQueries) gray zone ($\taulow=0.80, \tauhigh=0.97$), one action verb was extracted for the query and for its matched candidate. Three conditions were compared: verifier-only (today's Group D, no bucketing); bucketing-only (predicting correctness purely from whether the two action verbs match, ignoring the verifier's score entirely); bucketing+verifier (reject outright on an action mismatch; the verifier's AUC is measured only on the remaining action-matched candidates).
\begin{table}[h]
\centering
\small
\begin{tabular}{@{}lcccc@{}}
\toprule
\textbf{Dataset} & \textbf{Extraction-eligible} & \textbf{verifier-only AUC} & \textbf{bucketing+verifier AUC} & \textbf{Difference} \\
\midrule
LmArena & 62.7\% (10{,}089/16{,}102) & 0.8644 [0.8546, 0.8734] & 0.7663 [0.7418, 0.7916] ($n{=}4{,}196$) & \textbf{Sig.\ worse ($-0.098$)} \\
Quora & 57.6\% (9{,}819/17{,}040) & 0.6086 [0.5976, 0.6204] & 0.5870 [0.5725, 0.6010] ($n{=}6{,}352$) & Directionally worse ($-0.022$) \\
SearchQueries (corrected) & 27.3\% (23{,}553/86{,}280) & 0.6215 [0.6145, 0.6287] & 0.6150 [0.6066, 0.6232] ($n{=}17{,}195$) & Flat ($-0.007$) \\
\bottomrule
\end{tabular}
\caption{Action-verb bucketing ablation: verifier-only AUC on the extraction-eligible subset vs.\ bucketing+verifier AUC on the bucket-matched subset, all three datasets. ``Sig.\ worse'' means the two confidence intervals do not overlap; the other two rows' confidence intervals overlap (marginally for Quora, fully for SearchQueries).}
\end{table}
The direction is consistent across all three datasets, and it is negative: on none of them does restricting to the action-matched bucket raise the verifier's discriminative power above the unbucketed baseline; on LmArena it produces a statistically significant \emph{regression}. Diagnosis points to a structural blind spot in the bucketing mechanism itself, not an artifact of this particular extractor's implementation: action-verb bucketing effectively screens out candidates whose verbs are simply different and obviously unrelated (bucketing-only precision is not low --- 0.869 on LmArena), but it is powerless against candidates that share the same verb with an opposite object direction --- e.g., ``convert audio to video'' vs.\ ``convert video to audio,'' which share a verb but are judged non-equivalent by ground truth, yet get bucketed together. Once the easy negatives are filtered out, the negatives that remain in the bucket-matched subset are concentrated almost entirely in exactly this class of hard case, which the verifier itself struggles with most --- so the subset's overall separability drops systematically. The stronger the verifier's baseline discriminative power (LmArena's 0.86, well above Quora/SearchQueries' roughly 0.61), the more visible this ``easy negatives filtered away, only hard ones left'' effect becomes, which explains why the regression's magnitude tracks each dataset's own baseline AUC.
\textbf{Conclusion.} The simplest version of action-verb-only bucketing --- also the version the Reddit discussion converged on as ``structurally safe'' --- is refuted, not merely under-supported, by three independently-sourced datasets under the implementation actually tested here. This runs opposite to the original design hypothesis: action-verb bucketing is not a free precision gain, and where the verifier already has strong discriminative power it can actively backfire. This does not mean structured pre-filtering as a broader idea is unworkable --- using an (action, object) pair rather than the action verb alone as the key could, in principle, close the ``same verb, opposite object direction'' blind spot identified here, but that variant was not tested in this experiment and remains a new, more specific open question (Section~\ref{sec:conclusion}).
\subsection{Does the conclusion change once $\tauhigh$ is also tunable}
\label{sec:tauhigh}
Section~\ref{sec:grids} fixed Group C/D/E's $\tauhigh$ at a single value, 0.97, sweeping only $\taulow$ --- Section~\ref{sec:limitations}'s limitations flagged this explicitly: ``Group C/D's Pareto frontier is therefore only a cross-section anchored at $\tauhigh = 0.97$, not a fully expanded two-dimensional grid.'' Adding a \texttt{--tau-high-grid} flag to \texttt{run\_\allowbreak verified.py} makes $\tauhigh$ sweepable too (implementation-wise this only required widening the similarity range \texttt{score\_\allowbreak gray\_\allowbreak zone} covers to $[\min(\taulow), \max(\tauhigh))$, so the whole two-dimensional grid still shares one real-verifier scoring pass --- no extra model inference). Group D was re-swept over $\tauhigh \in \{0.89, 0.92, 0.95, 0.97, 0.99\} \times$ the existing $\taulow$ grid (same win/tie/loss convention as Section~\ref{sec:groupd}, covering all three datasets: LmArena, Quora, SearchQueries corrected):
\begin{table}[h]
\centering
\small
\begin{tabular}{@{}lccccc@{}}
\toprule
\textbf{Dataset} & $\tauhigh$\textbf{=0.89} & $\tauhigh$\textbf{=0.92} & $\tauhigh$\textbf{=0.95} & $\tauhigh$\textbf{=0.97 (orig.)} & $\tauhigh$\textbf{=0.99} \\
\midrule
LmArena & 0/15 win, +0.05pp & 0/20 win, +0.09pp & 2/25 win, +0.28pp & 14/30 win, +1.42pp & \textbf{24/30 win, +5.18pp} \\
Quora & all tie, +0.16pp & all tie, +0.16pp & all tie, +0.11pp & 0/54 win, +0.11pp & all tie, +0.11pp \\
SearchQueries (corr.) & all tie, +0.23pp & 5/24 win, +0.32pp & 5/30 win, \textbf{+0.33pp} & 1/36 win, +0.30pp & 0/36 win, \textbf{$-0.11$pp} \\
\bottomrule
\end{tabular}
\caption{$\tauhigh$ grid scan, Group D, all three datasets. Figures are each slice's best net lead over the Group A frontier; the ``win'' denominator is that slice's total tested points.}
\end{table}
(The $\tauhigh=0.97$ column recomputes Section~\ref{sec:groupd}'s original report for a consistency check --- LmArena's win count matches the original ``14/30 win, best +1.9pp'' exactly, but the net-lead magnitude and the tie/loss split differ slightly (14/30 win, best +1.42pp here), most plausibly bootstrap-resampling noise rather than a real discrepancy; SearchQueries corrected's column, ``1/36 win, +0.30pp,'' matches the original exactly.)
\textbf{LmArena and SearchQueries are sensitive to $\tauhigh$ in opposite directions.} On LmArena, raising $\tauhigh$ from 0.97 to 0.99 --- letting more high-similarity candidates go through the verifier instead of being auto-approved by similarity alone --- pushes the net lead from +1.42pp to +5.18pp (best point at $\taulow=0.92$, threshold=2.0), more than tripling Section~\ref{sec:groupd}'s originally reported number; lower $\tauhigh$ values perform progressively worse (0.89/0.92 are almost entirely ties). SearchQueries (corrected) runs the opposite way: $\tauhigh=0.99$ is the only slice with a negative net lead across the whole sweep ($-0.11$pp, 35/36 points lose), while $\tauhigh=0.95$ slightly beats the original 0.97 anchor. Quora is essentially unaffected by $\tauhigh$ --- all five slices sit at +0.11--0.16pp --- consistent with the existing diagnosis that ``Quora's ceiling is set by the QQP task's own score-separability limit, not by threshold selection.''
\textbf{Mechanism.} $\tauhigh$ sets the boundary of the ``similarity is high enough, skip the verifier and approve directly'' shortcut. Raising $\tauhigh$ moves more candidates that would otherwise be auto-approved by pure similarity into the verifier's jurisdiction instead --- which only pays off when the verifier is more reliable than raw similarity in that band. LmArena's off-the-shelf verifier already has meaningful discriminative power (untuned AUC 0.72), so handing it more high-similarity candidates is, on average, a net win; SearchQueries' verifier is weaker (untuned AUC 0.5984, already diagnosed in Section~\ref{sec:groupd} as ``has signal but often uses it wrong''), so the same change actively introduces more bad calls. In other words, \textbf{whether widening $\tauhigh$ is worthwhile depends on whether the verifier is actually more trustworthy than ``do nothing and approve by similarity'' in that specific similarity band} --- a dataset-specific judgment, not a universally safe choice of $\tauhigh$.
This section turns Section~\ref{sec:limitations}'s ``$\tauhigh$ fixed at a single value'' limitation from a methodological disclaimer into a finding with a concrete mechanism and a direction that varies by dataset: whether $\tauhigh$ is worth exposing as a tunable deployment parameter cannot be answered in general --- it needs the same domain-specific calibration this paper repeatedly argues verifier selection itself needs, consistent with this paper's recurring theme that how well the verifier matches the business data domain, not any single fixed hyperparameter, is what determines net benefit.
\subsection{Does a larger/stronger off-the-shelf reranker close the gap: capacity or training distribution?}
\label{sec:reranker}
Section~\ref{sec:groupe} raised SearchQueries' off-the-shelf verifier (untuned AUC 0.5984) to 0.7120 via in-domain fine-tuning, but never answered a more basic question: without fine-tuning, does simply swapping in a larger or more broadly-trained off-the-shelf model recover part of that same gain? Section~\ref{sec:conclusion}'s future-work item 2 left this as ``whether a different architecture built for short text could narrow the gap further'' --- this section tests it directly.
\textbf{Design.} Two models, each isolating one variable relative to the \texttt{cross-encoder/\allowbreak ms-marco-MiniLM-L6-v2} (6 layers) Group D has used throughout:
\begin{itemize}[nosep]
\item \texttt{cross-encoder/\allowbreak ms-marco-MiniLM-L12-v2} (12 layers): the same training data and training objective as L6 (MS MARCO long-web-query/passage ranking), just twice the layers --- a pure \textbf{capacity} control. This is also the exact model Baral et al.\ (2026, see Section~\ref{sec:golo}'s external cross-validation) evaluated, reporting a CRR of only 0.427; this section reruns it on this paper's own three datasets and its own AUC metric, directly comparable to that finding.
\item \texttt{BAAI/\allowbreak bge-reranker-base} (278M parameters, XLM-RoBERTa backbone): an entirely different training-data lineage --- covering a broader range of retrieval tasks, not limited to MS MARCO-style long web queries --- and substantially larger capacity as well, so \textbf{both capacity and training distribution change together}. If this model clearly beats L12, that points to training-distribution mismatch as the dominant factor; if the two perform similarly, it suggests ``broader distribution alone'' doesn't fix things either.
\end{itemize}
Both models score the same already-cached matches in this paper's standard gray zone ($\taulow=0.80$, $\tauhigh=0.97$, matching Sections~\ref{sec:groupd}/\ref{sec:groupe}) --- reusing the existing match trace rather than re-running nearest-neighbor search --- with no fine-tuning, measuring untuned AUC directly, run on the remote GPU server.
\textbf{Results.}
\begin{table}[h]
\centering
\small
\begin{tabular}{@{}lccccc@{}}
\toprule
\textbf{Dataset} & \textbf{L6 (baseline)} & \textbf{L12 (capacity)} & $\bm{\Delta}$ & \textbf{BGE-reranker-base} & $\bm{\Delta}$ \\
\midrule
LmArena & 0.7200 & 0.8461 & \textbf{+0.1261} & 0.8712 & \textbf{+0.1512} \\
SearchQueries (corrected) & 0.5984 & 0.6210 & +0.0226 & 0.6198 & +0.0214 \\
Quora & 0.6309 & 0.6174 & $-0.0135$ & 0.6381 & +0.0072 \\
\bottomrule
\end{tabular}
\caption{Untuned AUC: L6 baseline vs.\ L12 (pure capacity) vs.\ BGE-reranker-base (capacity + training distribution), all three datasets.}
\end{table}
\textbf{On LmArena both models improve substantially, and by similar margins} (+0.126, +0.151) --- but because capacity and training distribution both vary together on this one dataset, this alone can't tell which variable is doing the work.
\textbf{SearchQueries (corrected) is the dataset that actually separates the two hypotheses, and neither is supported.} L12 (+0.0226) and BGE-reranker-base (+0.0214) are nearly identical --- if training-distribution mismatch were the dominant explanation, BGE's much broader retrieval-task coverage should have clearly outpaced L12's same-distribution-but-bigger design, and it didn't. Both plateau around 0.62, still far short of the 0.7120 fine-tuning reaches in Section~\ref{sec:groupe}. In other words, on this paper's weakest dataset, ``swap in a bigger off-the-shelf model'' and ``swap in a differently-trained off-the-shelf model'' are practically indistinguishable in effect, and both fall well short of fine-tuning on that dataset's own data.
\textbf{Quora shows an anomaly worth noting but not over-interpreting}: L12 actually regresses relative to the L6 baseline ($-0.0135$), while BGE shows a small positive (+0.0072). Both effects are small, and this section's AUC figures don't carry bootstrap confidence intervals (consistent with this paper's convention elsewhere --- only hit-rate/error-rate get confidence intervals, not standalone AUC numbers), so noise can't be ruled out; but if ``a bigger same-distribution model performs worse'' replicates in a larger future test, it would be one more independent example of off-the-shelf model unreliability.
\textbf{Conclusion.} On the one dataset in this paper's test set that actually separates ``capacity'' from ``training distribution'' (SearchQueries), neither hypothesis has explanatory power --- not ``the model is too small,'' nor ``the training distribution is wrong.'' An off-the-shelf model reinforced in either direction produces limited, and nearly indistinguishable, gains. This is consistent with the direction of the Baral et al.\ external cross-validation cited in Section~\ref{sec:golo} (their tested L12 also underperformed, on an entirely different dataset/metric) --- and now adds a direct confirmation using this paper's own datasets and metric. Section~\ref{sec:conclusion}'s future-work item 2 --- whether a different architecture built for short text narrows the gap further --- has now been tested along two axes (same-family-but-bigger, and broader-training-distribution), and neither meaningfully closes it; off-the-shelf model selection is reasonably well ruled out within the scope tested here. The in-domain fine-tuning validated in Section~\ref{sec:groupe} remains the only remedy this paper has confirmed to work.
\subsection{From point estimates to finite-sample risk control: calibrating the gray-zone reuse decision with Conformal Risk Control}
\label{sec:crc}
\textbf{Motivation.} Section~\ref{sec:groupd}'s honest calibration (chronological calibration/test split, Youden's J threshold selection) solves the problem of whether a threshold is peeking at the test set, but the threshold it selects is still just a point estimate --- it never answers how much confidence the resulting error-rate figure deserves given a finite calibration sample. Conformal Risk Control (CRC; Angelopoulos, Bates, Fisch, Lei, Schuster, arXiv:2208.02814, current version v4, 2025-06-13) generalizes split conformal prediction to any bounded, monotone, right-continuous loss function, giving a distribution-free guarantee that holds \textbf{exactly at any finite sample size}: $\mathbb{E}[L_{n+1}(\hat\lambda)] \le \alpha$. This section connects that method to CacheVerifier's existing gray-zone verifier threshold, testing whether the decision to reuse a cached hit can be upgraded from a point estimate with no quantifiable confidence into a decision with a user-specified risk budget and a formal guarantee --- not bolting a confidence interval onto the existing error-rate figure, but replacing threshold selection itself with a calibration procedure that takes a risk budget as input.
\textbf{The quantity being controlled.} Among the existing metrics, \texttt{error\_\allowbreak rate} already has the right \emph{shape} --- an unconditional per-query loss, $P(\text{incorrect} \wedge \text{hit})$, with the denominator over all requests --- it just isn't scoped to the gray zone; \texttt{verifier\_\allowbreak fidelity} is already gray-zone-scoped (its design explicitly excludes the $\tauhigh$/$\taulow$ direct-pass branches, to avoid over- or under-stating the verifier's own error rate) but is conditional ($fp/(tp+fp)$). What CRC actually needs to control is the intersection of the two, which had no standalone implementation before this section:
\[
R_{GZ}(\lambda) = P(\text{incorrect} \wedge \text{accept}_\lambda \mid \text{gray zone})
\]
The new \texttt{gray\_\allowbreak zone\_\allowbreak risk\_\allowbreak curve} (\texttt{cacheverifier/\allowbreak metrics/\allowbreak core.py}) computes this curve. \textbf{Implementation detail:} the accept rule must be strictly right-continuous ($\text{accept}_\lambda(x) := \text{score}(x) > \lambda$, not $\ge$) to satisfy the precondition of CRC's Theorem 1 --- under an inclusive rule, a tied candidate lands on the wrong side of its own discontinuity. This detail has no observable effect on any number reported elsewhere in this paper (continuous cross-encoder scores essentially never tie), but it is a necessary condition for the formal guarantee to hold, not a stylistic choice; the first implementation's ``subtract the point's own index'' approach gave two candidates tied at the exact same score two different risk values, caught in the act by a synthetic test (\texttt{tests/\allowbreak test\_\allowbreak crc.py::\allowbreak test\_\allowbreak b\_\allowbreak tied\_\allowbreak scores\_\allowbreak use\_\allowbreak strict\_\allowbreak inequality\_\allowbreak not\_\allowbreak inclusive}) and fixed with \texttt{searchsorted}.
\textbf{The CRC selector} (Theorem 1, eq.~4, read directly from the paper's own pages, not implemented from memory):
\[
\hat\lambda = \inf\left\{ \lambda : \frac{n}{n+1}\cdot \hat{R}_n(\lambda) + \frac{B}{n+1} \le \alpha \right\}
\]
where $n$ is the calibration sample size and $B$ bounds the loss ($B=1$ in this paper, since $R_{GZ}$ is a 0/1 loss). \textbf{When the candidate set is empty, the algorithm itself defines $\hat\lambda := \lambda_{\max}$} (reject the entire gray zone) --- this is not a failure mode: under this paper's construction, $L_i(\lambda_{\max})=0$ holds exactly for every calibration point (no candidate's score can strictly exceed the sample's own maximum), so the guarantee still holds even along this fallback path, and it should never be described as ``CRC being infeasible.'' This condition degenerates into a dataset-independent closed-form floor --- $n \ge \lceil 1/\alpha - 1 \rceil$ (for $B=1$): $\alpha = 5\%/2\%/1\%/0.5\%$ correspond to 19/49/99/199 respectively. All three datasets clear this floor by 4$\times$--217$\times$ at every calibration size actually used (the tightest case is Quora's existing 909 at $\taulow=0.95$; at the $\taulow=0.80$ band this section uses, the three datasets have 8{,}051/8{,}520/43{,}140 respectively) --- sample size was never the reason reuse was limited in this section's experiments.
\textbf{Protocol R and Protocol T.} CRC's guarantee requires calibration and test samples to be exchangeable. The gray-zone candidates' similarity retrieval is itself stateful --- match quality shifts systematically as the cache grows (see the drift audit below) --- so a chronological split (the ``first half calibration, second half test'' convention Section~\ref{sec:groupd}'s honest calibration already uses) does not satisfy this assumption. But for a fixed, already-realized finite pool of samples --- regardless of what process generated it --- a uniform random split makes the calibration set exchangeable with any test point, purely by the symmetry of the randomization itself; this is the standard justification for split conformal methods and requires no stationarity assumption whatsoever about the underlying generating process. This section therefore runs two parallel protocols: \textbf{Protocol R} (uniform random split, supporting the strict claim ``resampling uniformly from this same fixed benchmark pool,'' a formal CRC result) and \textbf{Protocol T} (chronological split, a deployment-transfer/drift-robustness experiment, explicitly not an application of the CRC theorem and not a claim about real production traffic).
$\tauhigh$ is fixed at 0.97 (the original anchor used throughout most of this paper's experiments, not the grid-search-recommended value newly introduced in Section~\ref{sec:tauhigh} --- using that recommended value would reintroduce exactly the ``post-hoc grid search'' problem Section~\ref{sec:tauhigh} itself exposed, since that sweep used \texttt{run\_\allowbreak verified.py}'s standard pipeline with no calibration/test split). $\taulow$ is fixed at 0.80 (the widest value in the grid, matching the verifier scores already cached, requiring no new model inference).
\textbf{Protocol R results} (50/50 random splits on each dataset, $M=200$ independent repeats, reporting mean realized risk, its 95\% CI, the single-run exceedance probability $P(\text{risk}>\alpha)$, mean reuse, and efficiency relative to the full-data empirical oracle, $\eta = U_{CRC}/U_{oracle}$):
\begin{table}[h]
\centering
\footnotesize
\begin{tabular}{@{}lccp{2.2cm}p{2.2cm}p{2.2cm}p{2.2cm}@{}}
\toprule
\textbf{Dataset} & \textbf{AUC} & \textbf{$n_{cal}$} & $\alpha$=5\% & $\alpha$=2\% & $\alpha$=1\% & $\alpha$=0.5\% \\
\midrule
LmArena & 0.720 & 8{,}051 & risk 0.0499, reuse 68.98\%, $\eta$ 0.999 & risk 0.0200, reuse 40.67\%, $\eta$ 1.001 & risk 0.0100, reuse 21.32\%, $\eta$ 1.002 & risk 0.0050, reuse 9.87\%, $\eta$ 1.022 \\
Quora & 0.631 & 8{,}520 & risk 0.0499, reuse 10.01\%, $\eta$ 0.997 & risk 0.0199, reuse 4.34\%, $\eta$ 0.996 & risk 0.0100, reuse 2.37\%, $\eta$ 1.000 & risk 0.0050, reuse 1.21\%, $\eta$ 0.985 \\
SearchQueries (corr.) & 0.598 & 43{,}140 & risk 0.0498, reuse 13.99\%, $\eta$ 0.999 & risk 0.0199, reuse 6.10\%, $\eta$ 0.997 & risk 0.0100, reuse 3.24\%, $\eta$ 0.999 & risk 0.0050, reuse 1.67\%, $\eta$ 0.997 \\
\bottomrule
\end{tabular}
\caption{Protocol R (random split, $M=200$): mean realized risk, mean reuse, and oracle efficiency $\eta$, four target risk levels, all three datasets.}
\end{table}
(Youden's J's own single-split reference point is reported separately, since it is not alpha-targeted: LmArena mean\_test\_risk=0.0509, Quora 0.2806, SearchQueries 0.2095 --- these three numbers differ enormously, but that only reflects each gray zone's own base rate of incorrectness, not a signal about CRC's calibration quality.)
On all three datasets, at all four alpha levels, mean\_risk sits almost exactly on target --- not conservatively below it. This is by design: the CRC selector picks the loosest $\lambda$ satisfying the constraint, so it should hug the boundary rather than leave safety margin. \textbf{Precisely because of this, roughly half of single runs will show a realized risk slightly above $\alpha$ ($P(\text{risk}>\alpha)$ ranges 0.435--0.525 across the four levels) --- this is what a tightly (but correctly) bound guarantee looks like, not under-coverage; the $\mathbb{E}[L] \le \alpha$ constraint bounds the mean, not any individual realization.} $\eta$ lands within 3\% of 1.0 across all three datasets and all four alpha levels, and the dataset with the largest calibration sample (SearchQueries, 43{,}140) sits closer to 1.0 than the two smaller ones (LmArena/Quora, roughly 8{,}000--8{,}500) --- \textbf{at the sample sizes tested here, CRC's finite-sample guarantee costs almost no utility relative to an oracle that knows the full distribution, and that cost shrinks further with more calibration data, exactly as theory predicts.}
\textbf{Headline finding: AUC ranking does not predict risk-constrained operational-utility ranking.} SearchQueries has the lowest AUC (0.598) of the three datasets, yet its reuse rate is higher than Quora's (AUC 0.631) at \textbf{every one of the four alpha levels} --- 1.67\% vs.\ 1.21\% at $\alpha$=0.5\%. A verifier that ranks worse by AUC can still be operationally more useful under a fixed false-reuse risk budget. This is not a hypothetical illustration --- it is an actual rank reversal measured across this section's three datasets, and it is closer to what a deployer actually cares about (``can this verifier be used under this specific risk constraint'') than reporting an AUC number alone: AUC measures ranking quality, CRC reveals risk-constrained operational utility, and the two are not the same thing.
\textbf{Protocol T results} (chronological split, single run, first half calibration / second half test, the same split point Section~\ref{sec:groupd}'s honest calibration uses):
\begin{table}[h]
\centering
\small
\begin{tabular}{@{}lcccl@{}}
\toprule
\textbf{Dataset} & \textbf{cal.\ incorrect} & \textbf{test incorrect} & \textbf{ratio} & \textbf{exceeds $\alpha$ at all 4 levels?} \\
\midrule
LmArena & 0.4088 & 0.0574 & 0.140 (easier) & No --- conservative throughout \\
Quora & 0.5511 & 0.6563 & 1.191 (harder) & \textbf{Yes --- up to 80\% relative overshoot} \\
SearchQueries (corr.) & 0.5147 & 0.5170 & 1.005 (~cancels) & Yes, mild (~20--25\% overshoot) \\
\bottomrule
\end{tabular}
\caption{Protocol T (chronological split, single run): calibration- vs.\ test-half incorrect rate and guarantee status, all three datasets.}
\end{table}
This result is directly explained by the direction gray-zone composition drifts over stream position, quantified with an audit that needs no new inference --- just binning the already-cached trace into deciles of stream position: LmArena's gray-zone incorrect rate falls from 63.5\% at decile 0 to 5.0\% at decile 9; Quora runs the opposite direction, rising from 43.6\% to 67.6\%; SearchQueries rises then falls, and its net effect happens to nearly cancel at exactly the 50/50 split point. LmArena's drift direction happens to favor chronological calibration (calibrating on the harder first half and applying it to the easier second half is naturally conservative); Quora's drift runs the opposite way, calibrating on the easier first half systematically under-preparing for the harder second half --- \textbf{this is this paper's first concrete, measured (not hypothetical) demonstration of an exchangeability failure}, qualitatively different from Protocol R's roughly 50\% single-run exceedance rate (where the guarantee still holds, just tightly bound): here, all four alpha levels exceed target in the same direction on Quora, which is a systematic pattern, not sampling noise. \textbf{The formal guarantee reported under Protocol R requires the random-split assumption to hold; treating a threshold calibrated on real chronological order as carrying a CRC-theorem guarantee about future production traffic is not safe on data like Quora's.}
\textbf{vCache methodology audit: the conclusion is not to attempt a direct numeric comparison.} Section~\ref{sec:groupb} already discusses Group B in detail (this paper's line-by-line port of vCache's \texttt{VerifiedDecisionPolicy}, \texttt{cacheverifier/\allowbreak cache/\allowbreak adaptive\_\allowbreak threshold.py}); to judge whether its \texttt{target\_\allowbreak error\_\allowbreak rate} and this section's CRC $\alpha$ can be compared numerically, that port's implementation was re-examined, and vCache's own abstract was checked to confirm it ``learns an optimal threshold for each cached prompt.'' Three structural mismatches, any one of which alone would be enough to make a direct numeric comparison meaningless:
\begin{enumerate}[nosep]
\item \textbf{Decision granularity.} vCache maintains a separate threshold \textbf{per individual cache entry}, updated online as that entry accumulates its own observation history ($\text{min\_observations}=6$); this section's CRC calibrates \textbf{one global threshold over the entire pooled gray zone}. ``vCache's error rate'' is really an average over many entry-level policies at different stages of maturity; ``CRC's certified risk'' is a single number for one shared policy.
\item \textbf{Verification timing.} vCache's \texttt{observe()} only updates an entry's history on a miss (the explore branch) --- the ported implementation's own documentation states plainly that ``only MISSES ever get their correctness checked... verification, when it happens at all, never sits on the hit path,'' matching vCache's own \texttt{\_\allowbreak \_\allowbreak update\_\allowbreak cache}, which runs only on the explore branch. This is \textbf{asynchronous} verification: a hit is trusted unconditionally in the moment, and verification, when it happens, only informs future decisions. This section's gray-zone gating is \textbf{synchronous}: it decides before serving the current hit. \texttt{target\_\allowbreak error\_\allowbreak rate} and this section's $\alpha$ describe guarantees under two different causal structures, not two settings of the same dial.
\item \textbf{Guarantee type.} vCache's explore probability $\tau$ comes from a fitted one-dimensional logistic regression of correctness on similarity, plus a delta-method/normal-approximation confidence bound (\texttt{scipy.stats.norm.ppf}), patched with a hardcoded small-sample empirical variance lookup table (\texttt{\_\allowbreak VARIANCE\_\allowbreak MAP}) for the approximation's known weakness at very few per-entry observations (6--48) --- a parametric, asymptotic-flavored construction. CRC (Theorem 1) is distribution-free and exact at any finite $n$. Comparing ``vCache's guaranteed error rate'' against ``CRC's certified risk'' would be comparing an approximate, model-dependent bound to an exact, model-free one --- not the same kind of claim even before asking what population each is defined over.
\end{enumerate}
This section therefore does not report ``vCache's error rate is $X\%$, CacheVerifier's CRC-certified risk is $Y\%$, ours is better/worse'' --- any apparent numeric edge could just as easily reflect one of these three mismatches as a real difference in mechanism quality. The defensible framing is structural, filled in here with verified facts rather than placeholders:
\begin{table}[h]
\centering
\small
\begin{tabular}{@{}lll@{}}
\toprule
\textbf{Dimension} & \textbf{This section (CRC)} & \textbf{vCache} \\
\midrule
Decision granularity & one global threshold, pooled gray zone & per-cache-entry threshold \\
Verification timing & synchronous (gates current hit) & asynchronous (miss/explore only) \\
Guarantee type & distribution-free, exact, finite-sample & parametric, asymptotic-flavored \\
Calibration & offline, batch calibration/test split & online, per-entry, incremental \\
Cold start & documented \texttt{COLD\_\allowbreak START\_\allowbreak WARNING\_\allowbreak THRESHOLD} & per-entry $\text{min\_observations}=6$ \\
Adapts to local difficulty & no & in principle, per cached prompt \\
\bottomrule
\end{tabular}
\caption{Structural comparison: this section's CRC calibration vs.\ vCache. Not a numeric benchmark --- see text.}
\end{table}
A genuine head-to-head, if ever wanted, would need new engineering on one side or the other --- reimplementing this paper's gray-zone gate as a per-entry asynchronous policy, or reimplementing vCache's decision rule under a single pooled synchronous threshold --- not simply running the two existing implementations against each other. That is scoped as a separate, explicitly unfinished future direction, not part of this section's conclusions.
\textbf{Conclusion.} This section upgrades the gray-zone reuse decision from a point estimate with no quantifiable confidence into a decision with a user-specified risk budget and an exact finite-sample guarantee under a random-split assumption, and that guarantee costs almost no utility at the sample sizes tested here (8{,}051--43{,}140; $\eta$ within 3\% of 1.0 throughout). This upgrade surfaces two facts that were never quantified before: first, a verifier's AUC ranking does not equal its operational-utility ranking under a specific risk budget (SearchQueries turns a lower AUC into higher reuse than Quora); second, calibrating on historical traffic and deploying to future traffic --- an operation nearly every production system performs --- is only as safe as the traffic's own exchangeability, and Quora's real, systematic (not incidental) guarantee violation shows this cannot be assumed by default. Sample size itself, at the scales tested in this section, was never the reason reuse was limited --- the limit comes from the verifier's own discriminative power, consistent with the diagnosis in Sections~\ref{sec:groupd}/\ref{sec:groupe}, just now expressed in the formal language of a risk budget.
\subsection{E': rewrite instead of reject --- a negative ablation against the TweakLLM paradigm}
\label{sec:rewrite}
\textbf{Motivation.} Everywhere else in this paper, a verifier rejection is converted into a plain \texttt{miss} (falling through to a fresh LLM call, treated as necessarily correct in this simulation, zero error risk, but zero cache benefit either). TweakLLM (Cheema et al., 2025, arXiv:2507.23674, already listed in the related-work table) proposes a different routing: instead of discarding a rejected candidate, edit its cached answer with a lightweight LLM into a version that fits the new query, and serve that. Section~\ref{sec:conclusion}'s future-work item 9 had left this an untested open question --- where ``reject $\to$ rewrite $\to$ serve'' lands on this paper's error-rate/hit-rate Pareto frontier relative to the existing binary gate. This section is the first measurement.
\textbf{Method.} Building on Group E's existing honest calibration framework (same as Section~\ref{sec:groupd}: the gray zone is split by stream position into calibration/test halves, and the threshold is selected with Youden's J on the calibration half only), this section takes the candidates rejected by that threshold on the \textbf{held-out test half}, and splits them by \texttt{would\_\allowbreak be\_\allowbreak correct} (whether the candidate and the new query share an equivalence class):
\begin{itemize}
\item \textbf{false-reject stratum} (the candidate was actually correct; the verifier rejected it in error)
\item \textbf{true-reject stratum} (the candidate genuinely was a different question; the rejection was correct)
\end{itemize}
100 examples are sampled per stratum per dataset (LmArena/Quora/SearchQueries-corrected; population sizes 420/693/7{,}004 for false-reject and 298/3{,}668/15{,}411 for true-reject --- all far above the sampling target). For each sample: DeepSeek (\texttt{deepseek-chat}, the same API-hosted-small-model substitution principle used throughout this paper) edits the candidate's answer to fit the new query (an editing prompt, not from-scratch generation), then the same model, given that query's own reference answer, judges whether the rewritten answer is semantically correct (YES/NO, not requiring a verbatim match). \texttt{RequestOutcome(action="hit", correct=<verdict>)} directly reuses this paper's existing \texttt{error\_\allowbreak rate}/\texttt{bootstrap\_\allowbreak ci} machinery --- no new statistics code. This is a sampled ablation, not a full-trace simulation, scoped to 3 datasets $\times$ 2 strata $\times$ 100.
\textbf{Results.}
\begin{table}[h]
\centering
\small
\begin{tabular}{lccc}
\toprule
\textbf{Dataset} & \textbf{false-reject incorrect (95\% CI)} & \textbf{true-reject incorrect (95\% CI)} & \textbf{rewrite latency mean/p95 (ms)} \\
\midrule
LmArena & 58.0\% [49.0, 68.0] & 61.0\% [51.0, 71.0] & 3{,}201/6{,}159 (false), 4{,}067/7{,}637 (true) \\
Quora & 33.0\% [24.0, 43.0] & 30.0\% [21.0, 39.0] & 5{,}840/8{,}225 (false), 6{,}181/7{,}891 (true) \\
SearchQueries (corrected) & 24.0\% [16.0, 32.0] & 22.0\% [14.0, 30.0] & 2{,}665/3{,}909 (false), 2{,}935/4{,}603 (true) \\
\bottomrule
\end{tabular}
\caption{E' rewrite-then-judge incorrect rates, false-reject vs. true-reject strata, all three datasets.}
\end{table}
\textbf{Headline finding: the false-reject and true-reject incorrect rates fall inside each other's 95\% confidence intervals on all three datasets, with no dataset showing the expected-direction difference.} This is not the intuitive result --- in the false-reject stratum the candidate was already correct, so a rewrite that faithfully preserves it should pass judgment easily, but empirically it is no more reliable than the true-reject stratum. Manual review of both strata's rewrite examples shows the editing itself is generally good quality (e.g.\ precisely substituting ``shepherd'' for ``farmer,'' leaving the rest intact) --- the failures concentrate in the judging step: the reference answer is an \textbf{independently written} text for that specific new query, and even a semantically sound rewrite can be marked ``not matching'' over surface differences in numeric convention or structure --- a stricter bar than the equivalence\_id-based label this paper otherwise relies on. A safety-relevant edge case also surfaced in LmArena's true-reject stratum: a query asking for pornographic-content streaming sites matched an unrelated ``YouTube downloader software'' candidate (a correct true reject); the rewrite did not cleanly refuse the way the reference answer does, but instead grafted the original candidate's content onto a hedge --- a more ambiguous, partially-compliant output, a risk inherent to the ``rewrite instead of reject'' idea itself, independent of the judging methodology.
\textbf{Conclusion.} Within the scope tested here, ``reject $\to$ rewrite $\to$ serve'' shows no sign of a net benefit over the existing binary gate. Under the binary gate, a rejection is a \texttt{miss} --- zero error risk, at the cost of one full LLM call. E' converts this previously zero-risk population into ``hits'' with a 22\%--61\% error rate, and the rewrite call's own latency (mean 2.7--6.2 seconds) is not clearly lower than a fresh generation's would be either. This is a negative ablation: not ``the TweakLLM paradigm doesn't work,'' but that its simplest form --- reusing a rewritten answer with no additional correctness check --- shows no measurable net benefit in this paper's error-rate/hit-rate framework.
\textbf{Limitations.} (1) Judging compares the rewritten answer against that query's own independently labeled reference answer rather than the original candidate, plausibly inflating the false-reject stratum's apparent error rate with reference-paraphrase noise unrelated to rewrite quality. (2) 68.8\% of SearchQueries-corrected's reference answers were themselves generated by DeepSeek, and this section's rewriting and judging also use DeepSeek --- a same-model-family bias cannot be ruled out for that dataset's notably lower error rate. (3) Rewrite and judge calls used bounded concurrency rather than this paper's otherwise-strict sequential calling convention; each call's own latency measurement remains real, but this is not fully methodologically consistent with the Section~\ref{sec:latency} Oracle-latency measurement. (4) Only the ``always rewrite unconditionally'' simplest policy was tested --- a second verification pass on the rewritten answer (a double gate) was not tested, an independent, untested follow-up.
\subsection{Is looking only at the nearest neighbor not enough: testing a Top-K candidate cascade}
\label{sec:topk}
\textbf{Motivation.} Everywhere else in this paper, \texttt{SynchronousVerifiedPolicy} (Section~\ref{sec:verifiers}; \texttt{cacheverifier/cache/synchronous\_\allowbreak verified.py}) retrieves a single nearest neighbor only --- \texttt{VectorCacheStore.query} hardcodes \texttt{k=1}. If that one candidate falls in the gray zone and the verifier rejects it, the request is judged a \texttt{miss} outright, even when the semantic second-nearest neighbor is in fact the correct answer and was never given a chance to be seen by the verifier. This gap was flagged by an external, independent re-derivation of this project (uninvolved in writing this paper, working from the public repository and cross-checking source code file by file; every one of this paper's already-published, checkable numbers it touched --- the 1687.8ms latency, the 4.4x--29.1x Group B fix, the 0.5984$\to$0.7120 SearchQueries AUC gain, among others --- checked out accurately). This section is the first test of that specific gap.
\textbf{A prior monotonicity argument narrows the scope of the test.} HNSW returns neighbors in descending similarity order, so rank $m$'s similarity is necessarily $\le$ rank $m{-}1$'s. Consequently, if the rank-1 candidate is already $<\taulow$, every lower-ranked candidate is also necessarily $<\taulow$ --- looking further down the list is \textbf{provably} useless on that branch. The only branch that can plausibly benefit is ``rank-1 falls in the gray zone $[\taulow, \tauhigh)$ and is rejected by the verifier'': in that case it is worth trying rank-2, rank-3, \ldots\ until some candidate's similarity drops below $\taulow$ (past which point the same monotonicity argument guarantees going further is pointless too). Accordingly, \texttt{VectorCacheStore} gained a \texttt{query\_\allowbreak topk} method, and a parallel cascade decision path was added alongside (not inside) \texttt{SynchronousVerifiedPolicy} --- no class any already-published result depends on was modified:
\begin{verbatim}
for candidate in top_K (descending similarity):
if candidate.similarity < tau_low: break # monotonicity: later
# candidates can't be better
if candidate.similarity >= tau_high: return HIT
if verifier(query, candidate).approved: return HIT
# else: rejected, try the next-ranked candidate
return MISS
\end{verbatim}
\textbf{Phase 0: a pure ground-truth ceiling, calling no verifier at all} (\texttt{scripts/topk\_\allowbreak ceiling\_\allowbreak diagnostic.py}). Existing embeddings are reused to build a single top-5-neighbor HNSW trace pass; for every request whose rank-1 candidate is gray-zone-and-wrong, a pure count checks whether ranks 2--5 contain a candidate whose similarity is still $\ge \taulow$ (hence actually reachable by the cascade) and is in fact correct:
\begin{table}[h]
\centering
\small
\begin{tabular}{lcccc}
\toprule
\textbf{Dataset} & \textbf{rank-1 gray-zone \& wrong} & \textbf{K=5 raw ceiling} & \textbf{K=5 reachable ceiling (\% of subset)} & \textbf{as \% of all requests} \\
\midrule
LmArena & 3{,}755 / 60{,}000 & 451 & 450 (11.98\%) & 0.75\% \\
SearchQueries (corrected) & 44{,}511 / 150{,}000 & 9{,}529 & 8{,}487 (19.07\%) & 5.66\% \\
Quora & 10{,}285 / 60{,}000 & 1{,}296 & 973 (9.46\%) & 1.62\% \\
\bottomrule
\end{tabular}
\caption{Phase 0: pure ground-truth Top-K ceiling, no verifier calls.}
\end{table}
The ceiling is non-trivial on all three datasets (not noise-level), and largest on SearchQueries --- precisely the dataset where the off-the-shelf verifier's discriminative power is weakest (Section~\ref{sec:groupd}, AUC 0.598), suggesting retrieval-side recall and verifier discriminative power are two separately quantifiable, independent bottlenecks.
\textbf{Phase 2: a cascade with a real verifier plugged in} (\texttt{cacheverifier/experiments/topk\_\allowbreak sweep.py} + \texttt{scripts/run\_\allowbreak topk\_\allowbreak cascade.py}, K=2). This continues Section~\ref{sec:verifiers}'s ``score once, re-threshold many times'' design: \texttt{score\_\allowbreak cascade\_\allowbreak candidates} only scores the (record, rank) pairs the cascade could \textbf{actually reach} under a fixed $\tauhigh$ --- i.e.\ candidates where every earlier-ranked sibling also falls in $[\min(\taulow), \tauhigh)$ --- skipping downstream candidates whose sibling already hit directly or already dropped below $\taulow$ (verified that this pruning changes zero published numbers, and only removes scoring calls \texttt{replay\_\allowbreak cascade} would never have looked up anyway). All three datasets, with both the off-the-shelf and the domain-fine-tuned verifier (the same checkpoints as Section~\ref{sec:groupe}), were run at full scale on a remote GPU server (Tesla T4): cross-encoder inference on real (not synthetic-short) query/answer text ran at roughly 4.3--4.6 examples/sec on CPU versus roughly 145 examples/sec on GPU ($\sim$33x); the largest candidate volume (161{,}403 pairs for SearchQueries's K=2 scoring pass) would have taken over a day on local CPU. This is the only section in this paper that uses a GPU rather than the CPU path used by default elsewhere, and it does not change any numerical methodology.
\textbf{Results: exact-match on the same $(\taulow, \text{threshold})$ grid point, bootstrap 95\% CI significance, K=1 baseline vs.\ K=2 cascade.}
\begin{table}[h]
\centering
\small
\begin{tabular}{llccccc}
\toprule
\textbf{Dataset} & \textbf{Verifier} & \textbf{grid pts} & \textbf{hit\_rate up (sig.)} & \textbf{down (sig.)} & \textbf{error\_rate up (sig.)} & \textbf{mean $\Delta$ hit} \\
\midrule
LmArena & off-the-shelf & 30 & 25 & 0 & 0 & +0.80pp \\
LmArena & fine-tuned & 54 & 29 & 0 & 0 & +0.61pp \\
Quora & off-the-shelf & 54 & 0 & 0 & 1 & +0.10pp \\
Quora & fine-tuned & 48 & 1 & 0 & 1 & +0.11pp \\
SearchQueries (corrected) & off-the-shelf & 36 & 23 & 0 & 19 & +1.18pp \\
SearchQueries (corrected) & fine-tuned & 54 & 28 & 0 & 23 & +0.81pp \\
\bottomrule
\end{tabular}
\caption{K=2 cascade vs.\ K=1 baseline, matched-grid-point comparison.}
\end{table}
\textbf{The three datasets tell three different stories, consistent with --- not a coincidental repeat of --- this paper's recurring ``dataset-dependent, not one-size-fits-all'' pattern already seen in Sections~\ref{sec:groupd} and \ref{sec:groupe}.}
\textbf{LmArena --- close to a free lunch.} Regardless of which verifier is used, error\_rate never moves significantly at any grid point, while hit\_rate rises significantly. One concrete operating point ($\taulow=0.86$, threshold$=-2.0$, off-the-shelf): K=1 hit\_rate$=0.9130$ [0.9106, 0.9151], error\_rate$=0.0638$ [0.0619, 0.0658]; K=2 hit\_rate$=0.9208$ [0.9188, 0.9231] (CIs don't overlap, significantly up), error\_rate$=0.0652$ [0.0633, 0.0673] (CIs overlap, no significant change) --- looking at one more candidate carries almost no observable extra error cost.
\textbf{Quora --- essentially no effect.} The mean gain under both verifiers sits around 0.1pp, consistent with Phase 0's already-small ceiling (1.62\%) --- not a failure of the cascade mechanism itself, just a narrow well to draw from on this dataset.
\textbf{SearchQueries --- a real trade-off, not a free lunch; fine-tuning mitigates but does not eliminate it.} Under the off-the-shelf verifier, 19 of 36 grid points (53\%) also show a significant error\_rate increase; switching to the fine-tuned verifier brings that down to 23 of 54 (43\%) --- the right direction, but not eliminated. One concrete operating point ($\taulow=0.80$, threshold$=7.0$, off-the-shelf, this dataset's best net-gain point): K=1 hit\_rate$=0.5531$ [0.5512, 0.5555], error\_rate$=0.1620$ [0.1599, 0.1638]; K=2 hit\_rate$=0.5878$ [0.5858, 0.5901] (significantly up), error\_rate$=0.1807$ [0.1785, 0.1825] (also significantly up) --- giving a verifier that is already comparatively weak (Section~\ref{sec:groupd}, AUC 0.598) a second chance also gives it a second chance to be wrong, exactly the risk anticipated at design time, not a surprise discovered after the fact.
\textbf{K and fine-tuning are complementary levers, not substitutes for one another.} At a fixed, reasonable error-rate ceiling, the four combinations (K=1/K=2 $\times$ off-the-shelf/fine-tuned) always hand the highest hit\_rate to whichever combination uses both --- e.g.\ on SearchQueries at error\_rate $\le 5\%$: K=1+off-the-shelf$=0.2838$, K=1+fine-tuned$=0.3038$, K=2+off-the-shelf$=0.2845$, K=2+fine-tuned$=0.3063$, with the ``fine-tuned + K=2'' combination the highest of the four; Quora's four numbers at the same ceiling (0.1172/0.1311/0.1172/0.1327) show the same ordering. This particular ``fix an error ceiling, find the best point'' comparison is limited on LmArena by that dataset's coarser threshold grid (5 candidate values, versus 8--9 for Quora/SearchQueries) and can occasionally produce a misleading negative number from a step artifact between adjacent grid points --- the matched-grid-point-plus-CI test above (25--29 points significantly up, 0 significantly down) is the more trustworthy evidence on LmArena, which is why this section leads with that method rather than ``fix the error rate, find the optimum.''
\textbf{Limitations.} (1) Only K=2 was tested; the Phase 0 ceiling table shows K=3/4/5 still carry diminishing but non-zero marginal returns (LmArena rises from K=2's implied 6.26\% to K=5's 11.98\%, SearchQueries from roughly 12--13\% to 19.07\%) --- whether a larger K is worth the extra verifier calls (worst-case cascade latency stacks with K; see Section~\ref{sec:latency}'s already-non-negligible single-call synchronous verification latency) is an untested open question. (2) Only the cross-encoder verifier family was tested (off-the-shelf and fine-tuned), similar in scope to Section~\ref{sec:reranker}'s ``a larger/more-broadly-trained off-the-shelf reranker was also tested but did not close the gap'' --- whether the cascade mechanism itself is sensitive to verifier architecture choice was not tested. (3) The ``K and fine-tuning are complementary'' finding rests on the ``fix the error rate, find the best hit\_rate'' comparison, already known to be less reliable than matched-point comparison on LmArena (see above); its strong evidence comes mainly from Quora and SearchQueries, the two datasets with finer grids. (4) The latency cost analysis is throughput/arithmetic only (the sequential-vs.-parallel scoring trade-off for multiple candidates was discussed at design time; see the corresponding memory record) --- no real end-to-end call-latency measurement was made the way Section~\ref{sec:latency} did for the Oracle. (5) Significance for error\_rate increases, like hit\_rate increases, used only pointwise non-overlapping bootstrap CIs, without the multiple-comparison correction Sections~\ref{sec:groupd} and~\ref{sec:crc} applied --- some false-positive significant results among 36--54 grid points would be expected by chance, but the observed rate (SearchQueries, 43\%--53\%) is far higher than any reasonable false-positive rate would explain, and is unlikely to be a multiple-comparison artifact.
\subsection{The CRC gate's self-selection feedback loop: a genuine online closed-loop test}
\label{sec:selfselect}
\textbf{Motivation.} Section~\ref{sec:crc}'s Protocol R and Protocol T both test static splits of a fixed, already-completed historical trace (random vs.\ chronological order) --- neither is a genuine closed loop. If the CRC gate's own reuse/reject decisions feed back into future cache state --- approved candidates persisting and getting hit more, rejected ones getting silently crowded out of the candidate pool --- that could induce a self-selection feedback loop: the calibration distribution itself gets systematically shaped by the verifier's own past decisions, not just drifting naturally with time. This was hypothesized to potentially be a stronger failure mode than the exchangeability violation Protocol T already demonstrated, but it had never been tested in isolation.
Before designing this test, a more basic premise was checked first: \textbf{every single experiment} elsewhere in this paper --- Groups A--E, Section~\ref{sec:crc}'s CRC Protocol R/T, Section~\ref{sec:topk}'s Top-K cascade --- inherits one convention from vCache's own benchmark harness (\texttt{cacheverifier/\allowbreak experiments/\allowbreak verified\_\allowbreak sweep.py::\allowbreak build\_\allowbreak match\_\allowbreak trace}, \texttt{cacheverifier/\allowbreak experiments/\allowbreak runner.py::\allowbreak ExperimentRunner.run}, both implemented this way): every request gets inserted into the cache \textbf{unconditionally}, regardless of whether it was a hit or a miss. That means the candidate pool's composition at any point in the stream has never actually depended on any policy's history of decisions --- the self-selection mechanism this section tests has never been simulated anywhere in this paper before. Not ``not yet finished testing'' --- ``never started.''
\textbf{Implementation.} A new script, \texttt{scripts/\allowbreak crc\_\allowbreak closed\_\allowbreak loop\_\allowbreak self\_\allowbreak selection.py}, does not modify \texttt{verified\_\allowbreak sweep.py}/\texttt{runner.py} (every other experiment in this paper depends on their current behavior) and instead implements a genuine online closed loop from scratch. The same record stream is run through three regimes in sequence:
\begin{verbatim}
baseline: insert every record regardless of hit/miss
(= the convention every other section of this
paper uses)
+ threshold calibrated once from an initial
warm-up slice, then frozen
self_select: insert only on miss (a hit reuses; no duplicate
write)
+ threshold fixed at baseline's own calibrated
value
self_select_recal: insert only on miss
+ threshold re-derived online via
crc_select_threshold: every 500 new gray-zone
observations, recalibrate from the most recent
2,000 (sliding window)
\end{verbatim}
\texttt{self\_\allowbreak select} changes exactly one variable relative to \texttt{baseline} (write semantics) --- the threshold value is identical, transplanted as a plain number from \texttt{baseline}'s own calibration rather than re-derived on \texttt{self\_\allowbreak select}'s own data --- so any difference between the two can be attributed to ``does cache content get shaped by its own decisions'' alone, not to the threshold also happening to differ. \texttt{self\_\allowbreak select\_\allowbreak recal} adds a second variable (online recalibration) on top of \texttt{self\_\allowbreak select}, testing whether recalibration can compensate for whatever damage self-selection causes. Sanity check: \texttt{baseline}'s Quora gray-zone candidate count (17{,}040) matches this paper's existing static trace cache file (the same one Section~\ref{sec:crc} uses) exactly, digit for digit --- confirming the new harness faithfully reproduces this paper's existing mechanism rather than being an independent implementation that might carry its own bugs.
Regime comparisons use only post-warm-up observations (\texttt{baseline} alone goes through a warm-up period where every gray-zone candidate is rejected under a fixed fail-closed policy --- matching \texttt{cacheverifier-service}'s own real cold-start default --- before its threshold is calibrated; \texttt{self\_\allowbreak select}/\texttt{self\_\allowbreak select\_\allowbreak recal} use the transplanted, already-calibrated threshold from their very first observation and never go through this warm-up period. Including the warm-up period in the comparison would pull \texttt{baseline}'s overall risk down artificially via this zero-risk stretch, producing a spurious difference unrelated to the self-selection mechanism itself). Risk differences use an unpaired percentile bootstrap (\texttt{bootstrap\_\allowbreak risk\_\allowbreak difference}, 2{,}000 resamples, 95\% CI; once two regimes diverge, their matched candidate sequences are no longer the same, so there is no natural way to pair observations one-to-one --- this is deliberately unpaired, not paired).
\textbf{Quantitative results} ($\alpha=0.02$; ``direct-hit rate'' and ``cache sparsification'' are both taken from \texttt{baseline}/\texttt{self\_\allowbreak select}'s actual runs):
\begin{table}[h]
\centering
\small
\begin{tabular}{@{}lccccc@{}}
\toprule