Chapter 05 of 17

Pathways Through Memory

Concepts

Chapter 5 β€” Pathways Through Memory

Source: 05-chapter.md

What this chapter is really about

Underneath the spreading-activation machinery, this chapter is about what kind of object a memory system is. Chapters 3 and 4 both treat memory as a store to be queried: the query is outside, the memory is inside, and retrieval is a comparison across that boundary. This chapter proposes that the store is also a medium β€” that recall is something which happens in the structure rather than to it β€” and then discovers that the proposal is only weakly supported on its own fixture.

The deeper theme is the epistemics of routes. The chapter’s hardest intellectual work is not the propagation rule; it is insisting that four quantities which all look like “how strong is this connection” are different things (semantic relation, association strength, evidence confidence, activation) and that collapsing any two is a category error with practical consequences. The hidden question: when a system reaches a memory by travelling, what has it learned? The answer the chapter defends is: only that the memory was reachable. Not that it is relevant, not that it is true, not that the route is support. A path is retrieval causality, not justification.

The chapter also quietly carries the book’s first genuinely self-modifying mechanism, and refuses to turn it on. That refusal β€” with a working implementation sitting behind a flag and a demonstration of exactly how it fails β€” is the most honest thing in the chapter.

Current thesis

Explicit claims

  • Useful memories can have weak direct similarity to a cue and strong reachability from it; similarity retrieval has a systematic blind spot that better embeddings do not fix, because reachability is a property of the path, not the item.
  • The relevant neighbourhood is conditioned by the active cue, not by entity identity (encoding specificity, recast as engineering).
  • Association strength is retrieval priority, not epistemic confidence. Repeated recall never raises a claim’s truth.
  • Four quantities stay separate: semantic relation, association strength, evidence confidence, per-query activation. Query-relative relevance, authority, and recency are further distinct.
  • Activation must decay or the connected component becomes “relevant”; unconstrained spreading activation retrieves everything.
  • A retrieval trace answers why did this become active, which is a different question from why should I believe it.
  • Book result (fixture, retrieval-level, runs/ch5-20260919-e5/): cue-conditioned propagation raises source recall 0.850 β†’ 0.900 (0.773 β†’ 0.864 on indirect cases) at ~3 points of precision and ~6 context tokens, without degrading direct cases. Unconditioned spreading and PPR lose precision and gain nothing on indirect cases.
  • Book result: the shuffled-edge control drops recall to 0.675, below the no-propagation floor β€” the edges carry information.
  • Book result: threshold and fan division buy the precision; lateral inhibition contributes nothing measurable (0.350 vs 0.352); removing decay costs a third of recall; fully unconstrained propagation is worse on every axis at 11,509 edge traversals.
  • Book result: branch separation for same-entity cues happens at seeding, not during propagation; conditioning separates branches slightly worse than plain spreading.
  • Book result: frequency-driven reinforcement drives a fabricated edge to the weight ceiling in six rounds; outcome-gating with evidence gates reverses it; neither prevents the wrong memory being admitted.
  • Adaptive association state is an append-only overlay on an immutable base, replayable and rollbackable; this is asserted in the run record, not claimed in prose.
  • Co-occurrence is not usefulness and not independent corroboration; echoes carry low evidence confidence and are refused reinforcement.

Implied claims

  • That the memory graph is the right substrate for association at all β€” as opposed to associations over raw passages, over claims only, or over an entirely separate associative index. The chapter inherits Chapter 4’s node inventory without asking whether a different structure would propagate better.
  • That a single scalar per edge can carry retrieval priority. Association may be directional and relation-typed (a SUPERSEDES edge should probably transmit differently forwards and backwards), and the implementation treats almost every edge as symmetric.
  • That the cue is a string. Everything downstream assumes the cue is text to be tokenised; a cue that is a task state, a partial plan, or a previous answer is not representable.
  • That retrieval-level metrics predict answer-level outcomes. The entire experimental result is about which sources are admitted; the chapter’s own handoff admits this is unverified.
  • That per-query activation should be discarded. Nothing carries over between cues in the same session, which is a design choice presented as an invariant.

Not yet established

  • That any of this survives at scale. Every number is from a 73-node, 101-edge hand-built graph. The counter-intuitive deep-propagation-improves-precision result is explicitly flagged as possibly a small-graph artifact.
  • That propagation beats seeding by enough to justify itself. The no-propagation floor is within five recall points and has the best precision of any condition.
  • That the Chapter 4 adapter works on real GraphRAG output. Implemented, unit-tested against a stub, never run against an index.
  • That cue conditioning’s advantage is real rather than a lexical accident of the fixture’s edge descriptions.
  • That outcome-gating is safe. It was shown to contain one specific pathology on one fixture; MemEvoBench-style drift over many updates was not run.

What the chapter already gives us

  • The four-quantity separation. Relation / association / evidence confidence / activation, enforced in the type system rather than in prose. This is reusable architecture and the book’s clearest statement of “priority is not belief”.
  • Retrieval causality as a named concept. A trace explains retrieval; provenance explains belief. Naming the distinction prevents the most seductive confusion in graph memory β€” that a well-travelled route is evidence.
  • The path-recall / source-recall gap as a diagnostic. It localises failure to traversal or to selection. Without it, both read as “missed it”. This is the single most transferable measurement idea in the chapter.
  • The shuffled-edge control. Degree-preserving rewiring as the test of whether structure carried information. Cheap, decisive, and applicable to every later graph mechanism.
  • The no-propagation floor as a first-class condition. Making “do nothing clever” a scored baseline rather than a rhetorical foil, licensed by A-MEM’s genuine alternative hypothesis.
  • Staged adaptation with a refused mechanism implemented. Frequency reinforcement exists in the code, is labelled refused, is flagged by health checks, and is used only to demonstrate the failure. Implementing what you refuse is a strong epistemic habit.
  • Append-only association state. Base graph plus ordered update log, with replay and rollback asserted. Solves “invisible mutable memory” before it appears.
  • Constraints-over-cleverness as a measured finding, not a maxim: three independent ablation families (this chapter’s, SYNAPSE’s, MemORAI’s) agree.

Where the current treatment stops

  • The chapter measures which sources get admitted and reasons as though that settles memory quality. It never shows a reader consuming an associative selection, so the entire argument runs one layer above where the book’s definition of memory lives (behaviour change).
  • Association weights are structural priors chosen by the author of the fixture. The chapter never asks where a non-toy system would get them β€” from co-occurrence (refused), from extraction confidence (conflated with evidence), from relation type (unexplored), or from outcomes (deferred to Ch 18). This is a real hole: Stage A presupposes weights it does not derive.
  • Cue conditioning is lexical overlap between cue and edge description. The chapter admits the naivety but does not consider that this makes the mechanism a description-quality test as much as a conditioning test β€” the edges with good descriptions win.
  • The selection step (fusing activation, seed similarity, degree with fixed weights 0.6/0.3/0.1) is where the clearest observed failure occurs, and it receives one sentence. Those three weights are an unexamined retrieval policy sitting inside an experiment about propagation.
  • Inhibition is dismissed on one fixture at one scale. The mechanism’s whole purpose is arbitrating competition, and a 73-node graph with degree 2.8 may simply never create the competition it exists to arbitrate.
  • “Cycles terminate” is demonstrated but the cost of cycles β€” activation recirculating and inflating a node that sits on a loop β€” is never measured separately from termination.

