A LeverageAI Field Guide

The Nudge Doctrine

Small Signals, One Judge

Your retrieval stack’s tuning nightmare is mostly self-inflicted. It exists because you make each fuzzy signal the answer.

Demote every signal to a nudge — a small, advisory prior handed to exactly one judge — and the nightmare disappears. A doctrine I first proved on a chessboard in 2003, with receipts.

The argument in three lines

  • Deterministic code gives ground truth, nudges give priors, exactly one model judges. Nothing in the chorus gets to decide — they only get to bias.
  • A chorus of weak priors is robust where a single oracle is brittle — a wrong authority is expensive; a wrong prior is free to ignore.
  • Three rules keep a nudge a nudge: frequency, weight-class, ripple — and you leave the weights rough on purpose.

Scott Farrell · LeverageAI

01
Part I · The Doctrine

The Nudge: A Whisper, Not a Vote

The whole doctrine fits in one design decision I made almost without thinking: pass the model a pointer, never the chunk. A chunk is a vote. A pointer is a whisper.

TL;DR

  • A nudge is a small, frequent, advisory prior fed to exactly one judgment layer. It biases; it never decides.
  • The move is demotion: take every fuzzy signal — RAG, mention-counts, graph rank — and drop it from oracle to prior. Deterministic code gives ground truth; nudges give priors; exactly one model judges.
  • The pay-off, defended across this book: a chorus of weak priors is robust where a single oracle is brittle — and the tuning nightmare mostly disappears.

Here is the design moment that this whole book unpacks. My wiki has a search feature — ask it something like “how do I start an AI project” and a language model answers, mostly by reading the index and a hundred-character description of every page. Recently I wanted to fold a vector search into that. And I had a fork in front of me.

I could put the RAG into the toolbelt — the set of tools the agent uses to navigate the wiki — and let it search alongside everything else. Or I could bury it in the back end and let it whisper. I chose the whisper. When the search runs, the vector index runs the same question in the background, and I take the top five hits by count and score and hand them to the model as a hint: you might want to include these. Not the chunks. Not the retrieved text. Just pointers and a scent.

That single decision — chunks would give RAG a vote; a bare pointer gives it a whisper — is the doctrine in miniature. And the reason is an asymmetry worth sitting with.

The reframe

Hand the model an oracle and it inherits the oracle’s mistakes. Hand it a prior and the worst case is nothing. A bad hint costs a wasted glance; a wrong-but-confident chunk poisons the context.

Give RAG the chunks and a single wrong-but-confident passage can drag the answer off course — it’s in the context now, indistinguishable from truth. Give it a bare pointer and the worst thing that happens is the model glances at something unhelpful and moves on. The integration level isn’t a hedge I settled for. It’s the whole point. I demoted RAG from an oracle that answers to a prior that points.

What a nudge actually is

Let me define the thing plainly, because the rest of the book leans on it.

Definition

A nudge is a small, frequent, advisory prior fed to exactly one judgment layer.

It biases a choice without forbidding any option or forcing one. It never answers. It points, weights, tilts — and then a single judge decides what to do with the tilt.

The word is exact, and I don’t use it loosely. It’s the same word the behavioural economists use for a choice architecture that shifts behaviour without removing options or changing the incentives — a bias, not a command. My retrieval hint is the literal software version of that idea. It changes which page looks worth reading. It does not decide which page is the answer.

What that hint stands against is the default mental model everybody starts with: a retrieval component as an answer engine. An oracle. You ask, it returns the truth, and your job is to tune it until the truth is good enough. The nudge is the demotion of that oracle to a prior — and demotion, it turns out, is a move I’ve made before.

The three-way division of labour

Once RAG is a hint rather than an answer, a cleaner shape shows up behind it — and it’s the shape the whole stack is built from.

Deterministic code gives ground truth, nudges give priors, and exactly one LLM gives judgment. Nothing in the chorus gets to decide — they only get to bias.

Three legs, and they don’t overlap. Deterministic code owns ground truth: an exact-token search either finds the string or it doesn’t; a count of results is a fact. Nudges are the chorus of weak priors — the RAG hint, a mention-count, a graph-centrality score — each biasing the picture a little, none permitted to decide. And exactly one model is the judge: it reads the ground truth, weighs the priors, and synthesises the answer. One judge. Not a committee of voters.

Hold onto that split. It is the spine of every chapter that follows, and I’ll be pointing back at it rather than restating it. When Chapter 2 asks why this arrangement is robust, when Chapter 3 gives you the three rules that keep a nudge well-behaved, when Chapter 5 shows three retrievers each doing exactly one of these jobs in a single live session — they’re all elaborations of these three legs.

The demotion, generalised

Demoting RAG from an architecture to a single retrieval axis is something I’ve written about on its own: RAG stops being the system and becomes one sensor beside wikilink walk, time, entity, and grep, returning shaped results and never raw chunks into the main agent. That piece makes the case for the demotion; I won’t re-argue it here.

What this book does is widen the demotion. Not just RAG — every fuzzy signal gets the same treatment. And once you have a chorus of demoted signals rather than one, you need rules that keep them from turning back into oracles. That’s the addition: the three design rules (Chapter 3) that make a composition of nudges stable and, almost as a side effect, tuning-free.

A boundary worth marking early

This is not a book about whether a given corpus should live in a vector index or a wiki graph at all — that substrate question is a different argument, made elsewhere. Here we assume you already have signals — several of them, of different kinds — and the only question is how to compose them without drowning in tuning.

Why this is a signature, not a trick

I want to be honest about how much weight this idea carries for me. The nudge isn’t a clever one-off I reached for on the wiki.

I’ve used the concept of a nudge a few times. It’d have to be one of my most well-used algorithms over time.
— where this book comes from

