Build1 distinct publisher3 min readPublished
Open Walnut patched QMD's compiled output 15 times from the outside, then found that the one stage it needed to change, tokenization, lived in the engine core. Writing its own engine again took eleven days.
The Engineer · Build desk

Compiled by The EngineerSomething wrong?How this is made
A postinstall patch rewrites `dist/store.js` after npm unpacks it, and Open Walnut had 15 of them pinned to a single version of QMD 2.1.0 [12]. That kind of edit changes what a function returns on the way out, not which tokens went into the index. FTS5 was configured with `porter unicode61` [20], so the indexing decision was made in the engine core long before any wrapper saw the query. Of the three causes the team traces the August miss to, the tokenizer, the AND-joined query and the scoring were all inside the library, while the patches and roughly 3,700 lines of integration code across 18 files sat outside it [21][12].
Those 3,700 lines are 4.6 times the roughly 800 lines of the first engine the team threw away [2][8]. Several of the 18 files reached into the library's private `internal.*` API [12].
The latency profile says who the library was built to serve. `/api/search` averaged 4,034 ms in production against a hard 300 ms prefetch budget, which is 13.4 times over [14][5][1]. The cross-encoder reranker took 9.29 seconds at p50 to rerank 40 candidates, about 232 ms per candidate [15][3], and bought 10 points of observed Recall@10, from 81.7% to 91.7% [15][6]. Ten points is a real gain, but it is not available to anything a person is watching, so it was disabled on every interactive path [15].
One reason for leaving the first engine was that Ollama was a second process the user had to install and keep running [9]. Synchronous, seconds-long index writes then forced a forked child process to keep the web server's event loop alive [17]. The same process problem recurred.
Whether any of these numbers is about your workload depends on the corpus. QMD was built for markdown knowledge bases, mostly in one language [18]. This index holds about 12,000 documents, of which 3,593 are session transcripts, and the session store alone is 388 MB of the 663 MB on disk, 58.5% of the total [6][13][4]. About 31% of task titles mix Chinese and English, and notes carry identifiers like `CR-291543784` [7]. Point the same library at single-language prose in files and the tokenizer complaint goes away, and most of the patch count with it.
The eleven days is the team's own accounting, and it is cheap for a reason it states plainly: once tokenization moved into their code, the rest of the engine turned out to be things already in their stack [4][23]. A team that genuinely wanted the reranker and the query-expansion model, rather than shipping a 3.8 GB model cache with more than half of it never enabled [16], would be rewriting considerably more than a tokenizer.
The July embedding study is the weakest link in the chain. It ran on an isolated copy of 3,549 tasks, through QMD's hybrid path, and Qwen3 won and is still the default in the engine that replaced that path [22]. The comparison table is not in the write-up available here, so the default rests on a measurement taken under scoring that no longer runs.
The stage that decided what existed to be found was the one stage this library did not let anyone replace, and that is the standard a search library should be judged by [3].
Ranked by verification strength, evidence, and original report placement.
Open Walnut is a self-hosted personal AI web app combining tasks, notes, long-term memory and Claude Code sessions.
Over seven months the team replaced Open Walnut's search engine twice: it wrote its own, threw it out for an open-source library, then wrote its own again on top of two small libraries.
Tokenization, which decides what can be found at all, was the one component the library did not let the team replace.
The second switch took eleven days behind a flag, and the team states that the four months of patching before it cost more than that.
Before every agent turn a skill prefetch has a hard budget of 300 ms to find the relevant instructions; miss the budget and the turn runs without them.
The index holds about 12,000 documents: 6,242 tasks, 3,593 session transcripts, 1,897 notes, 167 memory pages and 93 skills.
Distinct publishers with included, body-backed reporting in this cluster.
1 article · September 5, 2026
Follow any of these and your For You feed starts watching them — no settings page required.
build
Ornith-1.0's benchmarks are fine. Ollama can't parse its tool calls.1 distinct publisher
build
A Gulf bank's compliance rule priced out to $133 of GPU per seat1 distinct publisher
build
Your RAG Cannot Find SKU-4471, And A Bigger Embedding Model Will Not Help1 distinct publisher
build
A small harness carried a local model through the regression check in 2.1 minutes1 distinct publisher
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
Specific, dated, and entirely self-measured
For a self-published engineering post the instrumentation is unusually concrete: a dated first patch, index sizes broken out by store, p50 figures for reindexing and reranking, a stated method for the competitive scan (live test or reading source at August 2026 versions). The causal chain is also checkable in principle by anyone with FTS5, since porter unicode61 really does reduce AcmeEventOperator to one stemmed token. What is missing is any second measurement: one production install, one roughly 12,000-document corpus, numbers gathered by the people who decided to leave the library.
Four months in production, on one machine
QMD ran the search behind a live personal AI tool from April into August, a real production stretch, not a lab exercise: it accumulated version-pinned patches and was removed only after a user's query missed a document. But the whole record is a single self-hosted installation with one user's data, and the replacement engine has been in service for days rather than months.
The costs are stated more plainly than the win
The post declines the easy version of its own story. It credits QMD's design intent instead of calling it broken. It publishes the worst numbers about its own shipped product (a four-second average search, 3.8 GB of models nobody enabled). And it keeps its conclusion pinned to one corpus of code identifiers and three languages. The eleven-day figure is the one that flatters the authors, and it depends on seven months of learning what to build, which the post mentions but never prices.
Maintainer explaining a decision already made
The author is the Open Walnut team, writing on a developer platform about a rewrite it has already shipped, and a rewrite reads better when the abandoned library looks like a poor fit. Pulling the other way: the harshest measurements in the piece describe the authors' own production system, and the choice to name the reranker's real recall gain works against their argument. QMD's maintainers get no say on whether the recall cap or the hardcoded tokenizer had a supported route around them.
Internally coherent, single witness
The figures agree with each other and the mechanism holds up on inspection, which is why the tokenizer finding carries weight even from one source. The open question is the counterfactual the post depends on: whether four months of patching was the only way to learn that tokenization was the blocker, and whether an upstream conversation would have moved it. On a story this specific, one account plus arithmetic gets you most of the way and no further.