The deeper territory

  • Reachability as a third retrieval primitive. The book has similarity (Ch 3) and structure (Ch 4). This chapter adds reachability-under-decay, which is neither. It is worth asking whether these are three primitives or one: similarity is reachability in embedding space at zero hops, structure is reachability at one hop with binary weights. If so, the book’s retrieval story is a single parameterised family and the chapters are points in it.
  • The seeding/propagation ratio as a corpus statistic. The finding that seeding does most of the work is probably not a fact about the mechanism but a fact about the fixture’s diameter. On a graph where evidence is reliably four hops from any plausible seed, the ratio must invert. That suggests a corpus measurement the book does not yet have: the distribution of useful-hop-distance in real project history. If it is mostly zero, associative memory is a niche mechanism; if it is mostly two or three, it is core. Nobody has measured this, and it decides the chapter.
  • Activation as a discarded resource. Per-query activation is thrown away by design, to keep evaluation independent. But between related queries in one session, that discarded state is exactly what a human would carry β€” the residual warmth that makes the second question easier. The book has deliberately forbidden itself the mechanism most likely to make associative memory pay, in order to protect its experimental hygiene. That tension deserves naming rather than resolving.
  • What a path is evidence of. The chapter says a path is evidence for retrieval causality and not for truth. But there is a third possibility it does not name: a path may be evidence about the extractor. A route that repeatedly proves useless is a signal about the derived layer that produced it, not about retrieval and not about the world. Routing that signal back to Chapter 4 rather than into association weights may be the more valuable use of outcome data.
  • Refusal as architecture. The chapter implements frequency reinforcement in order to refuse it. Generalised: a memory system’s refusals are part of its specification, and an unimplemented refusal is an untested one. This may be a book-wide principle.

Concepts worth developing

Reachability distance as a corpus property, not a system property

Idea. Define, for a corpus and a question set, the distribution of hops between the best available seed and the required evidence. Call it the corpus’s associative depth. It is measurable from the ledger without building any retrieval system.

Why it matters. It converts “does associative memory help?” from a system question into a corpus question answerable in advance. A corpus with depth concentrated at zero cannot reward propagation however good the propagation is β€” which is very likely why this chapter’s gains are five points. It would also let the book state when to build this layer rather than whether.

What it needs. A ledger-side computation over expected_sources and the derived graph; a comparison of synthetic and real corpora, since the synthetic generator almost certainly produces shallower associations than real history does.

Route utility as a signal about extraction, not about retrieval

Idea. When a pathway repeatedly leads nowhere, three explanations compete: the association weight is wrong, the selection policy is wrong, or the edge should not exist. Outcome data currently feeds only the first. A separate accumulator β€” per-edge route-failure counts, gated by provenance β€” would feed the third.

Why it matters. It is the only proposal in view that improves the derived layer rather than compensating for it. It also distinguishes extraction error from retrieval error using signal the system already produces, which is a standing obligation from Chapter 4.

Risks. This is a feedback loop into stored interpretation, which is more dangerous than a feedback loop into retrieval priority. It would need everything Stage B has plus human review, and it may belong with Chapter 8’s correction machinery rather than here.

Relation-typed transmission

Idea. Different relation types should transmit activation differently and asymmetrically. SUPPORTED_BY should conduct strongly toward evidence; SUPERSEDES should conduct strongly backwards (from current to superseded) but weakly forwards; ECHOES should conduct toward the original and barely at all away from it; RESEMBLES should conduct weakly in both directions.

Why it matters. It uses the semantic layer to shape the associative layer without collapsing them, which is the chapter’s central discipline applied constructively. It also gives association weights a derivation instead of an author.

Tension. It risks reintroducing exactly the conflation the chapter forbids β€” letting relation semantics determine retrieval priority is defensible, but letting evidence confidence do so is not, and the two are easy to blur in implementation.

Important distinctions

  • Association strength β‰  epistemic confidence. Priority versus belief. The chapter’s governing rule.
  • Retrieval trace β‰  provenance chain. Why it arrived versus why it should be believed. Ch 7 owns the second.
  • Path recall β‰  source recall. What traversal reached versus what selection kept. Localises the failing layer.
  • Activation decay β‰  association decay β‰  forgetting. Within one traversal; over long disuse; policy about influence. Ch 17 owns the third.
  • Co-occurrence β‰  useful transition β‰  independent corroboration. Three relationships behind one statistic.
  • Explored β‰  admitted. Internal search cost versus context cost. Keeps the budget comparison honest.
  • Seeding quality β‰  propagation quality. Measured separately because a bad seed poisons every mechanism downstream.
  • Structural graph health β‰  memory quality. A perfectly connected, fully provenanced graph can answer everything wrongly.
  • Recent β‰  true. Temporal accessibility versus temporal validity.
  • Reachable β‰  relevant. The chapter’s own warning against its own mechanism.

What mechanism would make this work?

Cue-conditioned propagation with an activation threshold, fan division, and a bounded hop count, over a graph whose nodes carry source provenance, with a bounded selection step and a recorded trace β€” plus static graph retrieval and strong RAG intact beneath it as fallbacks. Lateral inhibition retained as an ablatable option with no evidence behind it. Adaptive weights implemented, flagged, and off.

Connections to the rest of the book

  • Ch 1: the definition (past changes present behaviour) is what the retrieval-level results do not reach; the chapter’s biggest limitation is measured against Ch 1’s standard.
  • Ch 2: all scoring is delegated; path metrics are additions kept beside instrument metrics, not blended in. The path-recall/source-recall gap is a candidate instrument extension.
  • Ch 3: the low-precision residual is the threat this chapter could have worsened; the no-propagation floor and matched context budget exist because of it.
  • Ch 4: consumed through the StructuredMemoryBackend abstraction, never the package. The false-edge experiment is Ch 4’s fallibility made into a Ch 5 stressor.
  • Ch 6: the handoff β€” a path is not a justification, and similarity’s limits are the next question.
  • Ch 7: owns provenance; the retrieval-causality distinction exists to protect Ch 7’s job.
  • Ch 8: owns validity; association decay is deliberately not supersession.
  • Ch 12–14: own relevance, policy, and assembly; the selection step here is a placeholder standing in their territory and should be handed over.
  • Ch 15: owns long-term availability; Ch 16: owns outcome adaptation, and inherits Stage B with its pathology already demonstrated.

Beyond the current book

  • Associative depth as a published corpus statistic would let other systems decide whether graph propagation is worth building before building it.
  • The refusal-as-implementation pattern (build the dangerous mechanism, label it, flag it, demonstrate its failure) generalises to any system with a safety argument.
  • Retrieval causality as a user-facing feature: “why did you bring this up?” is a question people ask assistants constantly, and almost no system can answer it.

Collins & Loftus 1975 (mechanism and the attenuation warning); Tulving & Thomson 1973 (cue-dependence); Anderson & Reder 1999 (fan); Anderson & Schooler 1991 (need probability β€” the strongest argument for learned weights, deliberately deferred); Crestani 1997 (the IR verdict); Jeh & Widom 2003 and Haveliwala 2002 (PPR); HippoRAG and HippoRAG 2 (PPR-from-seeds, dual nodes, seeding matters); A-MEM (links without traversal β€” the alternative hypothesis); SYNAPSE (mechanism inventory, ablations, cognitive tunnelling); MemORAI (cue-conditioned weighting, turn provenance, the scoping-beats-weighting ablation); MRAgent and Think-on-Graph (LLM-in-the-loop traversal β€” the expensive alternative); Xiong et al. ACL 2026 (experience-following); MemEvoBench (misevolution); Zep (bi-temporal edges β€” the Ch 8 boundary marker).

Possible future claims

Already supportable

  • Unconstrained propagation degrades both precision and recall relative to constrained propagation.
  • Degree-preserving rewiring is a sufficient control for “did the structure matter”.
  • Frequency-driven reinforcement of associations is unsafe in the presence of extraction error.