Once you have the word, you start seeing it everywhere in the stack. The graph skeleton ranked by a centrality score is a nudge. A file’s importance perturbed by how often you talked about it is a nudge. The rule that a claim must carry a pointer is a nudge on the writer. Chapter 7 walks that whole catalogue. But the place I first learned it — learned it the hard way, in a loop that ran billions of times and punished every mistake — wasn’t a wiki at all. It was a chessboard, in the mid-2000s, and it left receipts. We’ll get there in Chapter 6.

First, the part that “it’s robust” never quite explains: why a chorus of weak signals beats one confident oracle. That’s the next chapter — and it’s the argument that turns a neat design habit into a doctrine you can defend to a skeptic.

02
Part I · The Doctrine

Why a Chorus of Weak Signals Beats One Oracle

“It’s robust” is a claim, not an explanation. The explanation is a shape I first met in a chess evaluation function — and it makes the tuning nightmare optional.

In Chapter 1 I demoted RAG to a hint and claimed the arrangement was robust. This chapter owes you the mechanism, because “robust” on its own is the kind of word people wave at systems they like. The mechanism is specific, it’s borrowed from a domain where it was proven decades ago, and it’s the reason you can stop tuning.

The shape: a linear sum of weak features

Think about how a classical chess engine evaluates a position it can’t search past. It doesn’t have one brilliant judgment. It has a dozen small ones — king safety, pawn structure, mobility, X-ray pressure — each scored small, each nearly worthless on its own, and it sums them.1 Twelve nudges either way.

The interesting question isn’t why that’s modular. It’s why it’s robust.

What that shape buys you isn’t just modularity; it’s robustness to being wrong about the weights. If no single term can dominate, then getting any individual weight off by a factor of two doesn’t break the evaluation — it perturbs it. The system degrades gracefully under misspecification.

That is the whole secret, and it generalises well beyond chess. An aggregate of many weak, diverse signals is less sensitive to any one of them being wrong than a single strong signal ever could be — the same reason an ensemble of mediocre-but-independent learners routinely beats a lone confident model.2 Spread the judgment across many small terms and no single term has to be right. Concentrate it in one oracle and that oracle has to be right, always, or the answer is wrong.

So why does RAG feel like it needs endless tuning?

Because most people use it as the oracle. And that’s the answer to the question that sends engineers to this book in the first place.

RAG’s whole tuning nightmare — chunk size, thresholds, metadata — mostly exists because people use it as the answer. The moment it’s only a hint, it just has to be directionally useful, and the tuning burden mostly evaporates. You didn’t tune RAG better; you gave it a job that doesn’t require tuning.

Here is the claim stated as sharply as I can make it, because it’s falsifiable and it’s the economic heart of the book: a prior needs direction, not calibration. Calibration — getting the exact weight, the exact threshold, the exact chunk boundary right — is the expensive part, and it’s the part an oracle demands. Direction — roughly pointing the right way — is cheap, and it’s all a prior owes you. Demote the component and you swap an expensive requirement for a cheap one. That’s not tuning RAG better. It’s giving it a job that doesn’t need tuning.

Key Insight

The low tuning isn’t magic. The system is built out of nudges, and an ensemble of nudges is forgiving in a way a single authority never is. The RAG-as-oracle crowd tunes obsessively because their one component has to be right.

The asymmetry that makes it safe

Underneath the robustness is an asymmetry of cost, and it’s the sentence I’d put on the wall if I could only keep one.

That’s why the thing is robust. A wrong authority is expensive; a wrong prior is free to ignore.
— the spine of the whole doctrine

An authority’s error is expensive because it’s in the answer — it compounds, it propagates, you have to catch it and unwind it. A prior’s error is cheap because the judge can simply override it — a glance wasted, nothing more. When you design so that the only components allowed to be wrong-and-costly are the deterministic ones (which are wrong far less often, because ground truth is checkable), and everything fuzzy is wrong-but-free, you’ve engineered the failure modes to be affordable. The system is robust because you made being wrong cheap.

Exactly one judge — not a committee

There’s a tempting misreading of “many weak signals”: throw them all in as voters and average. That’s not the doctrine, and the difference matters. This is exactly why I kept RAG out of the toolbelt in the first place.

Letting RAG into the toolbelt would have given it a vote — a second navigator with its own out-of-distribution instincts, pulling against the agent that’s carefully walking the map. Two deciders reintroduce the very problem the doctrine exists to kill: which authority is right? So the rule is strict. Many priors, exactly one judge. The chorus biases; a single synthesiser decides. Add a second decider and you’re back to arbitrating oracles.

Two ways to combine signals

A committee of oracles
  • • Each signal returns an answer and a vote
  • • You tune weights so the votes combine well
  • • A confident wrong voter drags the result
  • • “Which one is right?” is now your problem
A chorus of priors, one judge
  • • Each signal returns a pointer and a tilt
  • • Nothing decides; one model synthesises
  • • A wrong prior is a glance, then it’s gone
  • • The judge owns the decision, alone

And the single-judge shape reconciles with cost rather than fighting it. The expensive, wandering exploration can ride a cheap, read-only scout that freezes a transcript; you still only pay frontier prices for the one senior commit that decides. You get powerful, context-aware retrieval feeding exactly one judgment, without paying for a parliament of them.

The “unreasonably good first pass”

Put it together and you get a property that looks like luck and isn’t. A heterogeneous knowledge base — wildly different domains, no two corpora alike — that’s excellent on the first pass, with near-zero per-domain tuning. People reach for “it just works” to describe that, which explains nothing. What’s actually happening is the eval-function property showing up in a knowledge system: judgment spread across many small, forgiving terms, so no domain’s idiosyncrasy can break the sum.

