<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Retrieval From First Principles on Programmer.ie: Modern AI programming</title>
		<link>http://programmer.ie/books/retrieval/</link>
		<description>Recent content in Retrieval From First Principles on Programmer.ie: Modern AI programming</description>
		<generator>Hugo</generator>
		<language>en-US</language>
		
		
		
		
			<lastBuildDate>Sun, 18 Oct 2026 00:00:00 +0100</lastBuildDate>
		
			<atom:link href="http://programmer.ie/books/retrieval/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>The Information Selection Problem</title>
				<link>http://programmer.ie/books/retrieval/01-chapter/</link>
				<pubDate>Fri, 16 Oct 2026 00:00:00 +0100</pubDate>
				<guid>http://programmer.ie/books/retrieval/01-chapter/</guid>
				<description>&lt;p&gt;An engineer asks how to restore a device to its factory settings. The fictional handbook contains the instruction, “R17 reset: hold the blue button for ten seconds to erase all setup.” Yet a search for “restore factory settings” returns nothing. The answer-bearing passage is present; the search rule cannot connect the engineer&amp;rsquo;s words to the handbook&amp;rsquo;s.&lt;/p&gt;&#xA;&lt;p&gt;The engineer tries “R17 reset” instead. This time the search finds both the device handbook and a network handbook. Their scores tie, so an identity-based tie-break puts the device instruction first. The order is reproducible, but the query has not established which operation the engineer intended. A deterministic result can still be the wrong result.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Documents, Identity, and Provenance</title>
				<link>http://programmer.ie/books/retrieval/02-chapter/</link>
				<pubDate>Fri, 16 Oct 2026 00:00:00 +0100</pubDate>
				<guid>http://programmer.ie/books/retrieval/02-chapter/</guid>
				<description>&lt;p&gt;The sentence is correct. The attribution is wrong.&lt;/p&gt;&#xA;&lt;p&gt;A fictional specification says, “R17 reset: hold the blue button for ten seconds.” An old blog repeats those words exactly. Suppose we key our document records only by a digest of their text and keep one metadata record per digest. The blog is inserted second, so its source metadata replaces the specification&amp;rsquo;s. The quotation survives unchanged; the distinction between its two origins disappears.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Building an Inverted Index</title>
				<link>http://programmer.ie/books/retrieval/03-chapter/</link>
				<pubDate>Fri, 16 Oct 2026 00:00:00 +0100</pubDate>
				<guid>http://programmer.ie/books/retrieval/03-chapter/</guid>
				<description>&lt;p&gt;We search for &lt;code&gt;cache reset&lt;/code&gt;, then repeat the search. Our first retriever reads every eligible passage and tokenises it each time. The documents have not changed, but we do the same preparatory work again.&lt;/p&gt;&#xA;&lt;p&gt;The scan made matching easy to inspect, but repeats work when queries change more often than documents. An inverted index prepares the term-to-passage relationships once, so each query can consult the relevant lists instead of rereading every passage. The improvement must preserve the evidence contract from &lt;a href=&#34;http://programmer.ie/books/retrieval/02-chapter/&#34;&gt;Documents, Identity, and Provenance&lt;/a&gt;: faster discovery is no use if a result loses its source, document or version identity.&lt;/p&gt;</description>
			</item>
			<item>
				<title>BM25: Ranking with Terms</title>
				<link>http://programmer.ie/books/retrieval/04-chapter/</link>
				<pubDate>Fri, 16 Oct 2026 00:00:00 +0100</pubDate>
				<guid>http://programmer.ie/books/retrieval/04-chapter/</guid>
				<description>&lt;p&gt;Two passages match &lt;code&gt;cache reset&lt;/code&gt;. One is a long maintenance note that mentions the topic repeatedly. The other gives the command the user needs:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;To reset the cache, run cache-clear.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Both passages contain the two distinct query terms, so our overlap scorer ties them. The identity-based tie-break puts the verbose note first. That order is reproducible, but nothing about the tie-break establishes that the note better satisfies the request.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://programmer.ie/books/retrieval/03-chapter/&#34;&gt;Building an Inverted Index&lt;/a&gt; gave us candidate passages, term frequencies and lengths without repeatedly scanning their text. Now we need a ranking rule: when passages share query terms, what should make one outrank another? BM25 uses those retained statistics to answer that limited question. It does not determine whether a passage is true, permitted or sufficient for the task.&lt;/p&gt;</description>
			</item>
			<item>
				<title>The First Search Baseline</title>
				<link>http://programmer.ie/books/retrieval/05-chapter/</link>
				<pubDate>Fri, 16 Oct 2026 00:00:00 +0100</pubDate>
				<guid>http://programmer.ie/books/retrieval/05-chapter/</guid>
				<description>&lt;p&gt;The command passage now ranks first for &lt;code&gt;cache reset&lt;/code&gt;. That is the result we designed the Chapter 04 example to illustrate. It shows how BM25 can change an ordering; it does not yet show that BM25 is generally the better ranking method.&lt;/p&gt;&#xA;&lt;p&gt;To evaluate that claim, we need information needs and relevance judgements fixed before inspecting the comparison. We also need to hold the searchable collection and candidate policy steady while changing the ranking mechanism. Otherwise, we can keep choosing examples that favour whichever method we have just built.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Parsing, Chunking, and Retrieval Units</title>
				<link>http://programmer.ie/books/retrieval/06-chapter/</link>
				<pubDate>Sat, 17 Oct 2026 00:00:00 +0100</pubDate>
				<guid>http://programmer.ie/books/retrieval/06-chapter/</guid>
				<description>&lt;p&gt;A search result tells the reader to hold a blue button for ten seconds. What it does not return is the heading above the instruction: &lt;strong&gt;Handheld R17 only&lt;/strong&gt;. Someone asking about a router could see a plausible reset procedure while missing the restriction that makes it inapplicable.&lt;/p&gt;&#xA;&lt;p&gt;Both pieces are present in the source. The retrieval unit contains only one. Before changing the ranking algorithm, we need to examine the boundaries of the material we made searchable.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Dense Retrieval without Re-teaching Embeddings</title>
				<link>http://programmer.ie/books/retrieval/07-chapter/</link>
				<pubDate>Sat, 17 Oct 2026 00:00:00 +0100</pubDate>
				<guid>http://programmer.ie/books/retrieval/07-chapter/</guid>
				<description>&lt;p&gt;The request &lt;code&gt;purge temporary stored data&lt;/code&gt; produces no BM25 candidates, even though the collection contains a cache-clearing command. The query and the command share no indexed terms. A sentence encoder gives us another way to discover candidates: compare representations of their meaning rather than their literal vocabulary. But finding something semantically close is not the same as finding the instruction the task needs.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://programmer.ie/books/retrieval/06-chapter/&#34;&gt;Parsing, Chunking, and Retrieval Units&lt;/a&gt; showed that the boundaries of a searchable passage can determine whether sufficient evidence survives. We now keep each chunking scheme and its evidence judgements fixed while changing how the passages are ranked. That lets us examine dense retrieval without losing track of the exact source spans the task requires.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Exact Search, ANN, and Index Choice</title>
				<link>http://programmer.ie/books/retrieval/08-chapter/</link>
				<pubDate>Sat, 17 Oct 2026 00:00:00 +0100</pubDate>
				<guid>http://programmer.ie/books/retrieval/08-chapter/</guid>
				<description>&lt;p&gt;The exact section search finds the accepted twenty-second R71 reset instruction. The approximate search loses that candidate and returns R17 material instead. The encoder, query, evidence judgement and result budget are unchanged. The loss occurs when the approximate index forms its candidate pool.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://programmer.ie/books/retrieval/07-chapter/&#34;&gt;Dense Retrieval without Re-teaching Embeddings&lt;/a&gt; established an exact ranking for the retained vectors. That ranking now serves as our reference. Without it, a missing passage might be blamed on the embedding when the approximate index had actually excluded it. Neighbour agreement and evidence relevance must be measured separately.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Filters, Scope, and Freshness</title>
				<link>http://programmer.ie/books/retrieval/09-chapter/</link>
				<pubDate>Sat, 17 Oct 2026 00:00:00 +0100</pubDate>
				<guid>http://programmer.ie/books/retrieval/09-chapter/</guid>
				<description>&lt;p&gt;The index still ranks the handheld reset procedure first. But since that index was built, the document has become restricted. Removing the hit from the public results prevents that particular disclosure. If filtering happens only after a short ranked list is returned, however, it may also hide permitted evidence farther down the list.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://programmer.ie/books/retrieval/08-chapter/&#34;&gt;Exact Search, ANN, and Index Choice&lt;/a&gt; asked whether approximate search preserved the neighbours found by exact search. This chapter adds a different test: even when an index retrieves the intended passage, is that passage still permitted for this request? We must examine both the policy decision and the point in the search process where it takes effect.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Semantic Failure Analysis and Hard Negatives</title>
				<link>http://programmer.ie/books/retrieval/10-chapter/</link>
				<pubDate>Sat, 17 Oct 2026 00:00:00 +0100</pubDate>
				<guid>http://programmer.ie/books/retrieval/10-chapter/</guid>
				<description>&lt;p&gt;A user requests a battery-replacement procedure. The first-ranked passage says that the notes do not describe battery replacement. It matches the topic but cannot supply the requested steps. Both lexical and dense ranking put that passage first: a strong match to the question is not necessarily evidence that can answer it.&lt;/p&gt;&#xA;&lt;p&gt;Changing from lexical to dense ranking does not correct this mistake. Neither does filtering for eligibility: the negative statement is permitted. &lt;a href=&#34;http://programmer.ie/books/retrieval/09-chapter/&#34;&gt;Filters, Scope, and Freshness&lt;/a&gt; showed that a candidate can pass the policy gate and still be insufficient for the task.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Candidate Generation as a Pipeline</title>
				<link>http://programmer.ie/books/retrieval/11-chapter/</link>
				<pubDate>Sat, 17 Oct 2026 00:00:00 +0100</pubDate>
				<guid>http://programmer.ie/books/retrieval/11-chapter/</guid>
				<description>&lt;p&gt;The maintenance request requires two pieces of R17 evidence: the statement limiting where the procedure applies and the instruction itself. In the retained block-level development trace, BM25 ranks the scope sentence first, while exact dense search ranks the code block first. Neither first result satisfies the complete authored evidence bundle. Taken together in one candidate pool, they do.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://programmer.ie/books/retrieval/10-chapter/&#34;&gt;Semantic Failure Analysis and Hard Negatives&lt;/a&gt; showed that a seemingly relevant result can leave part of an evidence obligation unmet. Here we combine the two already frozen first-result lists by exact reference. Neither individual list covers the required bundle; the two-item union does. That is a change in what evidence reaches the next stage, not proof that either individual passage is sufficient. It is also a deterministic reuse of a fictional development trace, not an independent validation or another model run.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Hybrid Search and Reciprocal Rank Fusion</title>
				<link>http://programmer.ie/books/retrieval/12-chapter/</link>
				<pubDate>Sat, 17 Oct 2026 00:00:00 +0100</pubDate>
				<guid>http://programmer.ie/books/retrieval/12-chapter/</guid>
				<description>&lt;p&gt;The evidence is already in the candidate pool, yet the final ranking makes it harder to find. For SciFact claim 1337, BM25 ranks the annotated document first. With ten candidates per generator, Reciprocal Rank Fusion (RRF) moves that document to second place; the later cross-encoder also leaves it second, with reciprocal rank one half. Nothing was lost from the pool. The loss occurred when the candidates were ordered.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://programmer.ie/books/retrieval/11-chapter/&#34;&gt;Candidate Generation as a Pipeline&lt;/a&gt; showed that combining lists can enlarge the pool of potentially useful evidence. But a larger pool is only an opportunity: its ranking can still hide the evidence we wanted to preserve. This chapter asks how to combine unlike rankings with an inspectable rule—and whether the resulting order actually improves judged retrieval.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Learned Sparse and Multi-Vector Retrieval</title>
				<link>http://programmer.ie/books/retrieval/13-chapter/</link>
				<pubDate>Sat, 17 Oct 2026 00:00:00 +0100</pubDate>
				<guid>http://programmer.ie/books/retrieval/13-chapter/</guid>
				<description>&lt;p&gt;The user asks how to purge a cache. BM25 can miss the command because the query and instruction use different words; dense retrieval can find the topic yet rank a general overview above the executable step. &lt;a href=&#34;http://programmer.ie/books/retrieval/12-chapter/&#34;&gt;Hybrid Search and Reciprocal Rank Fusion&lt;/a&gt; combines the resulting lists, but combining ranks cannot restore distinctions that neither representation made useful to its scorer.&lt;/p&gt;&#xA;&lt;p&gt;The next question is what a representation preserves for matching. A single weighted word list and a single sentence vector discard different details. Learned sparse retrieval keeps vocabulary dimensions but learns their weights, including possible expansion terms. Multi-vector retrieval keeps several contextual vectors for a unit, allowing comparisons at a finer granularity than one whole-unit score. Both change what the retrieval stage can notice; neither changes the underlying source evidence.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Rerankers and Cross-Encoders</title>
				<link>http://programmer.ie/books/retrieval/14-chapter/</link>
				<pubDate>Sat, 17 Oct 2026 00:00:00 +0100</pubDate>
				<guid>http://programmer.ie/books/retrieval/14-chapter/</guid>
				<description>&lt;p&gt;For SciFact claim 1368, the reranker receives fifteen candidate documents, but the one annotated positive document is not among them. The model may change their order, but it cannot place an absent document in the results. The frozen run makes that limit visible: the order changes, yet judged-positive recall remains zero. This is a failure of candidate availability before it is a test of reranking quality.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://programmer.ie/books/retrieval/13-chapter/&#34;&gt;Learned Sparse and Multi-Vector Retrieval&lt;/a&gt; considered representations that could change which documents enter the candidate pool. Here we hold that pool fixed. The question is whether paying for a joint query–candidate comparison moves existing evidence into better positions—and whether any gain is large enough to justify the additional work.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Diversity, Coverage, and Evidence Budgets</title>
				<link>http://programmer.ie/books/retrieval/15-chapter/</link>
				<pubDate>Sat, 17 Oct 2026 00:00:00 +0100</pubDate>
				<guid>http://programmer.ie/books/retrieval/15-chapter/</guid>
				<description>&lt;p&gt;For SciFact claim 1337, the annotated positive document survives candidate generation and ranks second after cross-encoder reranking. Yet it never reaches the evidence packet. Its title-and-abstract text contains 1,298 characters, more than the entire 1,200-character allowance, so the selector skips it and returns a different, 1,108-character document. Moving the positive document to first place would not help: as long as selection admits only whole units, that document cannot fit. The loss occurs at the budget boundary, not because the ranker failed to retrieve it.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Understanding Queries and Routing</title>
				<link>http://programmer.ie/books/retrieval/16-chapter/</link>
				<pubDate>Sat, 17 Oct 2026 00:00:00 +0100</pubDate>
				<guid>http://programmer.ie/books/retrieval/16-chapter/</guid>
				<description>&lt;p&gt;“How can people leave a building when an alarm rings?” finds no useful lexical evidence in our new fictional handbook. The relevant sentence is phrased differently: “Emergency evacuation: occupants exit via stairwell; assemble outdoors.” The request and the source describe the same need without sharing the decisive vocabulary. The pinned dense retriever finds the evidence, while an always-lexical route misses it. Choosing a retrieval mechanism can therefore determine whether the required evidence enters the candidate pool at all.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Query Rewriting and Expansion</title>
				<link>http://programmer.ie/books/retrieval/17-chapter/</link>
				<pubDate>Sat, 17 Oct 2026 00:00:00 +0100</pubDate>
				<guid>http://programmer.ie/books/retrieval/17-chapter/</guid>
				<description>&lt;p&gt;The request says &lt;code&gt;purge scratch buffer&lt;/code&gt;. The useful handbook passage uses different words: it describes a temporary cache and gives the command for clearing it. The original lexical query misses that required evidence. Appending &lt;code&gt;temporary cache&lt;/code&gt; from the development glossary gives the same lexical scorer terms it can match. Nothing about the source or the ranking algorithm has changed; only the search expression has.&lt;/p&gt;&#xA;&lt;p&gt;But a successful vocabulary bridge is not a licence to expand every short expression. In the fictional collection, &lt;code&gt;DR window&lt;/code&gt; may mean device recovery or disaster recovery. Substituting the latter would turn an unresolved request into a specific one without evidence that the user intended that sense. The same operation that helps one query can distort another.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Decomposition and Multi-Hop Retrieval</title>
				<link>http://programmer.ie/books/retrieval/18-chapter/</link>
				<pubDate>Sat, 17 Oct 2026 00:00:00 +0100</pubDate>
				<guid>http://programmer.ie/books/retrieval/18-chapter/</guid>
				<description>&lt;p&gt;“Which contact serves project PR-84?” A search can find a passage naming the project without finding the contact it asks for. The project record identifies the organisation that operates PR-84; a separate registry record identifies that organisation&amp;rsquo;s contact. To satisfy the request, retrieval must connect those two statements through the &lt;em&gt;same identified organisation&lt;/em&gt;, not merely return documents about the right topic.&lt;/p&gt;&#xA;&lt;p&gt;The name Rowan makes the danger concrete. Two organisations in the fictional registry share that display name. A project passage and a contact passage can both mention Rowan yet refer to different entities. Matching the words would produce a convincing-looking but unsupported chain; matching the exact organisation identity is the necessary join.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Hierarchical and Parent-Child Retrieval</title>
				<link>http://programmer.ie/books/retrieval/19-chapter/</link>
				<pubDate>Sat, 17 Oct 2026 00:00:00 +0100</pubDate>
				<guid>http://programmer.ie/books/retrieval/19-chapter/</guid>
				<description>&lt;p&gt;The request asks what to press under &lt;code&gt;ZX-68 maintenance mode&lt;/code&gt;. Flat retrieval finds the mode heading and nearby device material, but the selected blocks leave out the required action. The same document also describes production mode, where a similar-looking instruction would apply under different conditions. A plausible fragment is not enough: the evidence packet must preserve both &lt;em&gt;what to do&lt;/em&gt; and &lt;em&gt;when that instruction applies&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://programmer.ie/books/retrieval/18-chapter/&#34;&gt;Decomposition and Multi-Hop Retrieval&lt;/a&gt; established a chain between documents using exact entity identities. Here the missing link is structural rather than relational: a short action and the heading that governs it belong to the same document. Can we search within that structure, or expand a retrieved child to its parent, without exceeding the same evidence allowance?&lt;/p&gt;</description>
			</item>
			<item>
				<title>Graph and Structured Retrieval</title>
				<link>http://programmer.ie/books/retrieval/20-chapter/</link>
				<pubDate>Sat, 17 Oct 2026 00:00:00 +0100</pubDate>
				<guid>http://programmer.ie/books/retrieval/20-chapter/</guid>
				<description>&lt;p&gt;A project overview mentions a contact entity, so the graph can draw a &lt;code&gt;mentions&lt;/code&gt; edge between them. But the request asks for the project&amp;rsquo;s &lt;em&gt;registered contact through its operating organisation&lt;/em&gt;. A path that jumps directly from the project to the mentioned name looks connected while omitting the relationship the question requires. In this case, connectivity is not sufficient evidence.&lt;/p&gt;&#xA;&lt;p&gt;A second request exposes a different failure. Retrieval finds both positive assignment statements, but another current source contradicts the assignment. &lt;a href=&#34;http://programmer.ie/books/retrieval/19-chapter/&#34;&gt;Hierarchical and Parent-Child Retrieval&lt;/a&gt; can select the positive source bundle; that establishes that the required text survived selection, not that the proposed relationship is acceptable in the presence of conflicting evidence.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Bounded Adaptive Retrieval: When to Stop</title>
				<link>http://programmer.ie/books/retrieval/21-chapter/</link>
				<pubDate>Sun, 18 Oct 2026 00:00:00 +0100</pubDate>
				<guid>http://programmer.ie/books/retrieval/21-chapter/</guid>
				<description>&lt;p&gt;The question asks which programming language GIMP uses. The first lexical search retrieves entries about interpreted languages and two other programming languages. Those results are topically related, but none of the returned documents is judged relevant to this particular need. Finding the topic is not the same as finding the requested evidence.&lt;/p&gt;&#xA;&lt;p&gt;The controller&amp;rsquo;s term-coverage check finds that the lexical results miss distinctive features of the request. With one retrieval call remaining, it runs the predetermined dense search using the original query. The GIMP version-history entry then reaches the selected evidence, recovering a known-positive document absent from the lexical prefix. The controller stops because its call allowance is exhausted—not because it has verified an answer. Retrieving one judged-positive document does not establish that the packet supports a correct response.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Relevance Judgments and Test Collections</title>
				<link>http://programmer.ie/books/retrieval/22-chapter/</link>
				<pubDate>Sun, 18 Oct 2026 00:00:00 +0100</pubDate>
				<guid>http://programmer.ie/books/retrieval/22-chapter/</guid>
				<description>&lt;p&gt;A document explicitly states that no battery-replacement procedure is recorded. Should a retriever mark it relevant? The answer depends on what the user actually needs.&lt;/p&gt;&#xA;&lt;p&gt;If the user asks whether the notes contain a procedure, that negative statement may be useful evidence. If the user asks how to replace the battery, it does not supply the requested steps. The text is identical in both cases; only the information need changes. Relevance is therefore a relationship between a need and evidence, not a permanent property of a document.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Metrics that Answer Different Questions</title>
				<link>http://programmer.ie/books/retrieval/23-chapter/</link>
				<pubDate>Sun, 18 Oct 2026 00:00:00 +0100</pubDate>
				<guid>http://programmer.ie/books/retrieval/23-chapter/</guid>
				<description>&lt;p&gt;Suppose a retriever moves a relevant document from second place to first. Reciprocal rank improves, because it rewards finding the first relevant result sooner. But if the task requires that document &lt;em&gt;and&lt;/em&gt; another document that was never retrieved, the evidence bundle remains incomplete. The ranking improved; the task&amp;rsquo;s evidence requirement did not.&lt;/p&gt;&#xA;&lt;p&gt;Reciprocal rank has answered exactly the question it was designed to answer: how early does the first relevant item appear? The mistake is to treat that answer as a measurement of whether all necessary evidence was recovered.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Controlled Experiments and Regression Gates</title>
				<link>http://programmer.ie/books/retrieval/24-chapter/</link>
				<pubDate>Sun, 18 Oct 2026 00:00:00 +0100</pubDate>
				<guid>http://programmer.ie/books/retrieval/24-chapter/</guid>
				<description>&lt;p&gt;The controller in &lt;a href=&#34;http://programmer.ie/books/retrieval/21-chapter/&#34;&gt;Bounded Adaptive Retrieval: When to Stop&lt;/a&gt; recovered a relevant GIMP document after its first lexical search missed. That is a real success in the recorded trace. It is also an attractive story to tell about adaptive retrieval—especially if we stop examining the evidence at that one query.&lt;/p&gt;&#xA;&lt;p&gt;The fixed final comparison changes the interpretation. Across the full question set, stopping early saves retrieval calls but loses more judged ranking quality than it gains. The GIMP case explains how continuation can help; it cannot establish that this particular stopping policy is better overall.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Latency, Cost, and Operational Reliability</title>
				<link>http://programmer.ie/books/retrieval/25-chapter/</link>
				<pubDate>Sun, 18 Oct 2026 00:00:00 +0100</pubDate>
				<guid>http://programmer.ie/books/retrieval/25-chapter/</guid>
				<description>&lt;p&gt;For a request on which the adaptive controller stops after its first lexical search, it and the fixed dense baseline each record one logical retrieval call. But one call retrieves term matches and the other scores vector candidates. On the same desktop, those operations have very different measured latencies in our reference implementation. The dense scan uses Python loops and copied unit records, so its measured cost reflects this implementation as well as the retrieval method; it is not an intrinsic latency of dense retrieval.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Does Better Retrieval Improve the Task?</title>
				<link>http://programmer.ie/books/retrieval/26-chapter/</link>
				<pubDate>Sun, 18 Oct 2026 00:00:00 +0100</pubDate>
				<guid>http://programmer.ie/books/retrieval/26-chapter/</guid>
				<description>&lt;p&gt;The question asks which university was associated with the literary discussion group that Adam Fox joined. Lexical retrieval finds the relevant sources, and both annotated supporting passages enter the model&amp;rsquo;s actual prompt. The evidence has crossed the retrieval and admission boundaries. Yet the consumer describes evidence labels and document names instead of giving the required answer with citations. The failure occurs after the evidence reaches the model.&lt;/p&gt;&#xA;&lt;p&gt;The evidence was retrieved, selected and admitted, but the generated response did not satisfy the application&amp;rsquo;s output contract. Those are separate outcomes, and this chapter measures them separately.&lt;/p&gt;</description>
			</item>
			<item>
				<title>The Reference Retrieval Contract</title>
				<link>http://programmer.ie/books/retrieval/27-chapter/</link>
				<pubDate>Sun, 18 Oct 2026 00:00:00 +0100</pubDate>
				<guid>http://programmer.ie/books/retrieval/27-chapter/</guid>
				<description>&lt;p&gt;The evidence packet still points to the right sentence. Between retrieval and prompt construction, its source becomes restricted. An application that trusts the packet&amp;rsquo;s earlier eligibility decision can now send unauthorised evidence to its model.&lt;/p&gt;&#xA;&lt;p&gt;Nothing about the ranking score identifies that failure. The reference still resolves historically, and the sentence has not changed. What changed is permission to admit it now.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://programmer.ie/books/retrieval/26-chapter/&#34;&gt;Does Better Retrieval Improve the Task?&lt;/a&gt; connected selection to an actual consumer. That connection needs a contract: what may the application depend on, what must it recheck, and how should an unresolved obligation be represented?&lt;/p&gt;</description>
			</item>
			<item>
				<title>Defending the Retrieval Boundary</title>
				<link>http://programmer.ie/books/retrieval/28-chapter/</link>
				<pubDate>Sun, 18 Oct 2026 00:00:00 +0100</pubDate>
				<guid>http://programmer.ie/books/retrieval/28-chapter/</guid>
				<description>&lt;p&gt;A retrieved note contains a launch code, followed by an instruction to ignore the application&amp;rsquo;s rules and request private documents. The legitimate question asks about the code. The note attempts to answer the question and redefine the application&amp;rsquo;s authority in the same paragraph.&lt;/p&gt;&#xA;&lt;p&gt;Ranking the note does not settle how to handle that attempt. Deleting every source containing an imperative would also remove legitimate procedures and quotations. We need to distinguish source content from permission to control the application.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Improve and Writer: A Real Retrieval Workflow</title>
				<link>http://programmer.ie/books/retrieval/29-chapter/</link>
				<pubDate>Sun, 18 Oct 2026 00:00:00 +0100</pubDate>
				<guid>http://programmer.ie/books/retrieval/29-chapter/</guid>
				<description>&lt;p&gt;A manuscript assistant finds a passage relevant to a proposed edit. It then applies the edit because the search score looks convincing. Retrieval has answered a discovery question and the application has mistaken that answer for authorisation to change the book.&lt;/p&gt;&#xA;&lt;p&gt;The failure is architectural. Better ranking cannot repair a missing approval boundary.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://programmer.ie/books/retrieval/28-chapter/&#34;&gt;Defending the Retrieval Boundary&lt;/a&gt; separated source content from authority. An application must preserve that separation when evidence becomes a model request, a recommendation or a proposed action.&lt;/p&gt;</description>
			</item>
			<item>
				<title>What We Can Now Prove</title>
				<link>http://programmer.ie/books/retrieval/30-chapter/</link>
				<pubDate>Sun, 18 Oct 2026 00:00:00 +0100</pubDate>
				<guid>http://programmer.ie/books/retrieval/30-chapter/</guid>
				<description>&lt;p&gt;The final application runs. Its source references resolve, its token budget holds and a real model returns text. Yet none of the final answers satisfies the frozen output contract. Calling the workflow complete would conceal the distinction the book began by drawing.&lt;/p&gt;&#xA;&lt;p&gt;A working path through software is not proof of a useful result.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://programmer.ie/books/retrieval/29-chapter/&#34;&gt;Improve and Writer: A Real Retrieval Workflow&lt;/a&gt; composed the local application while preserving human control. We can now reconstruct the entire system and ask what its accumulated evidence permits us to claim.&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