Plausible but needs development

  • Cue conditioning is the only propagation refinement that pays for itself.
  • Seeding quality dominates propagation quality below some corpus diameter.
  • Lateral inhibition is unnecessary when a threshold and a fan term are present.

Speculative

  • Associative depth predicts, in advance, whether a corpus rewards graph propagation.
  • Route-failure statistics are a better use of outcome data than association reinforcement.
  • Carrying residual activation across related queries is where associative memory’s real gains are, and experimental hygiene is currently hiding them.

Claims worth attacking

  • “Association strength is retrieval priority, not epistemic confidence.” Counter: if a route is useful because it reliably leads to correct answers, the distinction is bookkeeping β€” the information is the same and splitting it doubles the state without doubling the signal. The defence has to show a case where priority and confidence diverge and the divergence matters behaviourally; the echo edges are the intended example and the chapter does not actually run that case.
  • “Propagation earned its place.” Counter: five recall points over a floor that has better precision, on a hand-built fixture, with no reader in the loop. A hostile reading is that the chapter found nothing and dressed it carefully.
  • “Lateral inhibition does not earn its place.” Counter: dismissed at a scale where competition barely exists. The measurement may simply be underpowered.
  • “The safeguards contain the pathology.” Counter: they contained one pathology on one fixture over eight rounds, and the wrong memory was admitted in every round anyway. The containment is of the loop, not the harm.
  • “Raw sources remain authoritative.” Counter: true structurally, but a reader only ever sees what selection admitted. Authority that is never exercised is a property of the architecture diagram, not of the system’s behaviour.

Tensions and counterarguments

  • The chapter argues that reachability is a distinct retrieval primitive and that most of its benefit came from seeding, which is a similarity operation. If seeding dominates, the primitive may be less distinct than claimed.
  • It refuses to let retrieval frequency mean anything, while Anderson and Schooler’s rational analysis β€” the strongest classical result in this area β€” says need probability does track frequency. The book’s position is defensible only because retrieval frequency in an automated system is endogenous in a way environmental frequency is not, and the chapter does not spell that out.
  • It insists on bounded context to keep the comparison fair, and then reports that the clearest failure is selection discarding correctly-reached evidence. The bound is producing the failure the chapter then reports as a finding.
  • It presents deep propagation improving precision as a curiosity, but if real it undermines the hop-budget constraint the chapter simultaneously defends.

Examples and thought experiments

  • cat β†’ a particular cat β†’ an incident β†’ a house β†’ a person β†’ something said. The fourth item is unrelated to cats and reachable from them.
  • a.silva + backend, a.silva + corpus_import, a.silva + foreign-key checks: three unrelated regions behind one entity.
  • The backup obligation: event-store β†’ adr-007 β†’ commit-110 β†’ commit-112 β†’ intent-401 β†’ commit-118, where the completing artifact never names the release the obligation was due before.
  • incident-106 next to incident-026: same nine-minute symptom, different cause. The semantically tempting branch.
  • runbook-006 echoing adr-007: co-occurs constantly, supports nothing independently.
  • The fabricated SUPPORTED_BY edge from the event-store decision to incident-106, which puts adr-007 into an answer about an outage.

Potential demonstrations or experiments

  • Associative depth of the controlled corpus versus the real-project corpus, computed from ledgers alone.
  • Relation-typed transmission against uniform transmission, on the same fixture.
  • Selection-policy sweep: the 0.6/0.3/0.1 fusion weights as an ablation family rather than a constant.
  • Session-carryover: residual activation across a three-question sequence, under an evaluation design that keeps the conditions independent.
  • Inhibition at scale: the same ablation on a graph with average degree above ten.
  • Reader-in-the-loop: the same admitted selections passed to the Chapter 3 reader under matched budgets, which is the comparison the chapter owes.

Research questions this chapter creates

  • What is the distribution of useful-hop-distance in real project history, and does it differ from the synthetic generator’s?
  • Where should association weights come from when nobody hand-authors them?
  • Should activation persist across a session, and can that be evaluated without contaminating independence?
  • Is a path ever legitimate evidence about anything other than retrieval β€” specifically, about the extractor?
  • Does the precision advantage of cue conditioning survive a non-lexical implementation?
  • At what graph scale does competition become real enough for inhibition to matter?

Architectural implications

  • The associative layer sits above Chapter 4’s abstraction and below context assembly, with both lower layers intact as fallbacks.
  • Four quantities require four fields; no fused weight is permitted anywhere in the stack.
  • Every admitted memory carries a route; every route terminates on source identifiers.
  • Any mutable memory state is an append-only overlay on an immutable base, replayable and rollbackable.
  • Health checks report structure and update counts, and state explicitly that structure is not quality.
  • The selection step is a placeholder occupying Chapters 12–14’s territory and must be surrendered to them.

How would we know this works?

Reader-level task accuracy improves over both Chapter 3’s baseline and Chapter 4’s static graph at a matched context budget, concentrated in cases with useful-hop-distance β‰₯ 2, without precision or harmful-memory regressions on cases with distance 0 β€” and the gain survives the shuffled-edge control and an oracle-path condition that separates traversal failure from reasoning failure. None of that has been run.

The chapter at its highest level

The ideal version would teach: reachability as a retrieval primitive with a corpus statistic that predicts when it pays; the four-quantity separation as enforced architecture; retrieval causality as distinct from justification; constraints-over-cleverness as a measured result across three independent ablation families; and refusal-as-implementation for the self-modifying mechanism. The current version earns all of these except the first, and is honest that its headline gain is five points on a toy graph with no reader.

Discussion

Start here

  • The no-propagation floor scores 0.850 recall with the best precision in the table. What exactly did the other 1,400 lines of propagation machinery buy, and would a reader notice?
  • Branch separation happened at seeding. If the cue picks the region before propagation starts, is “cue-conditioned propagation” describing a mechanism or decorating one?
  • The wrong memory was admitted in all eight reinforcement rounds under both policies. Is “we stopped the feedback loop” a safety result or a consolation?

Push the idea further

  • If associative depth is a corpus property, the book could state in advance which mechanisms a given history rewards. What else in the architecture is secretly a corpus statistic rather than a design choice?
  • Residual activation across related queries is the most human thing associative memory could do, and evaluation hygiene forbids it. Is there an experimental design that permits it honestly?
  • Route failure is a signal about the extractor. Should outcome data flow back into Chapter 4’s derived layer rather than into Chapter 5’s weights?

Decisions we need to make

  • Whether lateral inhibition stays in the codebase at all, given zero measured contribution.
  • Where association weights come from in a non-toy system: relation type, extraction confidence, or outcomes.
  • Whether the selection step is surrendered to Chapters 12–14 now or carried as a known placeholder.
  • Whether Stage B ships to Chapter 18 as-is, or with route-failure accumulation added first.

Claims worth attacking

  • “A path is not a justification.” Counter: a path through SUPPORTED_BY edges is precisely a justification. The claim may need scoping to paths over mixed relation types rather than stated universally.
  • “Constraints matter more than the propagation rule.” Counter: this may be an artefact of testing rules that are all variations of one family. An LLM-in-the-loop traversal is a genuinely different rule and was not tried.

New ideas worth exploring

  • Associative depth as a pre-build corpus measurement.
  • Relation-typed, asymmetric transmission derived from the semantic layer.
  • Route-failure statistics as extraction feedback.
  • Refusal-as-implementation as a book-wide safety pattern.
  • Retrieval causality as a user-facing explanation, not only an internal diagnostic.

Explain this chapter with AI

Copy this prompt into ChatGPT, Claude, Gemini, a local model, or another AI.

Apply this chapter with AI

Copy this prompt into ChatGPT, Claude, Gemini, a local model, or another AI.

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’s own question and Chapter 4’s own experiment; nothing here assumes its verdict.

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.