The RAG-as-oracle team can’t get there. They tune per corpus because their one component must be right, and a weight fitted to one corpus is brittle on the next. That brittleness isn’t a bug in their tuning — it’s the cost of having something that has to be tuned at all.

Key takeaways

  • • A sum of weak priors degrades gracefully; a single oracle breaks.
  • • A prior needs direction, not calibration — so the tuning burden evaporates.
  • • A wrong authority is expensive; a wrong prior is free to ignore.
  • • Many priors, exactly one judge. A second decider brings the oracle problem back.

Robustness first — that’s this chapter. There is a real cost to leaving weights rough, and I’ll pay it honestly in Chapter 8. But before the cost, the craft: a prior only stays forgiving if it stays a nudge, and there are exactly three ways it can stop being one. That’s next.

03
Part I · The Doctrine

Three Rules That Keep a Nudge a Nudge

A prior only stays forgiving while it stays a nudge. There are exactly three ways it stops being one — and a rule to hold each line.

Chapter 2 argued that a chorus of nudges is robust. But robustness is conditional: it holds only while each signal behaves like a nudge. Push a nudge too hard, or too rare, or let it decide, and it quietly turns back into the oracle you were trying to escape. So this chapter is the operating manual — three rules, each guarding one failure mode. I learned all three in a chess loop, where getting them wrong was measured in lost games.

Start with the mistake that taught me the first rule.

If you code an if that fires one board position in a million — really smart, might win you a game — the problem is the rest of the time it just slowed you down.

A nudge is judged not on its best case but on its cost across every case. Hold that thought; it’s the seed of all three rules.

Rule 1 — Frequency: fire often, and cheap

In a chess engine you are bound by CPU cycles and the clock. That brilliant rare term — the clever if that wins one position in a million — costs you on all 999,999 others, and in a loop run billions of times, that’s fatal. So the discipline was: keep the terms cheap and firing often.

Move to an LLM system and it’s tempting to think the rule retires. You’re not cycle-bound anymore. But it doesn’t retire — the scarce resource just moved.

It applies — the scarce resource just moved. The tax now is context and attention. A rare-but-clever heuristic that fires on one package in a thousand but injects 400 tokens of scaffolding into every pass is the exact same mistake: near-zero expected value, guaranteed per-call cost, and the cost is paid in the model’s dilution rather than the CPU’s.

The frequency rule: same mistake, different currency

  Chess engine (2005) LLM retrieval (2026)
Scarce resource CPU cycles / time on the clock Context window & the model’s attention
The tax Every eval call pays for the clever rare term Every pass pays the tokens the rare heuristic injects
The trap An if firing 1 in a million but “really smart” A heuristic firing 1 in a thousand, +400 tokens each pass
The verdict Near-zero expected value, guaranteed per-call cost Identical — cost paid in dilution, not the CPU

My RAG hint passes this test cleanly: cheap, fires on every search, small footprint. The trap to watch for in a modern stack isn’t slow code anymore — it’s the seductive rare feature that quietly eats the attention budget on every pass to earn its keep once in a blue moon.

Rule 2 — Weight-class: advisory, not magnitude-free

I used to tell myself something looser: as long as it stays a nudge, the exact magnitude doesn’t matter. That’s true in the middle and false at the tails, and chess knows exactly why.

Too big and the nudge stops being a nudge — king-safety that can override being a queen up has become a verdict, and now you’re back to a single authority that has to be right. Too small and it never tips even a close comparison, so it’s dead weight that only costs you.

So the real rule is narrower and much more useful than “magnitude doesn’t matter.” A nudge has to stay in the same weight class as its peers — right to within an order of magnitude, not right precisely. That’s an easy target to hit, which is the entire point: you don’t need the number, you need the ballpark.

Takeaway

In a retrieval stack this is concrete: normalise each signal’s score into a comparable range, so no prior can swamp the others. You’re not tuning for the best weight — you’re just keeping everyone in the same weight class.

Rule 3 — Ripple: it never decides; the process amplifies the tip

A nudge that never decides sounds useless. It isn’t — it’s amplified. In chess, a tenth-of-a-pawn difference matters only because the search propagates it up the tree until it flips the move choice at the root.3 The nudge tips a comparison; the search carries the tip.

The nudge never decides — it tips a comparison, and the search amplifies the tip. Your RAG hint does the identical thing one layer up: it doesn’t answer, it changes which page the LLM chooses to walk, and that branch choice ripples into the synthesis.

Same mechanism, one layer up. The hint doesn’t supply the answer; it changes which page looks worth reading, and that branch choice ripples into everything the judge does downstream. Which is why the design rule is short:

Bias a branch point, and let the bigger process carry it or damp it.

The word earns its keep here. A nudge, in the behavioural-economics sense, alters a choice “without forbidding any options or significantly changing economic incentives.”4 Bias, not command. The retrieval nudge is that idea in software: it tilts the choice, and the larger process — minimax in chess, the judging model in the wiki — is what carries the tilt into a decision or throws it away.

One precondition the three rules assume

All three rules take for granted that the thing being judged is settled before the nudge-sum speaks. Score a chess position mid-capture and even a perfectly-behaved nudge becomes noise. Chess has a name for making sure the board is quiet first — and it turns out to be the missing half of the whole doctrine. Chapter 6.

The three rules, as a checklist

  • Frequency — cheap and fires often; mind the attention tax, not just the CPU.
  • Weight-class — within an order of magnitude of its peers; never a verdict, never dead weight.
  • Ripple — never decides; it tips a comparison the larger process amplifies.

That’s the doctrine and its rules. Part I has been theory with chess for illustration. Part II is a single live session where all of it ran at once — three retrievers, each doing exactly one job, and a needle that no amount of grep could ever have found.

