<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Memory on Programmer.ie: Modern AI programming</title>
    <link>http://programmer.ie/books/memory/</link>
    <description>Recent content in Memory on Programmer.ie: Modern AI programming</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Sat, 19 Sep 2026 05:00:07 +0100</lastBuildDate>
    <atom:link href="http://programmer.ie/books/memory/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>What Remembering Means</title>
      <link>http://programmer.ie/books/memory/01-chapter/</link>
      <pubDate>Mon, 14 Sep 2026 05:00:01 +0100</pubDate>
      <guid>http://programmer.ie/books/memory/01-chapter/</guid>
      <description>&lt;p&gt;Consider a small software team and the assistant that sits alongside it. In June the team spends a week arguing about where to keep its event log. Someone tries keeping it in SQLite. The prototype works, then slows down under concurrent writes. The team decides to move the event store to PostgreSQL, recording the decision as &lt;code&gt;adr-007&lt;/code&gt; on 11 July. By August nobody thinks about this any more; it is just how the system works.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Measurement Instrument</title>
      <link>http://programmer.ie/books/memory/02-chapter/</link>
      <pubDate>Mon, 14 Sep 2026 05:00:02 +0100</pubDate>
      <guid>http://programmer.ie/books/memory/02-chapter/</guid>
      <description>&lt;p&gt;Chapter 1 defined memory behaviourally: the past must change what the system does now, ideally improving it. This chapter defines how that claim is measured. The distinction matters from the first paragraph, because the word &amp;ldquo;instrument&amp;rdquo; will recur throughout the book and it never means the memory architecture. The memory system is one product of this book. The Memory Measurement Instrument — the apparatus used to determine whether that system remembers — is the other.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The RAG Baseline</title>
      <link>http://programmer.ie/books/memory/03-chapter/</link>
      <pubDate>Mon, 14 Sep 2026 05:00:03 +0100</pubDate>
      <guid>http://programmer.ie/books/memory/03-chapter/</guid>
      <description>&lt;p&gt;The October contributor from Chapter 1 asks for a second service with its own event log. The July decision is still in the repository. So are the contention report, the benchmark, the earlier SQLite setup, and a great deal of discussion that no longer matters to this task. Before inventing a new kind of memory, there is an obvious possibility to test: find the useful parts of that history and let a capable model read them.&lt;/p&gt;</description>
    </item>
    <item>
      <title>From Retrieval to Persistent Understanding</title>
      <link>http://programmer.ie/books/memory/04-chapter/</link>
      <pubDate>Mon, 14 Sep 2026 05:00:04 +0100</pubDate>
      <guid>http://programmer.ie/books/memory/04-chapter/</guid>
      <description>&lt;p&gt;Chapter 3 built the strongest conventional retrieval the book could assemble and left it standing. That result constrains this chapter before it begins. Any claim of the form &lt;em&gt;retrieval finds text but does not understand it&lt;/em&gt; would be false about the system Chapter 3 actually built: a hybrid retriever, a cross-encoder reranker, and a capable reader already perform substantial interpretation at query time. The reader distinguishes proposals from decisions when the passages allow it, follows rationale across artifacts, and abstains when evidence runs out. That is understanding, deployed per query and discarded afterwards.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Pathways Through Memory</title>
      <link>http://programmer.ie/books/memory/05-chapter/</link>
      <pubDate>Mon, 14 Sep 2026 05:00:05 +0100</pubDate>
      <guid>http://programmer.ie/books/memory/05-chapter/</guid>
      <description>&lt;p&gt;Chapter 4 set out to give the system a map. Instead of reconstructing meaning from raw passages at every query, it keeps interpretation: entities, relationships, claims, communities, each traceable back to the artifact it came from. Whether that map pays for itself is Chapter 4&amp;rsquo;s own question and Chapter 4&amp;rsquo;s own experiment; nothing here assumes its verdict.&lt;/p&gt;&#xA;&lt;p&gt;This chapter asks a question that arises either way. Suppose the map exists. A map is a structure to search. Remembering is not a search — or at least, human remembering does not feel like one. Something occurs to you, and something else follows from it, and the thing you needed arrives three steps later by a route you did not plan.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Memory Nexus</title>
      <link>http://programmer.ie/books/memory/06-chapter/</link>
      <pubDate>Sat, 19 Sep 2026 05:00:06 +0100</pubDate>
      <guid>http://programmer.ie/books/memory/06-chapter/</guid>
      <description>&lt;p&gt;Chapters 3 through 5 leave the system with an embarrassment of options. Chapter 3 built hybrid retrieval over raw history with reranking. Chapter 4 added a persistent derived graph with several query modes. Chapter 5 added cue-conditioned associative propagation over that graph. Each chapter earned its mechanism conditionally, and each left the cheaper layers available underneath. The question none of them answers is the one a deployed system meets first:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Why</title>
      <link>http://programmer.ie/books/memory/07-chapter/</link>
      <pubDate>Sat, 19 Sep 2026 05:00:07 +0100</pubDate>
      <guid>http://programmer.ie/books/memory/07-chapter/</guid>
      <description>&lt;p&gt;Chapters 3 through 6 leave the system with a working pipeline and an&#xA;uncomfortable surplus. Chapter 3 retrieves raw history. Chapter 4&#xA;derives a persistent graph from it. Chapter 5 propagates activation&#xA;across that graph. Chapter 6 chooses between these mechanisms. A&#xA;candidate memory reaches the reader, the reader writes an answer, and&#xA;the answer contains claims about the project. This chapter asks the&#xA;book&amp;rsquo;s third question — &lt;em&gt;why did we decide or believe this?&lt;/em&gt; — in the&#xA;form the pipeline forces:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Is It Still True?</title>
      <link>http://programmer.ie/books/memory/08-chapter/</link>
      <pubDate>Mon, 14 Sep 2026 05:00:08 +0100</pubDate>
      <guid>http://programmer.ie/books/memory/08-chapter/</guid>
      <description>&lt;h2 id=&#34;the-same-events-a-different-story&#34;&gt;The same events, a different story&lt;/h2&gt;&#xA;&lt;p&gt;Consider three remembered events from the migration history:&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;&#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;A = benchmark detects SQLite contention&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;B = team decides to adopt PostgreSQL&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;C = PostgreSQL deployment completes&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;As an unordered set, &lt;code&gt;{A, B, C}&lt;/code&gt;, the system knows all three happened. As a trajectory, &lt;code&gt;A → B → C&lt;/code&gt;, it can say something stronger: the benchmark preceded the decision, and the decision preceded the deployment. Now hold the contents constant and change only the ordering to &lt;code&gt;B → A → C&lt;/code&gt;. Nothing was added and nothing was removed, yet the benchmark can no longer have motivated the decision. It may corroborate the decision, strengthen confidence in it, or justify retaining it — but a later measurement cannot have been the reason for an earlier choice.&lt;/p&gt;</description>
    </item>
    <item>
      <title>What Did We Leave Unfinished?</title>
      <link>http://programmer.ie/books/memory/09-chapter/</link>
      <pubDate>Mon, 14 Sep 2026 05:00:09 +0100</pubDate>
      <guid>http://programmer.ie/books/memory/09-chapter/</guid>
      <description>&lt;p&gt;Chapter 8 closed the first half with a system that maintains belief through time. That system is a good historian. This chapter shows it is a poor colleague. A historian answers questions about the past. A colleague knows what the past left undone — and the system as built so far cannot tell a closed chapter from an open obligation.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-migration-is-finished-the-work-is-not&#34;&gt;The migration is finished. The work is not.&lt;/h2&gt;&#xA;&lt;p&gt;Extend the running migration history past the July decision:&lt;/p&gt;</description>
    </item>
    <item>
      <title>What Matters Right Now?</title>
      <link>http://programmer.ie/books/memory/10-chapter/</link>
      <pubDate>Mon, 14 Sep 2026 05:00:10 +0100</pubDate>
      <guid>http://programmer.ie/books/memory/10-chapter/</guid>
      <description>&lt;p&gt;Chapter 9 finished the first arc. Seven layers now stand between raw history and an answer: retrieval, a persistent graph, associative pathways, routing, support lineage, temporal validity, open-loop status. Each earned its place against the failure class it claimed to fix. None has been asked the question that decides whether any of it was worth building.&lt;/p&gt;&#xA;&lt;p&gt;A context window is small and history is not. Every turn, something chooses which fraction of the past the model is allowed to see. So far that choice has been made by one mechanism: similarity to the words of the request. The enrichment of Chapters 4 to 9 sits behind that gate, and a gate that only understands wording cannot use it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Consequences Nobody Wrote Down</title>
      <link>http://programmer.ie/books/memory/11-chapter/</link>
      <pubDate>Mon, 14 Sep 2026 05:00:11 +0100</pubDate>
      <guid>http://programmer.ie/books/memory/11-chapter/</guid>
      <description>&lt;p&gt;Chapter 9 handles work the history states: promises, assignments, follow-ups with an established expectation behind them. This chapter pushes Question 5 past conventional task tracking, to consequences nobody wrote down. The migration broke assumptions encoded in fixtures, documentation, and configuration that no session mentions. A memory that tracks only stated intentions will report the open list as empty while the project quietly rots. Whether anything can be done about that — reliably, without inventing obligations — is treated here as a difficult hypothesis, not a capability.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Does Better Context Change Behaviour?</title>
      <link>http://programmer.ie/books/memory/12-chapter/</link>
      <pubDate>Mon, 14 Sep 2026 05:00:12 +0100</pubDate>
      <guid>http://programmer.ie/books/memory/12-chapter/</guid>
      <description>&lt;p&gt;Chapter 1 defined memory behaviourally: remove the past, rerun the present task, and ask whether behaviour changed and whether the change was an improvement. Eleven chapters later, that test has never actually been run. Chapters 3 to 11 built a pipeline — retrieval, structure, association, routing, lineage, temporal state, open loops, frames, derived consequences — and measured each stage against ledgers of what the context contains. During development, a later assembly experiment, reported in Chapter 14, exposed the measurement anomaly that motivates the behavioural experiment reported here: at a 768-token budget the assembled context holds required-evidence recall of only 0.72 yet the reader answers at 0.955 key-claim coverage, better than the full raw context at 0.879. Either the ledger overstates what the task needs, or the reader answers without the evidence the book calls required, or the metric gives false confidence. Answer quality alone cannot distinguish those cases. This chapter builds the instrument that can.&lt;/p&gt;</description>
    </item>
    <item>
      <title>When the Frame Is Wrong</title>
      <link>http://programmer.ie/books/memory/13-chapter/</link>
      <pubDate>Mon, 14 Sep 2026 05:00:13 +0100</pubDate>
      <guid>http://programmer.ie/books/memory/13-chapter/</guid>
      <description>&lt;p&gt;Chapter 12 ended with leverage: wrong memory averages 0.042 with two harmful tasks, so a layer that decides what the model may see can cause the harmful action rather than merely failing to prevent it. The next question is when the system should trust its own framing that strongly. Chapter 10 specified the missing piece without building it — a frame that carries how it was established, with conditioning that weakens as the evidence degrades toward query-only retrieval. This chapter builds that piece and measures whether it earns its place.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Context Is a Bottleneck</title>
      <link>http://programmer.ie/books/memory/14-chapter/</link>
      <pubDate>Mon, 14 Sep 2026 05:00:14 +0100</pubDate>
      <guid>http://programmer.ie/books/memory/14-chapter/</guid>
      <description>&lt;p&gt;Chapter 10 took selection as far as a frozen run has taken it: which memories the present work needs, admitted by an explicit, traceable policy at a fixed budget. This chapter shows selection is insufficient, because admission assumes the admitted memories fit. They increasingly do not — and the Chapter 10 run puts a number on the shortfall, audited for fairness in &lt;code&gt;planning/chapter-14-oracle-audit.md&lt;/code&gt; rather than taken on trust. Its ledger oracle reaches perfect required-evidence recall on a mean of 587 estimated tokens; the best real condition spends 1,161 to reach 0.901 recall. Rendered with the source headers and validity marks the reader actually sees, the figures become roughly 805 against 1,505 — the gap survives rendering. The auditable oracle defined in this chapter — content plus the disagreements, licence bearers, and marks a trustworthy system must carry — stands near 696 counted (1,060 rendered) tokens, still roughly 40% below the practical bundle. Roughly half the admitted budget, under a correct frame and over a good candidate pool, goes to evidence the work does not need: the practical bundle&amp;rsquo;s distractor admission sits near 0.45. That gap is not a selection failure. Selection chose those items for defensible reasons; what is missing is everything that happens between choosing a set and handing a model a context. The system now holds events, beliefs, provenance chains, validity intervals, intentions, derived loops, rules, and prior failures — and the obvious solution, putting all relevant memory into the prompt, fails in ways that are structural rather than incidental. Context is a bottleneck, and what passes through it must be assembled, not merely selected.&lt;/p&gt;</description>
    </item>
    <item>
      <title>What Should Memory Keep?</title>
      <link>http://programmer.ie/books/memory/15-chapter/</link>
      <pubDate>Mon, 14 Sep 2026 05:00:15 +0100</pubDate>
      <guid>http://programmer.ie/books/memory/15-chapter/</guid>
      <description>&lt;p&gt;Chapter 14 ended with an unexpectedly useful result. Once the candidate set was already good, elaborate assembly did not uncover a large reservoir of duplicate text waiting to be removed. Extractive deduplication saved only eighteen of 1,174 counted tokens on the frozen C5 bundles. The larger problem was competition: many individually defensible memories still occupied the same scarce working context, and the system had to decide what should continue to matter for the present task.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Learning From Experience</title>
      <link>http://programmer.ie/books/memory/16-chapter/</link>
      <pubDate>Mon, 14 Sep 2026 05:00:16 +0100</pubDate>
      <guid>http://programmer.ie/books/memory/16-chapter/</guid>
      <description>&lt;p&gt;Chapter 15 asked how a long-lived memory system keeps accumulated history manageable without destroying what later work may still need. That remains memory management: the system changes which retained experiences are represented, available, or allowed to compete.&lt;/p&gt;&#xA;&lt;p&gt;This chapter crosses a different boundary.&lt;/p&gt;&#xA;&lt;p&gt;Suppose the system performs a migration, observes that it succeeded, and then changes what it will retrieve next time. Suppose it notices that the same sequence of checked actions has worked repeatedly and turns that sequence into a reusable method. The system is no longer only asking what the past contains or which part matters now.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Remembering System</title>
      <link>http://programmer.ie/books/memory/17-chapter/</link>
      <pubDate>Mon, 14 Sep 2026 05:00:17 +0100</pubDate>
      <guid>http://programmer.ie/books/memory/17-chapter/</guid>
      <description>&lt;p&gt;The book began with a deliberately strict definition:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Memory is when retained past experience changes what the system does now.&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;p&gt;Everything else — vector stores, graphs, temporal state, context selection, consolidation, procedures — is mechanism.&lt;/p&gt;&#xA;&lt;p&gt;That distinction changes what a final chapter should do.&lt;/p&gt;&#xA;&lt;p&gt;The original plan saved the behavioural test for the twentieth chapter and imagined a full stack in front of it: events, claims, provenance, belief, open loops, policy, context assembly, consolidation, compression, forgetting, outcome adaptation, procedures, then behaviour. The experiments did not follow that plan. Selection moved earlier. Context assembly was measured before long-term compression. Derived state produced both benefits and hazards. Simple mechanisms repeatedly matched or beat ambitious ones. Chapter 12 was moved forward specifically to test the behavioural definition before the book accumulated more machinery.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