The question is whether that difference is mechanically real, and whether it buys anything:

Once memories have persistent representations and relationships, how should activation move through them so that one memory can evoke another?

The working name for this is associative memory. The chapter’s job is to build it, to compare it fairly against the systems the book already has, and to report what happens even if the answer is that it was not worth the trouble.

A graph is not yet remembering

Here is the shape of the book’s progression so far, and the step this chapter proposes.

Chapter 3
raw history β†’ retrieval β†’ context β†’ answer

Chapter 4
raw history β†’ persistent derived graph β†’ graph-aware retrieval β†’ answer

Chapter 5
query/cue β†’ seed activation β†’ propagate through the graph
          β†’ retrieve associated memories β†’ answer

Chapters 3 and 4 both treat retrieval as a lookup: given a query, find the items most like it. In Chapter 3 the items are passages and the likeness is embedding distance. In Chapter 4 the items are graph elements and the likeness may include a neighbourhood, but the neighbourhood is still selected by a query-to-item comparison. In both, the relationship structure is something the retriever consults.

The alternative is that the structure is something recall travels through. Activation enters the graph at whatever the cue touches, and then moves β€” attenuating with distance, competing with other branches, stopping when it runs out. What comes back is not the set of nodes nearest the query but the region the cue lit up.

That is a real mechanical difference and it should have measurable consequences. The rest of the chapter is about finding out which ones.

Memories lead to memories

Someone thinks cat.

What follows is not a ranked list of cats. It is a particular cat, then an incident involving that cat, then the house where the incident happened, then a person associated with the house, then something that person once said. By the fourth step the memory has almost nothing to do with cats. It is not similar to the cue. It is reachable from the cue, along a chain in which each link was, at the time, the obvious next thing.

A project history has the same shape. The question

What was behind the budget problem in the migration?

may need an artifact that never mentions the migration, never mentions a budget, and shares no vocabulary with the question β€” because the route runs through a person, to a project, to a supplier, to an invoice, and the invoice is the answer.

Two things are worth extracting from the intuition before it gets over-used.

The first is that the useful memory can have weak direct similarity to the cue and strong reachability from it. If that is common in real histories, a retriever that only measures similarity has a systematic blind spot that no better embedding fixes, because the property it is missing is not a property of the item at all. It is a property of the path.

The second is that the path depends on the cue and not only on the entity. Consider the same person under different active contexts. In this book’s history, a.silva appears in the event-store migration, in the removal of the legacy corpus_import domain, and in the Strategy X backfill failure that left orphaned rows. Those are three unrelated regions of the project. A query about a.silva and the backend should not activate the same neighbourhood as a query about a.silva and foreign-key checks. The classical statement of this is Tulving and Thomson’s encoding specificity principle: what can be retrieved is determined jointly by what was stored and by the cue present at retrieval, not by the stored trace alone. Recast as engineering, it says the relevant neighbourhood is conditioned by the active cue, and entity identity is not enough to fix it.

Both of these are testable. Neither is established by finding the intuition appealing.

From similarity to pathways

The mechanism has a long history, and the honest version of that history is a warning as much as an invitation.

Collins and Loftus described semantic memory as a network of concepts joined by links of varying strength, in which processing a concept makes it a source of activation that spreads outward in parallel, weakening with distance and with time. Where activation from two sources intersects, relatedness is detected. The theory was explicit that activation must attenuate: without decay the whole network lights up and the signal is gone.

Information retrieval tried this, and its verdict is the useful part. Crestani’s survey reviews two decades of spreading-activation models over semantic networks and analyses critically whether the technique earned a place in associative retrieval. The vocabulary the field settled on is itself the finding: the usable variant is constrained spreading activation, hedged with limits on how far activation may travel, how many neighbours it may reach, which paths are eligible, and how weak it may become before it stops. The technique did not struggle because the idea was wrong. It struggled because an unconstrained mechanism retrieves everything and calls it relevant.

That matters here more than it usually would. The Chapter 3 runs in this book already show the baseline solving nearly the whole fixture on task accuracy while leaving low source precision as a residual weakness. Associative expansion is, structurally, a way of retrieving more. A mechanism that recovers useful indirect memories while tripling the irrelevant ones has not improved this system; it has moved its failure somewhere less visible.

So the chapter’s prediction, registered before the runs, is that the constraints will matter more than the propagation rule. Two independent pieces of prior work point the same way. The MemORAI authors β€” reporting on a 2026 preprint, so their numbers are author-reported and unrefereed β€” measure their query-conditioned edge weighting at about two points of turn-level recall@10, their query-focused subgraph scoping at about thirteen, and their topic segmentation at most of the system’s performance. The SYNAPSE authors, in a refereed paper, report that removing lateral inhibition cost about one point of average F1 while removing decay collapsed temporal reasoning and removing the fan term collapsed open-domain performance. In both systems the elaborate mechanism was the cheap contributor and the blunt constraint was the expensive one.

The graph becomes active

The graph this chapter needs is smaller than the one Chapter 4 produces. It needs nodes with descriptions, edges with relation labels, and source provenance on both:

nodes         entities, claims, and the source artifacts themselves
edges         a relation label, a weight, and the artifacts that evidence it
provenance    every node and edge traceable to raw history

Everything else β€” communities, community reports, claim typing β€” is Chapter 4’s business, and Chapter 5 consumes the abstraction rather than the package behind it. The adapter takes a structured-memory snapshot and produces a memory graph; if the backend changes, the adapter changes and nothing above it does.

Onto that graph the chapter adds one thing that Chapter 4 does not have: a per-query quantity.

activate the seeded nodes
   ↓
send activation over eligible edges
   ↓
activate neighbours to different degrees
   ↓
propagate again
   ↓
decay, suppress weak paths
   ↓
select a bounded memory subgraph

Activation is never written to the graph. It belongs to this act of remembering and disappears when the query does. The graph records what the project’s history contains; activation records what this cue reached. Keeping those in separate objects is not fastidiousness β€” it is what makes the same graph answer two different questions differently, and it is what stops one query’s traversal from becoming a fact about the corpus.

The cue has to get in somewhere

Before anything propagates, the cue has to become a set of seeded nodes, and a bad seed poisons every mechanism downstream. This is easy to leave implicit and expensive to get wrong: the HippoRAG 2 authors report that changing seeding alone β€” from named-entity matching to matching the whole query against extracted triples β€” moved multi-hop recall by over twelve per cent, which is larger than most differences between propagation methods.

Four seeders are implemented, and they are measured separately from propagation for exactly that reason.

class Seeder(Protocol):
    """Map a cue onto seeded nodes with initial activation."""

    name: str

    def seed(self, cue: str, graph) -> list[Seed]:
        ...

Lexical seeding scores inverse-document-frequency-weighted term overlap, which handles the identifiers a project history is full of β€” adr-007, incident-026 β€” better than any embedding. Embedding seeding compares a cue vector against node-description vectors, reusing the Chapter 3 providers so that embedding identity means the same thing in both chapters. Hybrid blends the two. Oracle seeding reads the evaluator’s ledger directly; it is not a deployable system but a diagnostic, because when oracle seeding fixes a case that hybrid seeding fails, the fault was at the entrance to the graph and not on the journey through it.

Two ways to move

Two propagation mechanisms dominate the modern literature, and they are different enough that implementing only one would have decided the question by construction.

Personalized PageRank leaves the graph alone and changes where the random walk restarts. Jeh and Widom’s formulation biases the stationary distribution toward a preference vector; Haveliwala’s topic-sensitive variant had already shown that a global importance measure becomes query-relative by changing the reset distribution rather than the graph. The reset vector is exactly the seed-activation interface this chapter already needs, which is why HippoRAG and HippoRAG 2 both use it: seed from the query, run one pass, read off importance.