04
Part II · One Session, Three Retrievers

The Needle Grep Couldn’t Hit

A regex against the right archive returned zero. The single best record of the whole session surfaced anyway — from a hint. Here is why grep could never have found it, in principle.

Part I was the doctrine. Part II is one session where it all ran at once, and I want to start with the moment that turned it from a design preference into a receipt. Someone was using my stack to reconstruct the history of a chess engine I’d written two decades earlier — the very engine we’ll return to in Chapter 6. What matters here isn’t the chess. It’s the retrieval.

The first grep — a regex against the right archive cluster — returned zero. And yet the best single record in the entire session came back anyway. Not from the grep. From a hint sitting quietly underneath it.

Every load-bearing find came from the RAG hint, not the grep. The entire foundation — the email threads, the internet-chess game log, the perft numbers from the Java rewrite — surfaced from the hints after my first grep returned zero. And the best single record in the whole session, a friend’s warning — “you don’t want to be failing high on every capture” — came out of a hint when my regex returned nothing at all.

I’ll be plain about what that is: this session ran my own experiment for me. I didn’t set out to prove the doctrine. I set out to find some old emails, watched grep whiff, watched the nudge carry the whole reconstruction, and realised I was looking at the cleanest demonstration of the design I’d ever get.

The plumbing: pointers and a scent

The mechanism is exactly the whisper from Chapter 1, and you can see the seam. At the bottom of every search result sits a small block of suggestions — each just a pointer, an essence, a similarity, a hit count. Never the chunk. Never the retrieved text. A pointer and a scent.

search result — footer
rag_suggests:
  - ptr: m560438  essence: "…failing high on every capture…"  sim: 0.71  hits: 3
  - ptr: m618025  essence: "delta-prune margins in qsearch"  sim: 0.68  hits: 2
# advisory — verify before citing, ignore if irrelevant

The blending isn’t happening on the server. The judge does it. The grep results and the hints arrive together, and the model decides what to make of them — which is the doctrine working exactly as specified, just with the seam visible from where the model sits. In practice the regex I send gets simplified and reused inside a similarity search over the raw records as hints, the literal grep runs alongside it, and both land in front of the one judge. Deterministic and fuzzy, combined at the point of judgment, never before.

Why couldn’t grep hit it?

This is the part worth slowing down for, because it’s not a tuning failure. It’s a failure grep can’t fix in principle.

I was grepping stand.?pat|forced to capture|have to capture. Those words do not exist in the 2003 corpus. We never once wrote “stand pat” — the concept lived under entirely different vocabulary. No regex I could write would have found that email, because writing the right regex required already knowing the phrase, which is what I was searching for. The grep couldn’t hit it in principle.

Read that trap carefully, because it generalises. To write the winning regex you must already know the words. But the search is for the words. The knowledge you’d need to phrase the query is the knowledge the query is trying to find. That’s a structural blind spot, not a threshold you set wrong — and no amount of grep craftsmanship closes it.

Key Insight

RAG’s lift over a plain full-text index is marginal in general — and decisive in exactly one place: when vocabulary drifts and the searcher can’t guess the words. Here it had drifted twenty years, across two people’s private idiom.

That’s the whole case for RAG-as-a-hint, and it’s narrower and stronger than the usual pitch. A needle in a haystack — which is exactly where RAG does well. Not because it’s a better search in general (it mostly isn’t, against a good index and a known token), but because it’s aimed straight at grep’s one structural blind spot. RAG-as-a-hint isn’t a hedge I bolted on. It’s a scalpel for a specific wound: the concept you can’t name yet.

An honest gap in the record

One thing I won’t dress up. In the ledger this session reconstructed, there’s a row with no receipt at all: the months I spent chasing that bug back in 2004 exist only in my memory, nowhere in the corpus. The archive kept the warning email and lost the disaster it warned about. I’m stating the shape, not inventing the substance — because a doctrine about knowing what you can and can’t verify should hold itself to the same standard it asks of the machine.

A detail to hold for later

The best hint of the session arrived under a standing label — “advisory, ignore if irrelevant.” The nudge carried its own permission to be declined. That’s not a throwaway; it’s the subject of Chapter 8.

So the needle went to the nudge. But the same session showed the other two retrievers doing their jobs just as cleanly — grep pinning an exact token in one shot, and a deliberately terrible search answered not with rows but with a number. That division of labour is the whole point, and it’s the next chapter.

05
Part II · One Session, Three Retrievers

One Session, Three Retrievers

RAG did the needle. Grep did the exact token. And a deliberately terrible search got answered with a number, not ten thousand rows. Three retrievers, three natures, one judge.

Chapter 4 gave the needle to the nudge. But a nudge that was doing everything would just be a new oracle. The reason the session is a clean demonstration is that the other two retrievers were decisive exactly where the nudge would have been useless — and each did the job its nature fits. Start with the search that went wrong on purpose.

I threw a deliberately sloppy pattern at the archive and it blew out to more than ten thousand results. The tool did not hand me ten thousand useless one-liners. It told me the count, drew a year histogram, and showed me the top senders were spam. In one call I knew my search was bad.

Grep: decisive for exact tokens

Flip the needle case over. Where grep is the right tool, it’s not a hint — it’s a verdict.

The grep was decisive exactly where you’d expect — CCT[ ]?[0-9] returned 37 clean hits and pinned CCT5 in one shot, because that’s a known exact token. Deterministic for ground truth, nudge for the fuzzy. Same split, all the way down.

