Repository navigation
Expand file tree
/
Copy pathindex.html
More file actions
410 lines (400 loc) · 26.9 KB
/
Copy pathindex.html
File metadata and controls
410 lines (400 loc) · 26.9 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
<!DOCTYPE html>
<html lang="en" data-theme="day">
<head>
<!-- ga4:begin — generated by scripts/seo/seo_head.py · do not hand-edit -->
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-Z77ETCDJYL"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-Z77ETCDJYL');
</script>
<!-- ga4:end -->
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>XERJ.ai — Blog: the engineering log</title>
<meta name="description" content="100 contributors behind 12,000 stars in 12 days: the XERJ milestone post. Also faster autoindex, the rc.99 launch, Corpus Hub v2 and the exploit hub.">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Big+Shoulders+Display:wght@400;700;800;900&family=Inter:wght@400;500;600;700&family=IBM+Plex+Sans:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;700&display=swap" rel="stylesheet">
<link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><rect width='100' height='100' fill='%230b0b0d'/><text x='50' y='68' font-size='60' font-family='Big Shoulders Display,sans-serif' font-weight='900' fill='%23ffc400' text-anchor='middle'>X</text></svg>">
<script src="/theme.js"></script>
<link rel="stylesheet" href="/style.css?v=if9">
<link rel="stylesheet" href="/blog.css?v=4">
<!-- seo:begin — generated by scripts/seo/fix_heads.py · do not hand-edit -->
<link rel="canonical" href="https://xerj.org/blog/">
<meta property="og:site_name" content="XERJ.ai">
<meta property="og:type" content="website">
<meta property="og:title" content="XERJ.ai — Blog: the engineering log">
<meta property="og:description" content="100 contributors behind 12,000 stars in 12 days: the XERJ milestone post. Also faster autoindex, the rc.99 launch, Corpus Hub v2 and the exploit hub.">
<meta property="og:url" content="https://xerj.org/blog/">
<meta property="og:image" content="https://xerj.org/og/xerj-card.png">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta property="og:image:alt" content="XERJ.ai — the search engine built for AI agents">
<meta property="og:locale" content="en_US">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="XERJ.ai — Blog: the engineering log">
<meta name="twitter:description" content="100 contributors behind 12,000 stars in 12 days: the XERJ milestone post. Also faster autoindex, the rc.99 launch, Corpus Hub v2 and the exploit hub.">
<meta name="twitter:image" content="https://xerj.org/og/xerj-card.png">
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Organization",
"@id": "https://xerj.org/#organization",
"name": "XERJ",
"alternateName": "XERJ.ai",
"url": "https://xerj.org/",
"logo": "https://xerj.org/brandbook/xerj-mark.svg",
"description": "A new way for AI to search for data: one local Rust binary that indexes your code, docs, specs and logs, plus Corpus Hub packs, and returns cited answers.",
"sameAs": [
"https://github.com/xerj-org/xerj",
"https://x.com/xerj_org"
]
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "WebSite",
"@id": "https://xerj.org/#website",
"name": "XERJ.ai",
"url": "https://xerj.org/",
"inLanguage": "en",
"publisher": {
"@id": "https://xerj.org/#organization"
}
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "CollectionPage",
"name": "XERJ.ai — Blog: the engineering log",
"description": "100 contributors behind 12,000 stars in 12 days: the XERJ milestone post. Also faster autoindex, the rc.99 launch, Corpus Hub v2 and the exploit hub.",
"url": "https://xerj.org/blog/",
"image": "https://xerj.org/og/xerj-card.png",
"inLanguage": "en",
"dateModified": "2026-10-29",
"isPartOf": {
"@id": "https://xerj.org/#website"
},
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "https://xerj.org/blog/"
}
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Home",
"item": "https://xerj.org/"
},
{
"@type": "ListItem",
"position": 2,
"name": "Blog"
}
]
}
</script>
<!-- seo:end -->
</head>
<body>
<nav class="nav" aria-label="Primary">
<a href="/" class="brand">XERJ</a>
<a href="/product">PRODUCT</a>
<a href="/use-cases">USE CASES</a>
<a href="/answers/">ANSWERS</a>
<a href="/benchmarks/">BENCHMARKS</a>
<a href="/blog/" class="active">BLOG</a>
<span class="spacer"></span>
<a href="/for-agents">FOR AGENTS</a>
<a href="/docs/">DOCS</a>
<a href="/playground">DASHBOARDS</a>
<a href="https://hub.xerj.org" rel="external">HUB</a>
<a class="nav-stars" href="https://github.com/xerj-org/xerj" rel="external" title="XERJ on GitHub" aria-label="XERJ on GitHub, 14,225 stars"><svg viewBox="0 0 16 16" width="14" height="14" aria-hidden="true"><path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"/></svg><span class="nav-stars-n" data-gh-stars="14225">★ 14.2k</span></a>
<a href="https://x.com/xerj_org" rel="external" title="XERJ on X" style="display:inline-flex;align-items:center"><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z"/></svg></a>
<a href="https://discord.com/invite/yetXFusXfs" rel="external" title="XERJ on Discord" style="display:inline-flex;align-items:center"><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M20.317 4.37a19.79 19.79 0 00-4.885-1.515.074.074 0 00-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 00-5.487 0 12.64 12.64 0 00-.617-1.25.077.077 0 00-.079-.037A19.74 19.74 0 003.677 4.37a.07.07 0 00-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 00.031.057 19.9 19.9 0 005.993 3.03.078.078 0 00.084-.028c.462-.63.874-1.295 1.226-1.994a.076.076 0 00-.041-.106 13.1 13.1 0 01-1.872-.892.077.077 0 01-.008-.128 10.2 10.2 0 00.372-.292.074.074 0 01.077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 01.078.01c.12.098.246.198.373.292a.077.077 0 01-.006.127 12.3 12.3 0 01-1.873.892.077.077 0 00-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 00.084.028 19.84 19.84 0 006.002-3.03.077.077 0 00.032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 00-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.956-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.955-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.946 2.418-2.157 2.418z"/></svg></a>
<span class="theme">
<button type="button" data-theme="day" class="active">DAY</button>
<span class="dash">·</span>
<button type="button" data-theme="night">NIGHT</button>
</span>
</nav>
<main>
<div class="uc-hero blog-hero">
<div class="uc-eyebrow">XERJ · BLOG · THE ENGINEERING LOG</div>
<h1>MEASURED,<br><span class="accent">WRITTEN DOWN.</span></h1>
<p class="uc-lead">We write up the measurements as they happen, and we leave the losing rows in the
tables. Every post is dated and names the runs it came from, because a number you cannot trace back to
a run is marketing.</p>
</div>
<section class="scene-section" style="border-top:0; padding-top:0;">
<!-- Reverse-chronological by hand while there is one post; new posts PREPEND.
Move to a generator only past ~10 posts. -->
<ol class="blog-list">
<li>
<a class="bl-card" href="/blog/100-contributors">
<img class="bl-thumb" src="/blog/covers/100-contributors-thumb.webp" width="640" height="336" alt="Cover art: 100 in huge display type above the word contributors, then 12,000 stars in 12 days on a yellow highlight and 17,486 GitHub stars today; beside it a yellow area chart of the running star count from July to October 2026 that climbs steeply from 5,000 stars on Oct 15 to 17,000 stars on Oct 27; on the right a 10 by 10 grid of the 100 contributors' GitHub avatars" loading="lazy" decoding="async">
<div class="bl-meta">
<p class="bl-date"><time datetime="2026-10-29">2026-10-29</time> · MILESTONE · 100 CONTRIBUTORS</p>
<h2 class="bl-title">100 contributors behind 12,000 stars in 12 days</h2>
<p class="bl-excerpt">Meet the 100 contributors behind XERJ. In 12 days it gained 12,434
GitHub stars and became the #1 Rust repository of the day and week on Trendshift.
What they built, what your agents get now, and where it goes next.</p>
<p class="bl-byline">AUTHOR · XERJ ENGINEERING · PUBLISHED · 2026-10-29</p>
<span class="bl-read">READ THE POST →</span>
</div>
</a>
</li>
<li>
<a class="bl-card" href="/blog/autoindex-search-performance-improvements">
<img class="bl-thumb" src="/blog/covers/autoindex-search-performance-improvements-thumb.webp" width="640" height="336" alt="Cover art: 28 filled squares and 217 small empty rings scattered on grid paper, the filled ones joined by hairlines to a wide block of 454 empty cells, beside 32 yellow cells at the same pitch, then a gate of ink posts around two grey-blue columns and one empty yellow cell at its base" loading="lazy" decoding="async">
<div class="bl-meta">
<p class="bl-date"><time datetime="2026-10-26">2026-10-26</time> · PERFORMANCE · AUTOINDEX + SEARCH</p>
<h2 class="bl-title">How your field reports made XERJ autoindex faster</h2>
<p class="bl-excerpt">Index size per indexed byte fell from 3.50x to 1.80x of source,
and autoindex makes at most 32 datasets where one folder used to need 454 indices. Six
improvements explained in plain terms, the performance gate behind them, and a thank-you
to the 28 people and 217 agent field reports that made it happen.</p>
<p class="bl-byline">AUTHOR · XERJ ENGINEERING · PUBLISHED · 2026-10-26</p>
<span class="bl-read">READ THE POST →</span>
</div>
</a>
</li>
<li>
<a class="bl-card" href="/blog/rc99-smart-autoindex-harness-tools">
<img class="bl-thumb" src="/blog/covers/rc99-smart-autoindex-harness-tools-thumb.webp" width="640" height="336" alt="Cover art: eight large squares for the 8 GiB tier, the first two yellow for the 2 GiB memtable budget, beside eight small squares for the 8 MiB document ceiling and one outlined square for JSON streamed past 64 MiB" loading="lazy" decoding="async">
<div class="bl-meta">
<p class="bl-date"><time datetime="2026-10-24">2026-10-24</time> · RELEASE · V1.0.0-RC.99</p>
<h2 class="bl-title">rc.99: smart, resource-aware autoindex and more harness tools</h2>
<p class="bl-excerpt">rc.99 is yours: 116 merged changes and the 20 community members behind
them. A laptop stays usable while it indexes, and an agent can ask up to 50 questions in
one call and get cited evidence back. Memory exhaustion and clustering stay open. This is
the 98th tagged release, just over 100 days since rc.1.</p>
<p class="bl-byline">AUTHOR · XERJ ENGINEERING · PUBLISHED · 2026-10-24</p>
<span class="bl-read">READ THE POST →</span>
</div>
</a>
</li>
<li>
<a class="bl-card" href="/blog/corpus-hub-v2">
<img class="bl-thumb" src="/blog/covers/corpus-hub-v2-thumb.webp" width="640" height="336" alt="Cover art: a faint wall of 251 small tiles above 14 larger square-matrix tiles; a yellow route runs from the top into one yellow tile and down to a framed node" loading="lazy" decoding="async">
<div class="bl-meta">
<p class="bl-date"><time datetime="2026-10-19">2026-10-19</time> · CORPUS HUB · XERJ ASK</p>
<h2 class="bl-title">Corpus Hub v2: ask the question, get the one pack that answers it</h2>
<p class="bl-excerpt">Type a question and <code>xerj</code> picks the corpus from a signed
catalogue, pulls that one pre-indexed pack (lz4: <strong>4.4 MB</strong>) and answers on your
machine: <strong>1.7 to 2.3 s</strong> cold, <strong>37 to 57 ms</strong> warm. Ambiguous
questions come back as a choice (exit 4), and a dead hub now has its own code (exit 6). The hub
site gained contributor pages, agent scores kept apart from human stars, per-corpus traffic and
field reports that become PRs. The routing miss we hit, and the catalogue lagging the packs
(<strong>14</strong> routable of <strong>251</strong> built), are in the post.</p>
<p class="bl-byline">AUTHOR · XERJ ENGINEERING TEAM · PUBLISHED · 2026-10-19</p>
<span class="bl-read">READ THE POST →</span>
</div>
</a>
</li>
<li>
<a class="bl-card" href="/blog/the-exploit-hub">
<img class="bl-thumb" src="/blog/covers/the-exploit-hub-thumb.webp" width="640" height="336" alt="Cover art: a network of small square nodes; a yellow hub linked to 36 yellow nodes, an ink node with one link, and an empty square frame with none" loading="lazy" decoding="async">
<div class="bl-meta">
<p class="bl-date"><time datetime="2026-10-08">2026-10-08</time> · CYBER-EXPLOITS CORPUS · EVAL</p>
<h2 class="bl-title">The exploit hub, tested on three fresh CVEs</h2>
<p class="bl-excerpt">One query over 1.09 million PoC documents named the exact route and field for CVE-2026-23744; an in-corpus 2026 exploit named the exact denylist segments the vendor shipped for CVE-2026-105844; the third case proved the corpus adds nothing when its stratum is empty, and we count it. The vendor patch beat both arms on the needle, the eval caught a live client defect, and the losses are in the tables.</p>
<p class="bl-byline">AUTHOR · XERJ ENGINEERING · PUBLISHED · 2026-10-08</p>
<span class="bl-read">READ THE POST →</span>
</div>
</a>
</li>
<li>
<a class="bl-card" href="/blog/eval-scars-from-agent-memory">
<img class="bl-thumb" src="/blog/covers/eval-scars-from-agent-memory-thumb.webp" width="640" height="336" alt="Cover art: six clusters of diagonal scratch marks made of small squares, five in ink and one in yellow" loading="lazy" decoding="async">
<div class="bl-meta">
<p class="bl-date"><time datetime="2026-10-07">2026-10-07</time> · GUEST · AGENT MEMORY · EVAL</p>
<h2 class="bl-title">Six eval scars from a production agent-memory system</h2>
<p class="bl-excerpt">We asked practitioners what agents still miss. Chunxiao Wang (Assay /
nautilus-compass) answered with six patterns that each cost a real failure: topic slicing that beat
token windows on <strong>recall@1 by double digits</strong> and reversed two embedders' MTEB ranking;
a <strong>0.87</strong> classifier a <strong>0.78 always-yes</strong> baseline nearly matched at n=60;
the masking bug that scores every query zero; and the paired-vs-unpaired read that overstated an
effect <strong>4×</strong>. Their price was an honest answer to where our corpus registry is
thin against their workload. We checked: <strong>zero</strong> of 99 live corpora are agent
trajectories, and our chunking is the wrong shape for topic-sliced session memory. The want now has
a named backlog slot.</p>
<p class="bl-byline">GUEST · CHUNXIAO WANG, ASSAY / NAUTILUS-COMPASS · PUBLISHED · 2026-10-07</p>
<span class="bl-read">READ THE POST →</span>
</div>
</a>
</li>
<li>
<a class="bl-card" href="/blog/the-corpus-hub">
<img class="bl-thumb" src="/blog/covers/the-corpus-hub-thumb.webp" width="640" height="336" alt="Cover art: a 10 by 10 wall of square-matrix pack tiles in shades of ink, the first four solid yellow and the fifth framed" loading="lazy" decoding="async">
<div class="bl-meta">
<p class="bl-date"><time datetime="2026-10-01">2026-10-01</time> · CORPUS HUB · AGENT CONTEXT</p>
<h2 class="bl-title">The Corpus Hub: pinned, licenced, signed, and contributed by pull request</h2>
<p class="bl-excerpt">Agent context is everyone's private plumbing: unknown vintage, unknown
licence, no checksum, no signature. The Corpus Hub makes it a registry — four reference
corpora and a signed daily pack, every source pinned to the SHA the build used and
licence-reviewed by a human. The measured use case: same <strong>16/16</strong> solve rate at
<strong>2.7× fewer output tokens</strong>. And the experiment we did not want: our own
security A/B <strong>tied</strong> — <strong>zero</strong> findings traceable to the corpus —
so the hub ships with that row in the table and a code-shaped pack as its roadmap.</p>
<p class="bl-byline">AUTHOR · XERJ ENGINEERING TEAM · PUBLISHED · 2026-10-01</p>
<span class="bl-read">READ THE POST →</span>
</div>
</a>
</li>
<li>
<a class="bl-card" href="/blog/the-rc80-gates">
<img class="bl-thumb" src="/blog/covers/the-rc80-gates-thumb.webp" width="640" height="336" alt="Cover art: ten gates built from squares in two rows: three yellow with check marks, three ink with crosses, one half yellow and three faint" loading="lazy" decoding="async">
<div class="bl-meta">
<p class="bl-date"><time datetime="2026-09-30">2026-09-30</time> · RELEASE GATES · ENGINEERING</p>
<h2 class="bl-title">The rc.80 gates: three passed outright, three failed, one split</h2>
<p class="bl-excerpt">The ten-item program shipped, and every gate that could carry a number was run in
public. <strong>/_ask</strong> scored macro-F1 <strong>0.9975</strong> at p50 1.129 ms;
<strong>xerj_map</strong> took unknown-field 400s from <strong>20/30 to 0/30</strong>; calibration took
FiQA ECE from <strong>0.3109 to 0.0088</strong>. The local judge lost everywhere it was measured, the
flywheel covered <strong>19.72%</strong> against an 80% bar, and the decide head missed its accuracy
bars — those rows are in the post too, and they filed four issues.</p>
<p class="bl-byline">AUTHOR · XERJ ENGINEERING TEAM · PUBLISHED · 2026-09-30</p>
<span class="bl-read">READ THE POST →</span>
</div>
</a>
</li>
<li>
<a class="bl-card" href="/blog/one-vulnerability-three-names">
<img class="bl-thumb" src="/blog/covers/one-vulnerability-three-names-thumb.webp" width="640" height="336" alt="Cover art: three outlined boxes trailing lines of small squares that converge on one square-matrix disc with a yellow seal at its centre" loading="lazy" decoding="async">
<div class="bl-meta">
<p class="bl-date"><time datetime="2026-09-27">2026-09-27</time> · CORPUS PACKS · SECURITY DATA</p>
<h2 class="bl-title">One vulnerability, three names, and a pack we sign</h2>
<p class="bl-excerpt">The same Rust vulnerability sits in two databases under three ids, and
neither database merges them. A three-line identity recipe collapses
<strong>4,107 filings to 1,950 rec
BF42
ords</strong> carrying every field either source knew
— including the curated vulnerable-function paths no export has. Then the part
nobody ships: <strong>a signature</strong>, because checksums prove integrity and not
origin.</p>
<p class="bl-byline">AUTHOR · XERJ ENGINEERING TEAM · PUBLISHED · 2026-09-27</p>
<span class="bl-read">READ THE POST →</span>
</div>
</a>
</li>
<li>
<a class="bl-card" href="/blog/cutting-the-index-28-percent">
<img class="bl-thumb" src="/blog/covers/cutting-the-index-28-percent-thumb.webp" width="640" height="336" alt="Cover art: a large ink block of squares wrapped in a yellow L-shaped band that marks the 28% cut, beside two pairs of thin before-and-after bars" loading="lazy" decoding="async">
<div class="bl-meta">
<p class="bl-date"><time datetime="2026-09-27">2026-09-27</time> · STORAGE · ENGINEERING</p>
<h2 class="bl-title">Cutting the index 28%: dissect first, write Rust second</h2>
<p class="bl-excerpt">Four file formats, each changed only after a real segment was dissected offline.
The stored section fell <strong>−73.1%</strong>, term metadata <strong>−93.1%</strong>, and
the whole index went from <strong>5.52 MB to 3.99 MB</strong>. The variant we were most confident
about doubled the size it was improving — that row is in the post too.</p>
<p class="bl-byline">AUTHOR · XERJ ENGINEERING TEAM · PUBLISHED · 2026-09-27</p>
<span class="bl-read">READ THE POST →</span>
</div>
</a>
</li>
<li>
<a class="bl-card" href="/blog/jev-vs-a-bm25-vote">
<img class="bl-thumb" src="/blog/covers/jev-vs-a-bm25-vote-thumb.webp" width="640" height="336" alt="Cover art: two grids of 500 squares, filled for correct answers; the ink grid has a band of yellow squares where it beats the blue grid" loading="lazy" decoding="async">
<div class="bl-meta">
<p class="bl-date"><time datetime="2026-09-22">2026-09-22</time> · BENCHMARKS · DECISIONS</p>
<h2 class="bl-title">A BM25 vote ties Jev on spam and beats it on intent</h2>
<p class="bl-excerpt">Five hundred decisions each, on two public datasets. On spam the two are
statistically indistinguishable (McNemar <strong>p = 0.75</strong>). On 77-way intent a local
vote wins by <strong>nine points</strong> at <strong>zero marginal cost</strong>. The crossover
is twenty-five labelled examples per class. On DBpedia Jev beats us outright, and that row
stays in.</p>
<p class="bl-byline">AUTHOR · XERJ ENGINEERING TEAM · PUBLISHED · 2026-09-22 · UPDATED · 2026-09-27</p>
<span class="bl-read">READ THE POST →</span>
</div>
</a>
</li>
<li>
<a class="bl-card" href="/blog/does-xerj-beat-jev">
<img class="bl-thumb" src="/blog/covers/does-xerj-beat-jev-thumb.webp" width="640" height="336" alt="Cover art: three pairs of square-matrix bars, ink for XERJ and blue for BM25+Jev, over one long blue bar and a single yellow square for the zero-cost local run" loading="lazy" decoding="async">
<div class="bl-meta">
<p class="bl-date"><time datetime="2026-09-21">2026-09-21</time> · BENCHMARKS · JEV</p>
<h2 class="bl-title">Does XERJ beat JEV? On the bill, outright. On FiQA, no.</h2>
<p class="bl-excerpt">Does XERJ beat JEV? On the bill, outright — the FiQA rerank run billed <strong>$0.6375</strong> and <strong>15,178,758 judge tokens</strong>, while our local node answers the same wire with zero. On relevance the hosted judge keeps SciFact (0.7410 vs 0.6993) and FiQA (0.3638 vs 0.2382, +0.126); our zero-API-token hybrid keeps NFCorpus (0.3448 vs 0.3312). And the unmodified pip jev-reranker passed its own gate against a XERJ node. Every win, every loss, with the receipt.</p>
<p class="bl-byline">AUTHOR · XERJ ENGINEERING TEAM · PUBLISHED · 2026-09-21 · UPDATED · 2026-09-27</p>
<span class="bl-read">READ THE POST →</span>
</div>
</a>
</li>
</ol>
<p class="blog-archive">More measured ground lives in the benchmarks hub: <a href="/benchmarks/">/benchmarks</a> — the ES conformance board, BEIR baselines, and the Jev tables, every number traced to a run.</p>
<p class="blog-archive">If you would rather check a number than read about it: the engine is
<a href="/docs/install">one binary</a>, the <a href="/docs/quickstart">quickstart</a> walks a
first index, the <a href="/playground">playground</a> needs no install, and your own corpus is
the benchmark that matters — the standard every post above holds itself to.</p>
</section>
</main>
<!-- seo:footer-begin — generated by scripts/seo/fix_links.py · do not hand-edit -->
<nav class="footer-map" aria-label="Site map">
<div class="fm-col">
<span class="fm-h">PRODUCT</span>
<a href="/product">PRODUCT</a>
<a href="/architecture/">ARCHITECTURE</a>
<a href="/benchmarks/">BENCHMARKS</a>
<a href="/pricing/">PRICING</a>
<a href="/security/">SECURITY</a>
<a href="/playground">DASHBOARDS</a>
<a href="/demo/">REAL-DATA DEMO</a>
<a href="/aise-demo">PRODUCT TOUR</a>
</div>
<div class="fm-col">
<span class="fm-h">LEARN</span>
<a href="/answers/">ANSWERS</a>
<a href="/compare/">COMPARE</a>
<a href="/use-cases">USE CASES</a>
<a href="/case-studies">CASE STUDIES</a>
<a href="/industries/">INDUSTRIES</a>
<a href="/blog/">BLOG</a>
</div>
<div class="fm-col">
<span class="fm-h">SOLUTIONS</span>
<a href="/solutions/">SOLUTIONS</a>
<a href="/industries/finserv">FINANCIAL SERVICES</a>
<a href="/industries/public-sector">PUBLIC SECTOR</a>
<a href="/industries/healthcare">HEALTHCARE</a>
<a href="/industries/retail">RETAIL</a>
<a href="/use-cases/code-security-audit">AI CODE-SECURITY AUDIT</a>
<a href="/use-cases/semantic-analytics">SEMANTIC ANALYTICS</a>
<a href="/resources/">SALES KIT</a>
</div>
<div class="fm-col">
<span class="fm-h">DOCS</span>
<a href="/docs/">DOCUMENTATION</a>
<a href="/docs/quickstart">QUICKSTART</a>
<a href="/docs/install">INSTALL</a>
<a href="/docs/migration-from-es">MIGRATE FROM ELASTICSEARCH</a>
<a href="/docs/recipes/">RECIPES</a>
<a href="/docs/agents/">DOCS FOR AI</a>
<a href="/for-agents">FOR AI AGENTS</a>
<a href="/agent-search/">AGENTIC SEARCH DEMO</a>
<a href="/llms.txt">LLMS.TXT</a>
<a href="https://github.com/xerj-org/xerj" rel="external">GITHUB</a>
</div>
</nav>
<!-- seo:footer-end -->
<footer class="footer">
<span>XERJ.AI · V1.0.0-RC.100 · 2026</span>
<span>SEARCH FOR THE AGENT ERA</span>
<span><a href="/product">PRODUCT</a> · <a href="/docs/">DOCS</a> · <a href="/answers/">ANSWERS</a> · <a href="/playground">DASHBOARDS</a> · <a href="/llms.txt">LLMS.TXT</a></span>
</footer>
<script>
(function () {
const root = document.documentElement;
})();
</script>
</body>
</html>