Its cost is specific and worth naming. A stationary distribution has no notion of hop count. It can report that a memory is reachable and important; it cannot report that the memory was three steps away, because in the limit every step has already happened. Path length has to be recovered separately, and the value recovered is approximate.

Spreading activation keeps the hop structure. Each step, every active node retains a fraction of its own activation and receives what its neighbours send:

a_i(t+1) = retention Β· a_i(t)
           + Ξ£_j  spread Β· w_ji Β· a_j(t) / fan(j)

The implementation follows the form SYNAPSE reports, with their published settings as the starting point rather than tuned values: half the activation retained, four-fifths of what is transmitted passed along, and division by the sender’s fan.

for node_id, level in sorted(levels.items()):
    if level < config.activation_threshold:
        continue
    neighbours = graph.neighbours(node_id)
    divisor = fan_divisor(len(neighbours), config.fan_division)
    for neighbour, edge in neighbours:
        weight = self.edge_weight(cue, edge)
        delivered = config.spread_factor * weight * level / divisor
        if delivered < config.activation_threshold:
            continue
        incoming[neighbour] = incoming.get(neighbour, 0.0) + delivered

Termination does not depend on remembering where the walk has been. Activation decays multiplicatively and the threshold cuts it off, so a cycle dies out instead of circulating. The hop and node budgets exist as well, and the tests check that each of the three can be the binding constraint, because a mechanism whose only safety property is a hop limit is a mechanism that has not thought about cycles.

A third strategy is included as the honest floor: bounded-hop neighbourhood expansion, which is roughly what a static graph memory already does. If that matches spreading activation, propagation has bought nothing.

Context changes the path

The fourth strategy is the one the chapter’s central claim depends on. In plain propagation, activation leaves a node the same way whatever the cue was. Cue-conditioned propagation recomputes the edge weight per query from the agreement between the cue and the edge’s own description, so two questions about the same person travel differently. This is the mechanism MemORAI calls dynamic weighted PageRank.

One design decision inside it matters more than it looks. Conditioning attenuates edges; it never removes them. A cue-irrelevant edge is scaled toward a floor rather than severed, because severing would make the graph itself query-dependent β€” and the whole architecture rests on the graph asserting what the history contains while retrieval expresses what this question prefers. Those must not become the same object.

multiplier = self.floor + (1.0 - self.floor) * min(1.0, overlap * 2.0)
blended = (1.0 - self.strength) * 1.0 + self.strength * multiplier
return edge.association * blended

At strength = 0 this reduces exactly to unconditioned propagation, which is what makes the ablation a one-line change rather than a second implementation.

Association is not truth

This is the chapter’s most important distinction and it costs nothing to get right at the start, so it is worth stating before any results.

There are at least two entirely different things an edge can be carrying. The first is a claim about the world, grounded in evidence:

adr-007         SUPERSEDES      adr-003
evt-205         SUPPORTED_BY    evt-203
event store     CURRENT_BACKEND PostgreSQL

The second is how readily one memory should evoke another during recall:

event store  β†’ evt-205    0.75
evt-205      β†’ evt-203    0.80
evt-203      β†’ session-019 0.70

These are not the same quantity and they must not be summed into one weight. A route can be heavily travelled and lead to something false; a proposition can be certainly true and sit on a route nobody needs. The principle the rest of the book inherits is:

Association strength is retrieval priority, not epistemic confidence.

It follows that a frequently traversed pathway can be useful without making the underlying proposition any more true, and that nothing may raise a claim’s confidence because a route to it was popular. The implementation keeps four quantities in four places and never collapses them:

quantity means lives on
relation what the edge asserts about the world the edge
association retrieval priority the edge
evidence_confidence epistemic support for the proposition the edge
activation how strongly this cue lit the node the per-query state

Query-relative relevance, source authority, and recency are further distinct quantities. They enter later chapters; the point here is that the single-weight temptation is available at every step and is refused at every step.

Follow the pathway

If memory is going to reach an artifact through four hops, the system has to be able to say how. The trace is not decoration; it is the difference between a retrieval you can debug and one you can only accept.

cue: What still had to move before the first release after the event-store migration?
seeds: source:release-024(0.49), source:session-051(0.40),
       source:migration-run-103(0.32), claim:intent-401(0.26)

intent-401 backup obligation --RAISED--> commit-112   (w=0.60, delivered=0.045)
intent-401 backup obligation --ABOUT--> backup configuration   (w=0.70, delivered=0.053)
intent-401 backup obligation --COMPLETED_BY--> commit-118   (w=0.70, delivered=0.053)

A trace answers why did this memory reach my context? That is a different question from why should I believe what it says?, and the book has a name for keeping them apart: retrieval causality. The path is evidence about how retrieval behaved. It is not evidence for the claim at the end of it. Chapter 7 will build the structure that answers the second question; conflating the two here would let a well-travelled route masquerade as support for whatever it leads to, which is precisely the error this chapter’s later sections are about.

The trace renders with that disclaimer attached, because a path is persuasive-looking in a way that invites the confusion.

Build it

The package sits above Chapter 4’s abstraction and beside Chapter 3’s baseline rather than replacing either.

ORIGINAL EVIDENCE
      ↓
Chapter 3 RAG substrate
      ↓
Chapter 4 persistent graph
      ↓
Chapter 5 associative activation
      ↓
selected memory subgraph
      ↓
context
      ↓
reader / action

Fallback runs the other way. When associative retrieval is uncertain, static graph retrieval remains available; when that is uncertain, strong RAG remains available; underneath all of it the raw source artifacts remain authoritative and reachable. No layer here is permitted to become the only way to reach history.

solution/associative_memory/
    config.py              every parameter that defines a run
    pipeline.py            cue in, bounded selection and trace out
    fixtures.py            the deterministic ledger graph and cue set
    experiments.py         E5-A .. E5-H
    cli.py                 fixtures | health | recall | compare | experiments | demo
    graph/adapter.py       MemoryGraph; adapter from a Chapter 4 snapshot
    seeding/               lexical, embedding, hybrid, oracle
    propagation/           direct, pagerank, spreading, conditioned
    activation/            state, decay, fan division, lateral inhibition
    pathways/              traces, versioned weights, Stage-B learning
    evaluation/adapter.py  bridge to the Chapter 2 instrument
    health/checks.py       structural diagnostics

Using it is three calls:

seeds = seeder.seed(cue, graph)
result = retriever.retrieve(cue, graph, seeds)
for memory in result.admitted:
    print(memory.node_id, memory.activation, memory.path)

Before any of this touches an LLM-extracted graph, it runs on a fixture small enough to reason about: a 73-node, 101-edge graph built directly from the project’s canonical running examples, so every node corresponds to an artifact the rest of the book already uses and no identifier is invented. The fixture is deliberately unfriendly. It contains a dominant hub β€” the event-store decision touches thirteen neighbours against an average degree of 2.8. It contains derived echoes that restate a decision without independently supporting it (runbook-006 echoing adr-007, staging-log-018 echoing incident-026). It contains a same-symptom, different-cause trap (incident-106, a timeout caused by network saturation, sitting next to the nine-minute schema outage). It contains a superseded procedure, weakly connected truths with degree one or two, three actors who each appear in three unrelated regions, and cycles.

Twenty cues probe it, labelled by what they are testing: cases where direct similarity should already succeed, cases where the evidence is two or more edges away, cases where the same entity appears under different active contexts, adversarial cases built around each trap, and one unanswerable case where abstention is correct.

The demonstration runs with no model server, no database, and no network:

cd solution && python -m associative_memory.cli demo

Measure it