A known exact token is ground truth. You don’t want a similarity score for it; you want the string, all its occurrences, and nothing invented. The rule of thumb writes itself: known exact token → grep, and trust it as a verdict; drifted concept you can’t name → nudge, and treat it as a prior. Never the reverse. Ask RAG for the exact token and you’ve made a verdict fuzzy; ask grep for the un-nameable concept and you get the zero from Chapter 4.

The same session, in three numbers

37

clean grep hits on an exact token — CCT5 pinned in one shot

10,904

results on a sloppy pattern — returned as a count, not rows

0 → 5

grep hits, then five hints — the nudge speaks when nothing else can

Facets: when the count is the answer

The ten-thousand-result search points at the third retriever, and it comes straight from a human habit I tried to encode.

I tried to build in the human patterns where I’ve noticed them. Looking through a big mail corpus, you’d grep a few things and pipe to wc -l — oh, that’s ten thousand. That’s a rubbish search.

When you search too broadly, a hundred summary rows isn’t what you want. If there are ten thousand answers, what you want to know is that there are ten thousand answers. So the tool encodes the reflex:

The tool didn’t hand me 10,904 useless one-liners — it told me 10,904, gave me the year histogram, and showed me the top senders were spam. That’s the wc -l reflex encoded: the count is the answer to a bad search, and it’s the fastest way to learn your search was bad.

Notice what kind of thing that is. The count isn’t a hint about the corpus — it’s a verdict about the question. A deterministic “you’re asking wrong,” delivered in one call instead of forty. It belongs on the ground-truth side of the doctrine, right next to grep, because a count is a fact and facts don’t get demoted to priors.

The retrieval trio

Here is the whole division of labour on one card. Later chapters point back at it rather than redraw it.

The retrieval trio — a division of labour, not a competition

Retriever Its job When it wins Nature
grep exact tokens / ground truth a known token exists (37 hits → CCT5) verdict — right, or silent
facets / count “you’re asking wrong” the search is too broad (10,904 → histogram) verdict about the question
RAG needle in a haystack vocabulary drift; can’t guess the words prior — loud when nothing else speaks
RAG did the needle. Grep did CCT5. Facets did the “you’re asking wrong.”

The dynamic range of a good nudge

One more thing I noticed, and I’ll flag my uncertainty about it honestly.

Every time the grep returned zero, five hints appeared. When the pattern was too broad and blew out to facets mode, hints were mostly absent — loud when nothing else is speaking, quiet when the deterministic layer already has the answer.

Whether that’s designed or emergent I genuinely can’t tell you — I’d have to go read my own code. But it behaves the way the nudge should, which is the point. It’s the ripple and weight-class rules from Chapter 3 showing up in the wild: the prior steps forward only when it can actually tip something, and steps back when the deterministic layer has already decided. A signal with that dynamic range is a good citizen of the chorus.

Bottom Line

Deterministic code owned ground truth (the token) and owned “you’re asking wrong” (the count). The fuzzy prior owned the needle. One judge blended them — no eval harness, no per-signal tuning. Each layer did the job its nature fits.

That’s the doctrine, demonstrated. Part III steps back to ask where it came from, why it’s everywhere in the stack, and what it honestly costs. It starts on the chessboard where I learned it — and where I’d been crediting the wrong half of the mechanism for years.

06
Part III · Origins, Variants & the Deliberate Choice

Where the Doctrine Was Born

I learned the nudge on a Negamax chess engine twenty years ago. And for twenty years I told the story with the wrong half credited.

Every rule in Part I came out of a loop that ran billions of times and punished every wasted cycle. This is that loop — a chess engine I wrote in the mid-2000s. The brief for this chapter is narrow: enough of the engine to ground the doctrine, one concrete receipt, and the one insight that took me two decades and a re-reading of my own archive to get right. Not a chess tutorial.

Reading Crafty’s mind mid-game

Start with the moment that proves the twelve-small-terms eval wasn’t a story I told after the fact. I was watching my engine play a real opponent on the internet chess server, and I was watching it through Crafty’s eyes — Crafty being the strong open engine I benchmarked against.5

Watching my engine play through Crafty’s eyes, I could see Crafty’s score run hot in the tactics — it was cranking its king-safety term — while mine stayed dead steady.

I was reading an opponent’s eval weightings off its score curve in a live game. Crafty’s number spiked exactly when the position got sharp, because it was leaning hard on king safety; mine didn’t. That contrast is the whole subject of this book, caught in the act — and it’s the thing that made me look again at why mine stayed steady.

The receipt

For grounding, here is what the engine actually was — from my own records, not my memory.

ChompsterX, mid-2000s — from the archive

~1.8M

moves/sec on perft, after the Java rewrite

100–150k

nodes/sec in the middlegame

~12

small positional terms in the eval

Negamax search;3 a quiescence search I was proud of; hash tables; principal-variation search with fail-high detection held at the root; null-move; delta-pruning in the quiescence search; benchmarked against Crafty on an Athlon; played on the internet chess server against real opponents.

That’s the concrete floor under everything Part I claimed. I’m keeping the chess shallow on purpose; if you want the definitions of negamax or quiescence search, the references point you at them. What I care about is the eval, and one thing I got wrong about it for years.

Twelve nudges either way

I first started doing nudges on my Negamax chess engine. Evaluating a static board — king safety, X-ray attacks — you check maybe twelve things and score them all pretty small. It’s just twelve nudges either way.

Everything in Part I was already sitting in that eval function in 2005. A linear sum of small terms, none allowed to dominate, robust to being wrong about any single weight. I didn’t have the word “doctrine” for it then. I just had a chess engine that played steadily and an instinct that the exact magnitudes didn’t much matter as long as each stayed a nudge.

The half I’d missed

When I first told this story — even earlier in the conversation that became this book — I credited that steadiness to the eval. To the twelve small terms. That’s wrong, and getting it right is the missing half of the whole doctrine.