Chapter 2 owns scoring, and nothing here reimplements a scorer. An associative retrieval is converted into the instrument’s SystemOutput and handed to score_task exactly as the Chapter 3 baseline is. What the chapter adds is a small set of path-quality observations that only make sense for a system that traverses, kept alongside the instrument’s metrics rather than blended into them:

Path recall β€” did any activated path reach the required evidence, whether or not it survived selection? Path precision β€” how much of what propagation touched was relevant? Expansion factor β€” memories activated per memory admitted. Useful-hop distance β€” how far the evidence was. Activation concentration β€” whether recall settled on a coherent region or smeared. Hub capture and distractor rate β€” whether the loudest or the labelled-wrong memories won.

The most useful of these is the gap between path recall and source recall, because it names which layer failed. High path recall with low source recall is a selection failure: propagation found the evidence and the ranking discarded it. The reverse is a traversal failure. Without the distinction, both read as “the system missed it”.

One constraint is non-negotiable in the comparison. Associative search may explore broadly inside the graph, but what it hands to a reader stays bounded β€” at most eight memories under every condition, with the exploration cost reported separately. A mechanism cannot win this comparison by injecting more history.

What the fixture runs show

The suite is frozen in experiments/benchmark/runs/ch5-20260919-e5/. Its scope has to be stated plainly before its numbers are read: these are retrieval-level results on a synthetic graph. No reader runs, no answers are generated, and nothing here is a comparison of Chapter 3 against Chapter 4 against Chapter 5 on task accuracy. That comparison needs the other two chapters’ frozen runs and is pending.

Twenty cues, matched context budget, mean over cases:

condition source recall source precision path recall expansion context tokens edges walked
seed-only (no propagation) 0.850 0.463 0.850 1.00 25.8 0
direct neighbourhood 0.892 0.283 1.000 5.92 43.5 2,448
Personalized PageRank 0.850 0.268 0.967 1.49 44.0 4,040
spreading activation 0.875 0.350 0.900 1.08 41.0 2,035
cue-conditioned 0.900 0.446 0.900 1.00 31.4 1,361
shuffled-edge control 0.675 0.219 0.800 1.27 41.4 2,142

Four things in that table are worth more than the headline.

The edges carry information. The shuffled-edge control rewires the graph while preserving its degree distribution β€” a control borrowed from the temporal-shuffle test in recent associative-memory work. Recall falls from 0.875 to 0.675, below even the no-propagation floor. Propagation over a graph whose structure has been destroyed is worse than not propagating at all, which is the result that licenses everything else: the gains are coming from the relationships and not from having touched more nodes.

Propagation’s gain over seeding alone is real but small. Cue-conditioned propagation recovers five points of source recall over the floor. That is the entire headline effect, and it costs about six context tokens per cue.

Precision behaves exactly as the historical warning predicted β€” except under conditioning. Unconditioned spreading trades eleven points of precision for two and a half points of recall. Plain PageRank loses twenty points of precision and gains nothing. Only cue conditioning gains recall while roughly holding precision, at 0.446 against the floor’s 0.463. The mechanism that makes propagation safe is the one that tells it where not to go.

Direct neighbourhood expansion is the clearest illustration of the failure mode. It has perfect path recall β€” one-hop expansion reaches everything β€” and path precision of 0.055, with an expansion factor of 5.9. It finds all the evidence and buries it.

On the eleven cases where evidence is two or more edges away, the picture separates:

condition indirect recall indirect precision direct-case recall direct-case precision
seed-only 0.773 0.477 1.000 0.472
spreading 0.773 0.327 1.000 0.456
Personalized PageRank 0.773 0.230 1.000 0.344
cue-conditioned 0.864 0.447 1.000 0.472

Cue-conditioned propagation recovers nine points of recall on the indirect cases at a three-point precision cost, and leaves the easy cases exactly where it found them β€” identical recall and identical precision to no propagation at all. That last column is the one that would have killed the mechanism had it moved: a multi-hop capability that degrades the cases direct similarity already solves is not an improvement, it is a trade.

Unconditioned spreading and PageRank recover nothing on the indirect cases. Whatever multi-hop capability this fixture has, conditioning is where it comes from.

Why activation must decay

Ablating one constraint at a time gives the clearest result in the chapter.

variant recall precision path precision expansion nodes touched edges walked
full 0.875 0.350 0.348 1.08 201 2,035
no threshold 0.875 0.272 0.042 7.16 1,146 4,180
no fan division 0.867 0.265 0.075 4.34 699 3,670
no inhibition 0.875 0.352 0.330 1.17 249 2,209
no decay 0.550 0.497 0.497 1.00 211 1,361
unconstrained 0.742 0.241 0.032 8.91 1,427 11,509

Removing the activation threshold multiplies the nodes touched by 5.7 and collapses path precision from 0.348 to 0.042 without recovering a single additional piece of evidence. Removing fan division does the same thing less dramatically. Removing decay entirely β€” no retention, full transmission β€” costs over a third of recall, because activation that never attenuates never concentrates anywhere, and the selection step has nothing to rank by.

The unconstrained condition is the Crestani warning reproduced on a 73-node graph: 11,509 edge traversals, 8.9 memories activated per memory admitted, path precision of 0.032, and worse recall than the constrained version. Removing every guard does not retrieve more of what was wanted. It retrieves more of everything, and the ranking drowns.

There is also a counter-intuitive result worth reporting rather than smoothing away. Deeper propagation improves precision: at five hops instead of three, precision rises from 0.350 to 0.479 and context tokens fall from 41.0 to 33.5, with recall unchanged. The reason is visible in the traces β€” with decay applied every step, nodes that stop receiving activation fall below the threshold and drop out, so deep propagation concentrates rather than accumulating. The surviving active set at four hops is smaller than at one. This is the opposite of the intuition that more hops means more noise, it is a property of this fixture at this scale, and whether it survives on a graph two orders of magnitude larger is not something these runs can say.

Why memories compete

Lateral inhibition is the mechanism the chapter expected to matter most and the one the evidence supports least.

Suppressing all but the strongest seven nodes on each frontier changed precision from 0.352 to 0.350 β€” within noise, and in the wrong direction. It changed nothing on the adversarial subset either: hub capture and distractor rate were identical with inhibition on and off. The same asymmetry appears in the SYNAPSE authors’ own ablations, where removing lateral inhibition cost about one point of average F1 while removing decay cost tens.

The honest reading is that on a graph of this size, the threshold and the fan term have already done the work inhibition was supposed to do. Competition between pathways is real β€” the fixture is built so that a.silva has four branches competing for one budget β€” but the competition is resolved by attenuation before any explicit suppression step gets to act.

Fan division, by contrast, earns its place, and the way it earns it is a genuine trade. On the adversarial cases, removing it raises recall to 1.000 and drops precision from 0.517 to 0.410. Dividing a hub’s output by its degree is not free: it makes the loud node quieter, which occasionally silences something that was loud and right.

That trade has a name in the literature. The SYNAPSE authors report a failure they call cognitive tunnelling, where inhibition suppresses a minor but correct detail in favour of a hub. The measurement that would catch it here is hub capture paired with source recall, and it is reported for every condition rather than assumed away.

The cue chooses the branch β€” but not where expected

The context-conditioning experiment gives a result that complicates the chapter’s own story.

Three cues about a.silva β€” the event-store proposal, the corpus_import caller migration, the foreign-key failure β€” each recovered their own branch completely. Recall was 1.000 on every branch cue under every strategy. The cue, not the entity, chose the region. That part of the intuition holds.

But the branch was chosen at seeding, not during propagation. The overlap between the admitted source sets for different cues about the same actor was 0.234 for plain spreading, 0.333 for cue-conditioned propagation, and 0.405 for direct expansion. Conditioning did not separate the branches better than plain propagation did; it separated them slightly worse, because attenuating cue-irrelevant edges keeps activation nearer the seeds and the seeds were already cue-specific.