A sum of small positional nudges is only valid on a quiet board. Apply king-safety and X-ray terms to a position mid-capture and they stop being nudges and become noise, because the material about to swing dominates everything. Quiescence search is what guarantees the board is genuinely static before the nudge-sum is allowed to speak.

My engine stayed steady in the tactics not because its eval was calm but because its quiescence search refused to evaluate until the captures were resolved.6 I’d even said the key word without noticing it: a static board that’s known to be static. The quiescence search is the “known.”

Key Insight

The nudge rule was never just “keep the terms small.” It was always “keep them small, and only apply them once the unit is settled.” The three rules of Chapter 3 quietly assumed a fourth precondition — and this is it.

Semantic closure is your quiescence

This maps onto a knowledge system exactly, and it’s the practical payload of the chapter for anyone building ingest.

Semantic closure is your quiescence. You close the branch first — the whole thread, the whole project-plus-conversation — so the unit is settled, and only then let the small judgments sum. Quiescence is to chess eval what bundle-closure is to ingest: don’t evaluate until the thing stops moving.

Concretely: don’t run your significance-and-edge nudges on a raw, still-arriving record any more than you’d score king safety with a queen hanging. Close the unit — wait until the thread is complete, the bundle is whole, the thing has stopped moving — and then let the small judgments sum. If you evaluate mid-capture, your best-behaved nudge is just noise, because something bigger is about to swing. Settle the unit before you score it.

Don’t evaluate until the thing stops moving.

A provenance side-note, hedged

The chess-programming friend I was trading delta-prune margins with was named Joel. If that’s the same Joel Veness whose name turns up a lot in reinforcement-learning research a decade later, it’s a lovely footnote.7 I’m not claiming the identity — I’m flagging the possibility and leaving it there. That warning email of his, the one grep couldn’t find, cost me months; there’s a whole separate story in how the eval term he was warning me about behaves in the live, timed setting of an actual game, but that’s a different piece.

Origins settled, and the missing half restored. The next chapter zooms back out to the modern stack, where the same move — a small prior that biases and never decides — is running in half a dozen places you might not have noticed.

07
Part III · Origins, Variants & the Deliberate Choice

The Same Move, All Over the Stack

The RAG hint is one nudge in a family. Once you have the word, you find the same move running in half a dozen places — and a couple you’d been calling something else.

In Chapter 1 I promised the nudge was a signature, not a one-off. This is where I make good on it. The flagship — the RAG hint of Part II — is a single entry in a catalogue. Here’s the rest of it, and the point isn’t to show off the stack; it’s to show that the doctrine composes. Every one of these is deterministic ground truth, a chorus of priors, and one judge — the split from Chapter 1, running again.

A nudge you’ve been running without naming it

Take the wiki’s graph skeleton. It gets ranked by a centrality score — the usual link-graph arithmetic that decides which nodes look structurally important. Nobody calls that a “nudge.” But it is one: a prior on which nodes matter, biasing the ordering, never deciding the answer. The judge is still free to walk past a high-ranked node or promote a low-ranked one. Once the word is in your hand, you start relabelling things you built years ago.

Graph centrality on the skeleton

A prior on importance. It tilts which nodes get looked at first. The judge decides what to do with the tilt.

Mention-count — the author’s attention

Rank a file by how often you talked about it in the surrounding conversations — a free behavioural importance signal, but only if it perturbs the ranking rather than commands it, and only after masking the structural files that are loud because they’re scaffolding. A prior, not a verdict.

The RAG hint

The flagship of Part II. Pointers and a scent for the needle grep can’t name. One entry in the family, not the whole family.

Significance-must-carry-a-pointer

A nudge aimed at the writer, not the reader: it biases how a claim gets recorded — every significant statement drags a resolvable pointer along — without dictating the content.

What every one of these shares is the strict division of labour from Chapter 1: deterministic code decides truth, many weak priors bias, exactly one model judges. I won’t restate that split — I’m pointing at it. The catalogue is just the same three legs wearing different clothes.

How does this fit the tools I’ve already built?

Two ideas I’ve written about elsewhere turn out to be the frame around this one, and it’s worth naming the joins.

The first is the pendulum: use AI for judgment and deterministic code for ground truth, and be willing to move a component either way when the evidence says so. The nudge layer is the “many priors” half of that pendulum — the advisory inputs that sit on the judgment side, while grep and counts sit on the ground-truth side. Same pendulum; this book just names the parts and gives the priors their rules.

The second is a rule I hold for every AI sub-tool: it should return a claim attached to a verbatim exhibit and a resolvable pointer, plus a confession of what it couldn’t verify — a witness you can check, not an oracle you must trust.

A nudge is the retrieval-layer version of that humility. It hands over a pointer and a scent, and explicitly does not ask to be trusted as an answer.

Look back at the plumbing from Chapter 4 — a pointer, an essence, a similarity, a hit count — and you’ll see it’s a witness-shaped return, not an oracle-shaped one. It offers you something to go and check. It doesn’t ask for your trust. That’s not a coincidence; it’s the same instinct expressed at a different layer.

The ratchet: a prior that keeps being right becomes structure

There’s one more join worth drawing, because it keeps the doctrine from ossifying. Navigating a named link is home turf for a model in a way that steering a similarity search never is, which is why the wikilink walk is a first-class retrieval axis sitting right beside the RAG nudge. And when a fuzzy hit keeps proving load-bearing — the same rhyme surfacing again and again — it becomes a candidate edge the graph absorbs, so the index quietly cleans itself.