This lines up with what MemORAI’s ablations reported: their query-focused subgraph scoping was worth roughly seven times what their query-conditioned edge weighting was worth. The finding this chapter can add is a sharper version of the same thing. Where the cue enters the graph matters more than how the cue steers the walk. Conditioning’s contribution shows up in precision on multi-hop cases, not in branch separation β€” and the intuition about entity-plus-context was right about the phenomenon and wrong about the mechanism that produces it.

When Chapter 4 gets it wrong

Derived structure is fallible structure, and a false relation is not a hypothetical. The false-edge experiment injects the most damaging plausible one: a fabricated SUPPORTED_BY edge wiring the event-store decision hub directly to incident-106, the timeout that looks like the schema outage but was caused by network saturation. It is exactly the mistake an extractor makes when two passages share vocabulary.

In aggregate the effect is small: path precision moves from 0.348 to 0.335. On the cue it was built to derail, it is concrete. Asked what caused the nine-minute outage during a migration, the clean graph admits incident-026, incident-106, and procedure-123. The corrupted graph admits those and adr-007 β€” the event-store decision, pulled into an answer about an outage it had nothing to do with, by one edge that no source evidences.

Two observations follow. A well-constrained propagation absorbs a single false edge without catastrophe, which is mildly reassuring. And the graph health check flags the edge before any query runs, because it has no source provenance β€” which is more useful than the absorption, and is the reason the provenance requirement is structural rather than advisory.

Can pathways learn?

Everything above is static. The graph does not change when it is used, and the first result had to be interpretable without learned weights, which is why it is.

The next question is whether experience using memory should change future traversal. A route that repeatedly led somewhere useful might reasonably become easier to travel; a route that led nowhere might fade.

cue β†’ pathway β†’ useful result   β†’ strengthen the route
cue β†’ pathway β†’ irrelevant      β†’ weaken the route
route unused for a long period  β†’ decay toward its base

This is staged deliberately. Stage A asks whether propagation itself helps. Only if it does is Stage B β€” adaptive pathways β€” worth pursuing, and Stage B stays behind an explicit flag that is off by default.

The implementation makes one structural commitment before it makes any behavioural one. Adaptive weights are an append-only overlay on an immutable base:

association state = base graph + ordered update log

Nothing mutates the base. Replaying the log reproduces the current weights, truncating the log rolls back to any earlier point, and the question why is this pathway strong? has a literal answer β€” the list of updates that made it so, each with its reason, its cue, and the outcome it came from. Both properties are asserted in the run record rather than claimed in prose. The alternative, silently mutating weights on a graph that is nominally rebuildable, would make the derived state neither rebuildable nor auditable, which is a worse position than not adapting at all.

On the fixture, three related cues were run in sequence, each judged against the ledger, and the resulting weights re-evaluated on the whole cue set. Ten updates were recorded: nine weakenings and one strengthening. Recall moved from 0.875 to 0.900 and precision from 0.350 to 0.368.

That is a real improvement and a very small one, from almost entirely negative feedback. The single strengthening is worth noticing for a reason that is not about its size: the routes that reached correct evidence were mostly the seeded ones, and a seeded memory has no pathway to credit. There was less to reinforce than the mechanism assumed.

The danger of reinforcing mistakes

The reason Stage B is flagged rather than default is a failure mode that deserves the space.

Suppose a wrong association exists. If retrieval frequency strengthened pathways, then the wrong association would be retrieved, and being retrieved would strengthen it, and being stronger would cause it to be retrieved more:

incorrect association
   β†’ retrieved more often
   β†’ appears useful because it is retrieved
   β†’ strengthened further

This is not speculative. The ACL 2026 study of experience-following behaviour in memory-augmented agents gives the mechanism a name and refereed evidence: agents produce highly similar outputs when a retrieved record’s input is similar to the current one, so inaccuracies in stored experience compound into future behaviour, and previously correct executions can still mislead. A 2026 preprint, MemEvoBench, calls the aggregate phenomenon memory misevolution β€” behavioural drift from repeated exposure to misleading information β€” and reports, on its authors’ own unrefereed measurements, substantial safety degradation under biased memory updates with prompt-level defences insufficient.

The experiment makes the loop visible rather than claiming to have solved it. The same corrupted graph, the same cue repeated eight times, two update policies:

cue repeated 8 times: What caused the nine-minute outage during a migration?
the graph carries one fabricated SUPPORTED_BY edge, weight 0.60

  frequency-only   0.65 β†’ 0.70 β†’ 0.75 β†’ 0.80 β†’ 0.85 β†’ 0.90 β†’ 0.95 β†’ 0.95
                   health flags: unprovenanced-edges, frequency-reinforcement
  outcome-gated    0.55 β†’ 0.50 β†’ 0.45 β†’ 0.40 β†’ 0.35 β†’ 0.30 β†’ 0.30 β†’ 0.30

Frequency-driven reinforcement drives a fabricated edge to the ceiling in six rounds. Outcome-gated reinforcement drives it down. The safeguards that produce the difference are four, and each is a refusal rather than a heuristic:

  1. Outcomes, not frequency. Only a recorded task outcome moves a weight. Being retrieved moves nothing.
  2. Evidence gates. An edge with no source provenance is never strengthened, however well the task went; nor is one whose evidence confidence is below a floor. The fabricated edge fails the first gate and the derived echoes fail the second.
  3. Bounds and decay. Weights are clamped and unused routes drift back toward their base.
  4. Append-only records. Every change is logged with its reason and can be replayed or rolled back.

And then the result that matters most, which is not the one the safeguards were designed for. Both policies admitted the wrong memory in all eight rounds. The gates stop the weight from running away. They do not remove the false edge, and they do not stop it from putting adr-007 into an answer about an outage. The safeguard addresses the feedback loop, not the fault.

That distinction is the one to carry forward. A memory system that cannot reinforce its mistakes is not thereby a memory system without mistakes.

Co-occurrence is not usefulness

One tempting shortcut is ruled out explicitly. Two memories appearing together often is not a reason to strengthen the route between them.

Frequent co-occurrence can mean duplication, boilerplate, one source quoting another, a popular distractor, or a misconception restated. The fixture contains two instances on purpose. runbook-006 restates adr-007 for operators; staging-log-018 restates incident-026. Both co-occur constantly with what they echo. Neither is independent corroboration of anything, and the ledger records exactly that β€” their derivation edges point at what they echo.

The evidence-confidence gate is what encodes the refusal: the echo edges carry deliberately low evidence confidence, and the learner refuses to strengthen them even when a route through them produced a good outcome. The test for that refusal is explicit, because it is the kind of property that decays silently.

The general form is that three different relationships hide behind the same statistic:

co-occurrence          two memories appear together
useful transition      one memory usefully leads to the other
independent support    two memories independently evidence a claim

The book’s position is that repetition is not truth, and that a system which strengthens on repetition has confused the first of these with the third.

Did associative memory earn its place?

Four outcomes were registered in advance. The result maps to the first, weakly, with a large piece of the third.

Type A β€” associative retrieval clearly helps. Partially supported, at a modest size. Cue-conditioned propagation improved source recall from 0.850 to 0.900 overall and from 0.773 to 0.864 on the indirect cases, at a precision cost of roughly three points and about six extra context tokens per cue, without degrading the cases that direct similarity already solved. The shuffled-edge control confirms the gain comes from the graph structure and not from expansion.

Type B β€” static graph and RAG are already enough. Not supported, but close enough to matter. The no-propagation floor scores 0.850 recall at the best precision of any condition. Everything this chapter builds is competing for five points of recall.

Type C β€” recall improves, precision worsens. Supported for every mechanism except cue conditioning. Plain spreading activation, Personalized PageRank, and direct neighbourhood expansion all degrade precision, two of them without recovering any recall. The residual precision weakness the Chapter 3 runs already show is made worse by naive propagation, exactly as the historical record predicted.

Type D β€” adaptive pathways become unstable. Demonstrated under the refused policy and contained under the proposed one. Frequency-driven reinforcement produced a runaway weight on a fabricated edge in six rounds. Outcome-gating with evidence gates reversed it. Neither prevented the wrong memory from being admitted.

So the chapter’s mechanism is earned, conditionally and narrowly. Associative propagation belongs in the architecture as cue-conditioned propagation with an activation threshold, fan division, and a bounded hop count, sitting above the static graph and below the context assembler, with static graph retrieval and strong RAG remaining available beneath it. Lateral inhibition does not earn its place on this evidence and is retained only as an ablatable option. Adaptive pathways do not enter the architecture at all; the mechanism exists, behind a flag, so that Chapter 16 can take up the question with the failure mode already visible.

The fair summary of the numbers is that the constraints mattered more than the propagation rule, which is what the prior work predicted and what this chapter now has its own evidence for.

An analogy, used carefully

The vocabulary in this chapter is borrowed: spreading activation, decay, inhibition, the fan effect, reinforcement. The borrowing is deliberate and it has limits worth stating rather than leaving to inference.

The mechanisms here are inspired by semantic networks, by cue-dependent recall, by hippocampal indexing ideas, and by reinforcement analogies. Each borrowing supplied a hypothesis that turned out to be implementable and testable: decay came from Collins and Loftus and proved essential; division by fan came from Anderson and Reder’s account of the fan effect and proved to be a real precision/recall trade; cue conditioning came from encoding specificity and turned out to be the only mechanism that gained recall without losing precision.

What is not claimed is that any of this is how human memory works, or that the graph is a neural network. Neural networks generally learn distributed weights through optimisation over a loss; this system has explicit memory nodes, interpretable links, and weights that change only through logged, gated, replayable updates. The Hebbian-sounding idea that repeatedly useful co-activation strengthens future access is a statement about routes through an inspectable structure, not a claim of biological equivalence. Where a borrowed term corresponds to a real algorithmic mechanism it is used; where it would only be decoration it is avoided.

The analogy is a source of hypotheses. The evidence is what decides, and in this chapter it decided against one of the borrowed mechanisms.

What prior work contributes

HippoRAG established the design this chapter’s PageRank strategy follows: an open knowledge graph over passages, seeded from the query, ranked by Personalized PageRank in one pass rather than by an iterative retrieve-and-read loop. Its successor, HippoRAG 2, supplied two things the implementation here adopts directly β€” passage nodes bound to concept nodes, so that a path can always terminate on evidence rather than on derived interpretation, and the finding that seeding method alone moves multi-hop recall substantially. Their honest note that performance on complex associative tasks degrades with corpus growth at a rate similar to plain retrieval is why this chapter measures expansion factor rather than recall alone.

A-MEM is the most useful counter-example in the literature. It builds an associative note graph with LLM-generated links, and then retrieves by embedding similarity over notes: the links change what notes say through a memory-evolution step, and are never traversed. It is a genuine alternative hypothesis β€” that the value of associations is in re-encoding rather than in propagation β€” and it is the reason the no-propagation floor is a first-class condition here rather than a formality. Its evolution mechanism, which rewrites the contents of stored notes, is not adopted, because it would break the invariant that raw sources remain authoritative.

SYNAPSE supplied the mechanism inventory: dual-trigger seeding, the fan term, temporal decay, lateral inhibition, a firing threshold, and a hybrid fusion of similarity, activation, and structural importance. It also supplied the ablation design and, in its own numbers, the first hint that inhibition would underperform its billing. Its reported cognitive-tunnelling limitation is what the hub-capture metric exists to detect.

MemORAI supplied cue-conditioned edge weighting and turn-level provenance stored on the edge. Its ablations are the most useful table in the recent literature for this chapter’s purposes, because they measure the propagation refinement against the structural decisions and find the refinement much the smaller term.

MRAgent proposes a third position β€” a deliberately shallow cue-tag-content structure in which an LLM explores and prunes paths during access rather than arithmetic propagating through them. Think-on-Graph occupies the far end of the same axis, with the model running beam search over the graph. Both are more selective and far more expensive per query than anything implemented here; the chapter tests whether cheap arithmetic propagation suffices before reaching for them.

From the classical side, Collins and Loftus supplied the mechanism and the warning that it must attenuate; Tulving and Thomson supplied the argument that retrieval is a function of trace and cue jointly; Anderson and Reder supplied the fan effect; Crestani’s survey supplied the historical record that unconstrained spreading activation is hard to control. Anderson and Schooler’s rational analysis β€” that the probability a memory will be needed tracks frequency and recency in the environment β€” is the strongest classical argument for need-driven access priority, and is deliberately left to Chapter 16, because using retrieval frequency as a proxy for need is exactly the error this chapter’s reinforcement section is about.

The experience-following study and MemEvoBench supply the modern evidence that the reinforcement failure is real rather than theoretical, and the first of them supplies the constructive half as well: future task evaluations can serve as quality labels for stored memory, which is the argument for outcome-gating rather than frequency-gating.

The full matrix, with what was adopted and what was refused for each system, is kept in the project’s research notes rather than reproduced here.

What remains unsolved

The residuals from this chapter are specific enough to hand on.

The comparison that matters has not been run. These are retrieval-level results on a synthetic 73-node graph. The Chapter 3 versus Chapter 4 versus Chapter 5 comparison on answer correctness, under the full instrument with a reader and matched context budgets, requires the other two chapters’ frozen runs. An oracle-path condition belongs in it, to separate remaining traversal failures from reasoning failures.

The fixture is small and hand-built. Every property reported here β€” including the counter-intuitive finding that deeper propagation improves precision β€” is a property of this graph at this scale. The adapter that consumes a real Chapter 4 snapshot is implemented and unit-tested against a stub; it has not been run against a real index.

Seeding is doing more of the work than propagation. Branch selection happened at seeding, not during the walk, and the no-propagation floor is within five recall points of the best condition. Whether propagation’s contribution grows or shrinks on a graph two orders of magnitude larger is the first thing a bigger corpus should settle.

Selection and traversal fail separately, and the selection side is untouched. The clearest single failure in the runs is a memory reached at two hops and then ranked out by a hub entity the cue also matched. That is a ranking problem, and Chapters 12 to 14 own ranking, relevance, and assembly.

Cue conditioning is lexically naive. It matches terms between the cue and the edge description, which means a cue saying “move” and an edge saying “moved” do not agree. The gains reported here were obtained despite that, not because of it.

A false edge survives being contained. The safeguards stop reinforcement from amplifying an extraction error; they do not detect or remove it. Distinguishing an extraction error from a retrieval error, and deciding what to do about the former, is not solved here.

Temporal validity has been kept out. Association decay, which is a preference about access, is carefully not the same thing as a claim ceasing to hold. Recent does not mean true, and a stale pathway is not a false one. Chapter 8 takes up validity; Chapter 15 takes up long-term availability.

What remains unsolved. Activation can travel through a memory graph, and travelling through it recovers evidence that similarity alone does not reach β€” modestly, and only when the cue constrains the route. But the thing the system now returns is a set of memories, each reached by a route, and it still cannot say why any of them should be believed. A path is not a justification. The next chapter takes up what similarity can and cannot tell us about sameness of meaning, and the chapter after it builds the structure that answers why.

References