That gives the doctrine a built-in ratchet: a prior that keeps finding the same thing gets promoted into a deterministic edge, moving from the fuzzy side of the ledger to the ground-truth side. The chorus doesn’t just bias the judge — over time it hands its most reliable members up to determinism, and shrinks its own job by design.

Myth vs Reality

Myth

More signals means more tuning. Every new retriever multiplies the eval-harness burden — another weight to fit, another threshold to chase.

Reality

More nudges plus one judge means more robustness, not more tuning — because none of them has to be right. Adding a well-behaved prior costs a glance, not a calibration cycle.

So the doctrine scales the friendly way: each new prior you add makes the picture richer and the sum more forgiving, not the tuning harder. Which raises the obvious question a careful reader has been holding since Chapter 2 — if leaving the weights rough is so robust, what does it cost? It costs something real, and the last chapter pays for it honestly.

08
Part III · Origins, Variants & the Deliberate Choice

Deliberately Under-Tuned

Leaving the weights rough is a choice, not a free lunch. Here’s the cost, the rule for when to pay it, and the checklist for building a stack that doesn’t need tuning.

The whole book has argued that a chorus of rough nudges is robust. A careful reader has been waiting for the bill, and it’s real. This chapter pays it — because a doctrine that pretends its trade-off away isn’t credible, and chess, which taught me the doctrine, also taught me the cost. First, though, the smallest and most elegant piece of the whole design: the way a nudge carries its own permission to be ignored.

The hint that carries its own opt-out

Look again at the label on that best-in-session hint from Chapter 4.

The wiki phrases its hint as “advisory — verify before citing, ignore if irrelevant.” You built a stand-pat into the nudge. The hint arrives carrying explicit permission to decline it.

This is the mechanical reason a wrong prior is free to ignore, from Chapter 2 — made literal. The signal doesn’t just happen to be override-able; it arrives with a sentence telling the judge it’s allowed to walk away. The opt-out is in the signal itself. That right-to-decline — the “advisory equals ignorable” clause — is a genuine mechanism in its own right, a “stand pat” that deserves its own treatment, and it’s the subject of a forthcoming piece; here it’s enough to notice that the nudge was built to be refused.

Remember

A prior is safe to leave rough partly because it’s explicitly declinable. Give every hint an opt-out, and a wrong one costs a glance instead of a correction.

The honest trade

Now the bill. Chess did not stay hand-nudged, and I’d be selling you something false if I pretended rough weights are strictly better.

Engines got a great deal stronger once people stopped hand-nudging and started fitting the weights against real game outcomes — Texel tuning, which fits the evaluation to millions of labelled positions by logistic regression,8 then neural evaluations that learn the whole function outright.9 Fitted weights beat rough ones. That’s not in dispute.

“Leave the magnitudes rough” is the right call for robustness and wrong for peak strength. Deliberately under-tuning the nudges is correct because a fitted weight is fitted to the distribution you fitted it on, and your distribution is “everything.” You’re trading twenty Elo you don’t need for generalisation you can’t live without. That’s a real design choice — but it’s a choice, not a free lunch.

Say it plainly: under-tuning is a choice. A fitted weight is superb on the distribution it was fitted to and brittle off it. If your distribution is fixed and narrow, fit away. If your distribution is “everything” — a wildly heterogeneous corpus you need to be excellent on across the board, on the first pass, with no per-domain tuning — then rough weights that generalise beat sharp weights that overfit. This honesty is what makes the doctrine credible. I’m not selling a free lunch; I’m selling a trade that’s correct for a specific and common goal.

So which should you do?

The decision rule is short enough to keep in your head.

Tune, or under-tune?

Tune — if you’re in a rating war

One fixed distribution, optimised to the last point. A fitted weight beats a rough one on that distribution every time. Leaderboards, single-domain systems, benchmarks — fit the weights.

Under-tune — if your corpus is “everything”

Heterogeneous, needs to be excellent on the first pass with zero per-domain tuning. Leave the weights rough on purpose. Trade the twenty Elo you don’t need for the generalisation you can’t live without.

And the disqualifier, stated cleanly so nobody adopts this into the wrong job: if you’re chasing a leaderboard, this doctrine costs you points. Know that going in. It’s a robustness play, not a peak-strength play.

The build checklist

Here is the whole doctrine as something you can build against — a tight checklist, not a timeline.

A tuning-free hybrid retrieval stack

  1. Deterministic floor. Code owns ground truth — grep for exact tokens, a count/histogram for “you’re asking wrong.”
  2. Every fuzzy signal is a ranked hint that never answers. Pointers and a scent — never chunks, never verdicts.
  3. Exactly one judge. One model synthesises. No committee of voters.
  4. Each nudge obeys the three rules. Frequent and cheap; same weight class (within an order of magnitude); amplifiable, never decisive.
  5. Settle the unit before you score it. Quiescence for chess; semantic closure for ingest. Don’t evaluate until the thing stops moving.
  6. Give every hint an explicit opt-out. “Advisory — ignore if irrelevant.” A wrong prior must be free to decline.
  7. Leave the weights rough — on purpose. Unless you’re in a rating war.
  8. Ratchet. A prior that keeps finding the same rhyme gets promoted to a deterministic edge.

Small signals, one judge

That’s the doctrine. It cost me months to learn the first time, on a chessboard, from a friendly Wednesday email I didn’t recognise as load-bearing until twenty years and one lucky retrieval later. The engine that taught it to me stayed steady in the tactics because it refused to judge an unsettled board — and its eval was a dozen small terms, no one of them allowed to decide.

Twenty years on, the same shape is the quiet architecture under a knowledge system that needs almost no tuning. And the reason it needs almost no tuning is not that I found better weights. It’s that nothing in the chorus was ever allowed to decide.

A wrong authority is expensive; a wrong prior is free to ignore.

Key takeaways

  • • Give every nudge an opt-out; a wrong prior must be free to ignore.
  • • Under-tuning is a deliberate trade: peak strength for generalisation.
  • • Rating war → tune. Corpus is “everything” → under-tune.
  • • The whole stack: deterministic truth + many nudges + one judge.

Building a retrieval stack that has to be right on the first pass?

Demote every fuzzy signal to a nudge, hand them all to one judge, and stop tuning the combination. That’s the work we do at LeverageAI — governed AI systems where deterministic code owns the truth and the model owns the judgment.

Small signals, one judge. Let’s design yours.

REF
Sources & Evidence

References & Sources

The evidence base behind every claim — primary research, industry analysis, and technical specifications

Research Methodology

This ebook draws on primary research from standards bodies, independent research firms, enterprise technology vendors, and consulting firms. Statistics cited throughout have been cross-referenced against primary sources.

Frameworks and interpretive analysis developed by Scott Farrell / LeverageAI are listed separately below — these represent the practitioner lens through which external research is interpreted, and are not cited inline to avoid self-promotional appearance.

LeverageAI / Scott Farrell — Practitioner Frameworks

The interpretive frameworks, architectural patterns, and practitioner analysis in this ebook were developed through enterprise AI transformation consulting. The articles below are the underlying thinking behind those frameworks. They are listed here for transparency and further exploration — not cited inline, as this is the author's own analytical voice.

Scott Farrell — RAG Demoted to a Sensor

demote RAG from substrate to one retrieval axis returning typed shaped results, never raw chunks

https://leverageai.com.au/rag-demoted-to-a-sensor/

Scott Farrell — Don't Migrate Your RAG to a Wiki

choosing the memory substrate per corpus rather than defaulting one way

https://leverageai.com.au/dont-migrate-your-rag-to-a-wiki/

Scott Farrell — The Scout and the Senior

a cheap read-only scout explores and freezes the transcript, a frontier senior inherits it and emits one governed decision

https://leverageai.com.au/the-scout-and-the-senior-swap-the-brain-keep-the-transcript/

Scott Farrell — The Author's Attention

mention-count is a behavioural importance signal that must perturb the ranking, not command it — a prior, not a verdict, with structural files masked as stopwords

https://leverageai.com.au/the-authors-attention-ranking-files-by-how-often-you-talked-about-them/

Scott Farrell — Text Is the Model's Home Turf

use AI for judgment and deterministic code for ground truth, and move a component either direction when the evidence says so

https://leverageai.com.au/text-is-the-models-home-turf-a-field-note-on-the-pendulum-between-code-and-judgment/

Scott Farrell — Witness Not Oracle

AI sub-tools should return a claim plus verbatim exhibit, resolvable pointer, and a confession of what could not be verified — a witness you can check, not an oracle you must trust

https://leverageai.com.au/witness-not-oracle/

Scott Farrell — Why LLMs Can Walk a Wiki but Can't Drive a RAG

navigating named links is home turf for the model, making wikilink walk a first-class retrieval axis beside similarity search

https://leverageai.com.au/why-llms-can-walk-a-wiki-but-cant-drive-a-rag/

Scott Farrell — The Index Is the Data

load-bearing similarity hits become candidate edges the self-cleaning wiki graph absorbs, shrinking RAG's job over time

https://leverageai.com.au/the-index-is-the-data-how-a-self-cleaning-wiki-graph-out-thinks-rag/

Primary Research & Standards Bodies

Chess Programming Wiki — Evaluation [1]

classical static evaluation is a linear combination of weighted positional features summed to a centipawn score

https://www.chessprogramming.org/Evaluation

Thomas G. Dietterich — Ensemble Methods in Machine Learning [2]

combining diverse better-than-random hypotheses reduces variance and is less sensitive to any single component's error

https://link.springer.com/chapter/10.1007/3-540-45014-9_1

Chess Programming Wiki — Negamax and Alpha-Beta [3]

minimax search propagates leaf evaluations to the root so a small eval delta can change the chosen move

https://www.chessprogramming.org/Negamax

Richard H. Thaler & Cass R. Sunstein — Nudge: Improving Decisions About Health, Wealth, and Happiness [4]

a nudge alters behaviour without forbidding options or significantly changing incentives

https://en.wikipedia.org/wiki/Nudge_(book)

Robert Hyatt / Chess Programming Wiki — Crafty [5]

Crafty is a well-known open-source chess engine used here as the reference opponent whose evaluation could be observed

https://www.chessprogramming.org/Crafty

Chess Programming Wiki — Quiescence Search [6]

a quiescence search extends the search through captures and checks until the position is quiet, so the static evaluation is only trusted on a settled board

https://www.chessprogramming.org/Quiescence_Search

reinforcement-learning research record — Joel Veness / MC-AIXI-CTW [7]

a researcher named Joel Veness appears in later reinforcement-learning work; the identity with the chess correspondent is a hedged side-note, not a verified claim

https://en.wikipedia.org/wiki/AIXI

Peter Österlund / Chess Programming Wiki — Texel's Tuning Method [8]

tuning evaluation weights against real game results by minimising error to a sigmoid of the score measurably strengthens an engine

https://www.chessprogramming.org/Texel%27s_Tuning_Method

Chess Programming Wiki — NNUE [9]

an efficiently-updatable neural network learns the evaluation function directly, the strongest and most distribution-fitted approach

https://www.chessprogramming.org/NNUE

About This Reference List

Compiled July 2026. All URLs verified at time of compilation. Regulatory documents and standards specifications are subject to revision — check primary sources for the most current versions.

Some links to academic papers and vendor research may require free registration. Government and standards body publications are freely accessible.

↑ Prev Next ↓