Haokai Zhang, Yuhang Ding, Yunshu Zhou, Xinze Du, Shengtao Zhang, Zhiyue Zhao, Yuling Xi, Hao Chen (Zhejiang University · Shanghai Jiao Tong University · Shanghai Innovation Institute) — arXiv:2608.12743, August 2026

Spatial Memory Agent: a model that learns without learning

The weights never move. Not one gradient step. And yet the same frozen vision-language model goes from 54.1% to 68.5% on robot spatial questions — because it wrote itself notes, and learned which notes to trust.

Prerequisites: what a cosine similarity is and what a prompt is. Verifiers, procedural memory, z-score ranking, and shrinkage estimators are all built from zero.
11
Chapters
6
Interactive Sims
0
Gradient Steps
+14.4
pts on RoboSpatial

Chapter 0: The Frozen Agent

You are running a warehouse robot. Its brain is a vision-language model — a network that takes an image and a sentence and returns a sentence. Today it looks at a shelf and you ask it: "Can the toolbox fit to the left of the printer?" It says yes. The toolbox does not fit. The robot pushes the printer off the shelf.

Tomorrow, a different shelf, a different pair of objects, the same shape of question. "Can the crate fit behind the pallet jack?" The model says yes again, for exactly the same reason: it looked at whether there was visible gap to the left or behind, and never estimated whether the gap was as wide as the object being moved. It made the same mistake twice, and nothing in the system remembers that it did.

That is the failure this paper attacks, and it is worth being precise about what kind of failure it is. It is not a perception failure — the model saw both objects. It is not a reasoning-capacity failure — when you point out the missing clearance check, the model performs it correctly. It is a persistence failure. The model has no mechanism by which yesterday's verified mistake changes today's behaviour.

The bug is not accuracy. The bug is that experience evaporates. A frozen model is a function: same inputs, same outputs, forever. Every episode is the model's first episode. The paper's framing question is exactly this — "Can a frozen VLM agent improve its spatial reasoning through parameter-update-free self-evolution, without depending on external expert spatial tools at inference time?"

The two routes everyone already takes

The literature has two well-worn answers, and the paper names both in its opening.

Route one: post-training. Collect spatial data, fine-tune the model on it, or run reinforcement learning against a spatial reward. SpatialVLM (Chen et al. 2024) constructs spatial-reasoning instruction data to teach object relations and grounding; RoboSpatial (Song et al. 2026) combines 2D and 3D spatial data to train VLMs for robotics-oriented spatial understanding. Later variants add self-generated data, curricula, and RL signals. This works. It also means you now own a fork of the model, a training pipeline, an optimiser state, an eval suite, and a redeploy cycle. And when your provider ships a better base model next month, you start over.

Route two: tool-calling agents. Leave the model alone and give it instruments. S-Agent (Dai et al. 2026) lets a VLM agent invoke specialised spatial tools to gather intermediate evidence; SpaceTools (Chen et al. 2026) studies tool-augmented spatial reasoning with interactive reinforcement learning; related systems coordinate visual programs, 3D reconstruction, and action interfaces to verify ambiguous geometry. Also works. Also means that at inference time, on the robot, in the aisle, you are now running a depth estimator and a reconstruction pipeline alongside the VLM — latency, memory, a second set of failure modes, and a dependency on expert models you may not have.

Both routes change something expensive. Post-training changes the weights. Tool-calling changes the inference-time stack. The paper asks whether there is a third thing you can change that costs neither.

Route three: change what is in the prompt

Here is the whole idea in one sentence. Keep the weights frozen, keep the inference stack unchanged, and put a few sentences of hard-won procedural advice at the top of the prompt. The sentences are written by the model itself, about its own past mistakes, after a verifier told it whether it was right.

Stated that way it sounds almost trivially like retrieval-augmented generation, and the paper is careful to include plain RAG as a baseline precisely so you can see it is not. In the results, RAG is often worse than no memory at all — on the Qwen3.5-122B-A10B block it scores a macro average of 64.2 against no-memory's 65.3. Retrieving your own past transcripts and pasting them in front of a new image is not a free win; it is frequently a distraction.

So the interesting question is not "should the agent have memory" — that answer is old. The interesting questions are the three this paper actually answers:

Q1 — What should a memory contain?
Not the transcript. Not the answer. A transferable lesson: one dense sentence shaped "when <shape>, apply <habit>, avoid <trap>, validate by <check>", written under strict rules that forbid leaking the answer it came from.
Q2 — Which memory should you retrieve?
Not the nearest one. The paper's headline diagnostic: SMA reduces average retrieved similarity from 0.792 to 0.698 while raising accuracy from 66.8% to 69.8%. The best memory is not the most similar memory.
Q3 — How do you know which memories are any good?
Not from whether the episode that produced them was correct. From visit evidence: every time a memory is retrieved and the resulting answer is scored, its Transfer Reliability Score moves. That is the paper's central mechanism.

The name of the system is Spatial Memory Agent, SMA. The three ingredients are verifier-guided reflection, the Transfer Reliability Score (TRS), and two-stage retrieval. We will build all three from nothing, in that order.

What "spatial reasoning is hard" means, concretely

The paper's opening observation is that recent spatial VLMs and benchmarks "show rapid progress, but they also reveal that spatial reasoning remains challenging for current VLMs." That is the kind of sentence you skim. Look at the actual numbers in the No-memory row of the results and it stops being abstract: Qwen3.6-27B, a capable model, scores 41.6% on Omni3D and 54.1% on RoboSpatial. Omni3D questions have open answers, so 41.6% is not near a random baseline in any comforting way — it is a model that gets three out of five 3D questions wrong.

What exactly is going wrong? The paper's own reflection prompt enumerates the failure modes it expects a RoboSpatial rollout to exhibit, which is as close to a taxonomy of VLM spatial errors as you will find written down. Here they are, one per row, with what each one is:

Failure mode (paper's wording)What actually happenedFamily
Points on occupied pixelsAsked to mark vacant space, the model marked the object — it found the anchor and stopped, never testing occupancyPointing
Too few pointsScoring is by coverage of a reference region; one point is a lottery ticket, several spread across the region is a claim about extentPointing
Wrong side of anchorThe anchor was bound correctly, the direction phrase was not applied — "left of" became "near"Pointing
Confused image-plane left with world leftTwo coordinate frames exist and the question specifies one. The model silently used the otherAll three
Answered configuration without binding both objects"Is A above B?" answered from a prior about A and B as categories, without locating B at allConfiguration
Said "fit" without checking clearanceThe warehouse robot's bug. Apparent gap treated as sufficient evidence of fitCompatibility

Read that column of "what actually happened" and notice a pattern. Not one of these is a perception failure in the sense of "the pixels were too hard to see". Every one is a skipped step — a procedure that has a necessary check in it, executed without the check. Which is the single most important observation in the paper, because a skipped step is exactly the kind of thing a sentence can fix.

Why memory is the right tool for this specific problem. If VLM spatial failures were dominated by "could not resolve the geometry from the image", no amount of advice would help — you would need a better encoder or a depth tool, which is route two. But if a large share of failures are procedural omissions, then a note that says "check the clearance before answering fit" converts a failure into a success at zero parameter cost. Chapter 9's atomic-ability breakdown tests exactly this split, and the answer is: mostly procedural, with a hard perceptual floor.

Why a frozen model can be told something it cannot learn

There is a conceptual puzzle sitting under this whole approach, and it is worth resolving before the machinery, because if it does not resolve, nothing else matters.

The puzzle: if the model already knows that fit questions require a clearance check — and it evidently does, since it performs the check correctly when reminded — why does it not perform the check unprompted? And if it does not know, how can a sentence teach it?

The resolution is that "knowing" and "reliably doing" are different, and the gap between them is exactly what in-context guidance closes. A frozen model contains an enormous space of possible behaviours. Which one it produces depends on its input. The capability is present in the weights; the invocation of that capability is a function of the prompt.

 Present in the weights?Invoked by default?Can a sentence change it?
Recognising a desk and a binYesYesIrrelevant
Knowing that fit requires clearanceYesOften notYes — this is the band SMA operates in
Estimating clearance in centimetres from one RGB imagePartially, impreciselyWhen askedNo — a sentence cannot improve a metric estimate

Row two is the whole opportunity, and row three is the ceiling. Chapter 9's atomic-ability numbers put figures on both: +11.2 points on Correspondence, which is almost purely a row-two ability, versus +2.6 on Distance/depth, which is row three. The paper's own failure analysis confirms the ceiling from the other direction: three cases where a relevant memory with TRS ≥ 0.6 was retrieved, the procedure was visibly applied, and the model still misread the pixels.

The general form of the claim. In-context guidance cannot add capability. It can raise the probability that an existing capability is invoked on a given input. So the value of a memory system is bounded by how much of your error rate comes from uninvoked capability rather than absent capability — and for spatial reasoning in current VLMs, the paper's evidence says a substantial fraction is the former.

Two words to define before anything else

A verifier is any function that takes a predicted answer and a known target and returns a scalar reward in [0, 1]. In this paper it is deliberately unglamorous: for a multiple-choice benchmark it is a letter match; for RoboSpatial's pointing questions it is the fraction of predicted points that land inside a reference region. The word "verifier" makes it sound like an oracle. It is a grader.

A verifiable spatial environment is a pile of spatial problems for which you happen to have the answers. That is all. If you have a labelled benchmark split lying around, you have a verifiable environment. The paper's framing is that this pile is not just an evaluation set — it is a place where a frozen agent can go and get experience, the same way an RL agent goes into a simulator, except that nothing about the agent changes except a text file.

The reframing that makes the paper work. A labelled dataset is normally something you either train on (gradients) or test on (no learning). SMA uses it as a third thing: a rehearsal space. The agent runs the problems, gets graded, writes notes, and then goes to a completely different set of problems carrying only the notes. The paper calls those two piles the environment split — written to — and the deployment split — read-only, held out, never written to.

"Why not just write the advice by hand?"

This is the first objection anyone raises, and it deserves a real answer rather than a dismissal, because a version of it is correct.

If you know that the model skips clearance checks, you can write "always compare object extent to available clearance before answering a fit question" into the system prompt yourself. No memory bank, no verifier, no passes. Done in thirty seconds. And in fact the paper's system prompts do contain hand-written procedural advice — the "cross-cutting checks" section, the "reasoning protocol", the family taxonomy. That is all human-authored, and it is present in the No-memory baseline too.

So the question sharpens into: what does the memory bank add on top of the best system prompt a human would write? Three things.

1. You do not know the failure list in advance. The six failure modes tabulated above were not derived from theory; they are what the authors observed. Discovering them requires running the model against a verifier and reading what went wrong — which is precisely what the acquisition loop automates. On a new task family you have never deployed, you have no list.

2. A hand-written prompt cannot scale to the tail. RoboSpatial's 175 environment problems produce up to 175 distinct lessons. You cannot paste 175 sentences into a system prompt: the context cost is real, and worse, most of them are irrelevant to any given question. A model reading 175 pieces of advice, 172 of which do not apply, is being asked to do retrieval in-context with no help. Retrieval is the compression step. It is what makes a large body of specific advice usable at all, by delivering three relevant sentences instead of 175 mostly-irrelevant ones.

3. You cannot tell which of your hand-written rules are working. Write ten pieces of advice and deploy; accuracy moves by some amount. Which of the ten helped? Which one is quietly hurting? Without a per-rule reliability estimate you have no idea. TRS is a measurement instrument as much as a ranking signal: after ten passes you can sort your bank by v and read off which procedures earned their place.

The honest framing. SMA is not "the model teaches itself things a human could not think of". Most individual lessons, read in isolation, look like things a careful engineer would write. The contribution is the loop: automatic discovery of which failures actually occur, automatic scoping of advice to the questions where it applies, and automatic measurement of whether each piece of advice pays for itself. Those three together are not something you do by hand at 175 items, let alone 1,820.

Three routes, side by side

Before the machinery, get a feel for the trade. The simulation below shows the same frozen VLM under all three regimes. Toggle each route and watch what it changes, what it costs at inference, and what happens when the base model is swapped for a newer one next quarter.

Three routes to a better spatial agent

Click a route. The left column is the artefact that changes; the right column is what you carry at inference time. Watch the "base model upgrade" row — it is the row that decides how much of your work survives a provider release.

The one-paragraph version, for later reference

If you read nothing else, read this. Everything after it is elaboration.

Take a labelled set of spatial questions and split it in two. On the first half, let a frozen VLM answer each question, grade it, and then — handed its own answer, the true answer, and the score — write one sentence about how to approach questions of that shape, under rules that forbid mentioning the answer or the scene. That gives you a few hundred sentences. Now run the first half several more times, writing nothing, but recording for each sentence how often it was in the prompt when the answer came out right. Shrink each of those rates toward one half, hard when the evidence is thin. Finally, on the untouched second half, for each new question keep only the sentences whose source question is textually similar enough, rank the survivors by a fifty-fifty blend of similarity and reliability, and paste the top three into the prompt. Change nothing else. Accuracy goes up on twenty of twenty-eight evaluations, and never down.

Every clause in that paragraph corresponds to a chapter. "Write one sentence… under rules" is Chapter 3. "Writing nothing" is Chapter 4. "Shrink toward one half" is Chapter 5. "Similar enough… blend… top three" is Chapter 6. "Change nothing else" is Chapter 7.

What the paper is claiming, stated carefully

It is worth pinning the claim down now, because the abstract is unusually careful and it would be easy to over-read it. The paper claims SMA "achieves the highest macro average in every base-model block and the best accuracy among the evaluated methods in most of the 20 evaluations." Twenty evaluations means five benchmarks times four base models. Most of twenty is not all of twenty, and the appendix table on two further benchmarks contains a block where a baseline beats SMA outright. We will read all of that honestly in Chapter 8.

What is not hedged is the frozen-ness. Four base models — Qwen3.5-9B, Qwen3.5-122B-A10B, Qwen3.6-35B-A3B, Qwen3.6-27B — served through vLLM, at temperature 0, with a maximum of 32,768 new tokens. The same frozen model plays two roles: it solves the tasks, and it writes the memories about its own solutions. No second model, no distillation from a stronger teacher, no expert spatial tool. The only external component is an embedding model, text-embedding-3-large, used once per task string to make retrieval keys.

What changesPost-trainingTool agentSMA
Model weightsYes — a fork you ownNoNo
Inference-time dependenciesNone extraDepth / 3D reconstruction modelsNone extra — one text bank
Gradient stepsManyMany (if the tool policy is RL-trained)Zero
Artefact producedCheckpoint (GBs)Tool policy + tool stackA few hundred text cards
Survives a base-model upgrade?No — retrainPartlyYes — the paper measures this (Ch 9)
What is being optimisedParametersA policy over toolsWhich sentences go in the prompt

The vocabulary, front-loaded

This paper introduces five terms that do not mean quite what they sound like. Getting them straight now saves confusion later, because several of them are near-homonyms of things they are not.

TermSounds likeActually means
Self-evolutionThe model changes itselfAn external text file changes. The model is a fixed function from first call to last
EnvironmentA simulator with dynamics and a policyA pile of labelled questions. There are no episodes, no transitions, no actions — each "rollout" is one model call
RewardAn RL return, discounted over a trajectoryOne scalar in [0, 1] from grading one answer. Nothing is discounted because nothing has more than one step
ReflectionThe model thinking harder about the problemA separate post-hoc call, given the answer key, whose only output is two JSON fields that must not contain the answer
Transfer ReliabilityHow good the lesson isHow often answers came out right when this card was in the prompt — a correlational quantity over co-retrieved sets, not a causal one

That last row is the one to hold onto hardest. TRS does not measure whether a lesson is correct, or whether it caused anything. It measures co-occurrence between a card's presence and a good outcome, across many draws. The paper knows this — Limitation D.1 is exactly this admission — and the mechanism works anyway, for reasons Chapter 5 makes precise.

What you should be able to do by the end

Concretely, so you can check yourself.

All eight are the exit gate in Chapter 10, roughly. If you can do them, you can implement this on a task of your own.

The life of one card, start to finish

Before the formalism, here is the entire paper as a story about a single sentence. Every step here is made precise in a later chapter; the point is to have the shape in your head first.

Day 1 — a failure
Environment problem #47. The model is asked whether a storage bin fits to the right of a desk. It confirms there are empty pixels, answers Yes. The verifier says the answer was No. Reward r = 0.
↓ the same frozen model is now handed its own output, the question, the true answer, and the reward
Day 1 — reflection
Silently: "the gap was confirmed but the object's extent was never compared to it." Publicly, as strict JSON: a summary, and one sentence — "When asked whether A fits in a free-space relation to B, estimate A's extent against the visible clearance, avoid answering yes from apparent gap alone, and validate by naming the obstacle or dimension that would block the fit." The true answer is forbidden from appearing.
↓ the card is appended with n = 0, c = 0, v = 0.5 — exactly the same starting values a card from a successful rollout would get
Days 2–6 — eighteen visits
On later passes the card is retrieved for other compatibility questions on other images. Fourteen of the eighteen produce correct answers. Its score climbs: after visit 1 it reads 0.667, dips to 0.500, and settles at v = (1 + 14)/(2 + 18) = 0.750.
↓ writing has long since stopped; these passes only measure
Day 7 — deployment
A never-before-seen question arrives: "Can the crate fit behind the pallet jack?" Cosine similarity to the stored question is 0.71 — above the threshold, but only fourth-most-similar in the bank. Its TRS of 0.750 is above the candidate average, so the blended score lifts it into the top three. It goes into the prompt.
Day 7 — the payoff
The model reads the procedure before it reads the question. It estimates the crate's width, compares it to the visible clearance behind the jack, names the handle assembly as the blocker, and answers No. Correct. Nothing is written; n, c, and v do not move. The warehouse robot does not push the printer off the shelf.

Every design decision in the paper is visible in that story if you know where to look. The card is a procedure, not an answer, because rules forbade the answer. It started at 0.5 despite being born from a failure, because source correctness is not transfer reliability. It was chosen over more-similar cards, because similarity is not the whole ranking. And on day 7 nothing was learned, because deployment is read-only.

The whole system runs on inference hardware

One more grounding detail before the map, because it makes the "no gradients" claim tangible rather than rhetorical. The paper reports its infrastructure: a Linux server with four NVIDIA H200 GPUs, 143,771 MiB of device memory each, two Intel Xeon Platinum 8558 CPUs (192 logical threads), 2.0 TiB of system memory. Ubuntu 22.04.5, CUDA 12.8, PyTorch 2.11.0, vLLM 0.20.0, Transformers 5.8.1.

Four H200s is a serving box. It is enough to hold a 122B mixture-of-experts model for inference under vLLM's paged attention. It is not a training rig for a model that size — training would need optimiser state and activation memory on top of the weights, several times over. The compute footprint is itself evidence for the claim: whatever this system is doing, it is not backpropagating through a 122B model on four cards.

And the decoding settings are worth pinning now because they recur: temperature 0, top-p 1, top-k disabled (−1), repetition penalty 1.5, presence penalty 1.0, maximum 32,768 new tokens. Greedy decoding everywhere — which will matter in Chapter 7 when we ask what the variance in a TRS estimate is actually made of.

The map of this lesson

Chapters 1–3 — build the memory
The six-field card and why each field exists → the environment split and how experience is earned → the reflection contract, including the anti-leakage rules that stop a memory becoming an answer key
Chapters 4–7 — the two showcases
One-pass versus continual writing (and the arithmetic of why it matters) → TRS derived by hand from a shrinkage estimator → the two-stage retrieval that beats similarity → the read-only deployment contract
Chapters 8–10 — interrogate it
All 20 evaluations including the ones SMA loses → every ablation and what each one licenses you to conclude → the paper's own limitations and where this sits in the lineage

Why this paper is possible in 2026 and was not in 2023

Agentic memory is not a new idea. Generative Agents (2023) gave simulated characters a memory stream. Reflexion (2023) had an agent write verbal self-critiques and reuse them. Voyager (2023) accumulated a skill library. MemGPT (2024) treated context as a paged memory hierarchy. The paper cites all of these in its related work. So what changed?

IngredientThenNow
A frozen model good enough to follow a procedureAdvice in-context often confused more than it helped — and Chapter 8's 9B block shows the residue of that problemInstruction-following at 9B is strong enough that "estimate extent against clearance" is an executable instruction, not a suggestion
Verifiable multimodal environmentsSpatial benchmarks were small or purely diagnosticRoboSpatial, ERQA, Omni3D, SAT, EmbSpatial, SITE, ViewSpatial — seven benchmarks with programmatic verifiers, several released 2025–2026
Cheap high-throughput inference1,400 calls to a 122B model was a budget itemvLLM paged attention on four H200s makes multi-pass acquisition routine
Strong text embeddersRetrieval keys were noisier, so a fixed similarity threshold was harder to trusttext-embedding-3-large makes a per-benchmark δ a stable operating point
An established memory-agent baseline setNothing to compare againstMemP and MemRL exist as named methods with reproducible interfaces — which is what makes the ablation ladder possible

The genuinely new contribution is narrower than the surrounding machinery. Reflection existed. Retrieval existed. Procedural memory existed. What did not exist was a per-memory reliability estimate calibrated from downstream retrieval outcomes rather than from the episode that produced it — and the observation that ranking by it beats ranking by similarity. Everything else in the paper is careful assembly of parts that were already lying around.

How to read the related-work section, generally. When a paper lists a dozen predecessors, the useful question is not "what is new" but "which single sentence, if you deleted it, would make the results go away". Here it is the TRS update rule and the η term that consumes it. Delete those and you have MemP, which is in the results table, three macro points lower, and negative on two atomic abilities.

How to read the rest of this lesson

Eleven chapters is a lot. Depending on why you are here, different subsets matter.

If you are…ReadSkim
Implementing this on your own verifiable task1 (the card), 3 (the reflection contract), 5 (TRS, with the code), 6 (retrieval, with the code), 7 (the deployment contract)8, 9 — but read the delta table in 8, because "never worse than no memory" is the property you will be judged on
Reviewing or citing the paper8 (every cell, including the losses), 9 (what each ablation licenses), 10 (the authors' own limitations)1–7, returning to 5 and 6 for the mechanisms the ablations touch
Deciding whether to build it0 (the three routes), 2 (the budget arithmetic), 8 (the delta table), 10 (the decision table)3–7 for the mechanism once you have decided
Here for the statistics5 — the shrinkage estimator, its five required properties, and the worked examplesEverything else; the estimator stands alone
Here for the retrieval design6 — filter-then-rank, and why the filter is the most valuable component in the ablationsThe rest, though Chapter 4's coverage arithmetic is what makes TRS estimable at all

Every chapter ends with a quiz that is answerable from that chapter alone, and Chapter 10 carries a glossary, a full symbol cheat sheet, and a build recipe, so you can leave and come back.

SMA is described as "parameter-update-free self-evolution". Which statement most precisely captures what is evolving?

Chapter 1: What a Memory Is

Start with the object, because everything else in the paper is a function of it. SMA maintains a memory bank — written ℋ in the paper — which is a list of cards. Each card is one rollout, compressed. Formally:

mi = ( ti , si , li , ni , ci , vi )

Six fields. It would be easy to skim that line, and it is the whole design, so let us take the fields one at a time and ask what breaks if you remove it. That question — what breaks — is not rhetorical here, because the paper ablates three of the six and reports exactly how much accuracy each one is worth.

t — the source task text (the retrieval key)

The first field is the natural-language task from the problem that produced this card. Not the image. Not the answer. The question string.

Its job is to be a key. At retrieval time SMA embeds the current question, embeds every stored question, and takes cosine similarities. That means the field has a dual life: it is human-readable text that gets shown to the model as context ("here is the shape of question this lesson came from"), and it is the thing whose embedding decides whether this card is even a candidate.

Note the deliberate omission. The image is not stored and not embedded. This is a real design decision with a real consequence: two questions about totally different rooms with the same phrasing are near-neighbours, and two questions about the same room with different phrasings are not. The paper leans into this. A memory is supposed to be about the shape of the question, not the scene. The retrieval prompt says so out loud: "Match each memory to the structural shape of the current question … not to similar object nouns alone."

s — the summary

One or two sentences abstracting the task shape and the diagnosed success or failure mode. The reflection prompt in the appendix specifies it exactly: "summary: 1-2 sentences on task shape + diagnosed habit/gap (reasoning-level, not the answer)."

Remove it and RoboSpatial accuracy falls 3.2 points (68.5 → 65.3) on Qwen3.6-27B; on Omni3D it falls 1.6 points (47.6 → 46.0). So the summary earns its place, but it is the cheapest of the three text fields to lose. That is a coherent picture: the summary is context that helps the model decide whether the lesson applies, but the lesson is what actually changes the reasoning.

l — the transferable lesson

This is the payload. The reflection prompt constrains it to a single sentence in a fixed grammar:

"When <shape>, apply <habit>, avoid <trap>, validate by <check>."
— the exact template from the paper's reflection prompt, with the note "This is the part the future agent will actually use."

Four slots, and each slot does a different job. Shape is the trigger condition — it tells a future reader whether this lesson is even relevant. Habit is the positive procedure. Trap is the negative — the specific error mode diagnosed in this rollout. Check is a verification step, which is what turns a piece of advice into something the model can actually execute and confirm.

Go back to the warehouse robot from Chapter 0. The lesson that episode should have produced is not "the toolbox does not fit to the left of the printer" — that is an answer, useless on a new shelf. It is something closer to: "When asked whether object A can be placed in a free-space relation to object B, estimate A's extent against the visible clearance rather than confirming that empty pixels exist, avoid answering yes from apparent gap alone, and validate by naming the obstacle or the dimension that would block the fit." That sentence transfers to any shelf, any warehouse, any pair of objects.

Remove the lesson field and RoboSpatial drops 3.5 points; Omni3D drops 5.2. On Omni3D — open-answer 3D reasoning, the hardest benchmark in the set — the lesson is worth more than three times the summary.

n, c, v — the reliability state

The last three fields are numbers, and they are the part that has no analogue in ordinary RAG.

Read those definitions again and notice what is not in them. None of the three refers to whether the rollout that created the card was correct. A card written from a catastrophic failure and a card written from a clean success start life with identical n, c, and v. The paper is explicit: "a memory is not assigned a higher or lower initial TRS solely because the rollout that created it was correct or incorrect." Chapter 5 is entirely about why.

The asymmetry: what is stored versus what is shown

Here is the detail that separates SMA from a transcript cache, and it is one sentence in the paper: "Retrieved memories expose only the task, summary, and transferable lesson; it does not expose prior predictions or verified answers."

The card stores six fields. The prompt receives three of them, plus one derived number. Everything else is machinery the model never sees. And the paper goes further than silently omitting the prior output — the retrieval template contains an explicit placeholder line:

[Memory {rank}] task_similarity={similarity:.3f}
  - prior_task_shape: {task}
  - transferable_lesson: {transferable_lesson}
  - abstract_summary: {summary}
  - prior_model_output: [hidden; do not reuse prior coordinates, Yes/No, or wording]

That last line is doing something subtle. It could simply have been left out. Instead the template shows the model a field that exists and is deliberately withheld, and names the specific failure it is guarding against. This is a prompt-engineering choice with a testable consequence, and the paper tests it: the "+ model output" ablation puts the raw rollout back in, and accuracy falls 4.4 points on RoboSpatial and 2.0 on Omni3D. More information, worse performance.

Why more context hurts here. A prior model output on a different image contains a concrete answer — a "Yes", a coordinate list, a letter. In-context, concrete tokens are strong attractors: the cheapest way to produce a plausible answer is to echo one you can see. The card is supposed to change how the model reasons, and the raw output invites it to skip reasoning entirely. Hiding the output is not information loss, it is removal of a shortcut.

The card, laid out

Anatomy of one memory card

Click any field to see what it is for, what reads it, and what the paper reports when you remove it. Fields on the left of the divider are injected into the prompt; fields on the right never reach the model.

Why the key is the question, not the lesson

Here is a design decision that is easy to miss because the paper states it without comment: retrieval compares ψ(ti) to ψ(tj) — the current question against the stored question. Not the current question against the stored lesson.

Those are different systems. Consider the alternative — embed the lesson text and match the incoming question against it. That is closer to how a document-retrieval system works, where the query and the corpus live in different spaces and you rely on the embedder to bridge them.

Question-to-question matching is symmetric retrieval: both sides of the cosine are the same kind of object, produced by the same distribution of text. That has two consequences worth naming.

The cost of this choice is real and shows up in the limitations. A lesson that would generalise beautifully to a differently-worded question will not be retrieved, because retrieval never sees the lesson. And nothing about the image participates — two questions about geometrically identical scenes phrased differently are far apart. The obvious extension is a multimodal or hybrid key; the paper does not take it.

The design space, field by field

To see why the card is shaped this way, walk the alternatives. Each row is a design SMA did not choose, and what it would cost.

ChangeWhat it would meanWhat breaks
Store the image alongside tVisual retrieval keysStorage and compute grow; and lessons would start matching on scene appearance rather than question shape — the opposite of what the reflection prompt's rule C works to prevent
Store the ground-truth answer in the cardCards become answer keysEverything. The whole design is arranged so this cannot happen
Expose TRS to the model"This lesson has reliability 0.91"Unclear benefit and a clear risk: a model told a lesson is 91% reliable may weight it against present visual evidence, which every instruction in the retrieval prompt is trying to prevent
Merge n and c into just vStore the score, drop the sufficient statisticsYou could no longer update correctly — the shrinkage formula needs n and c separately, and an incremental update on v alone would have to become an EMA, breaking order invariance
Store multiple lessons per cardRicher cardsRetrieval granularity collapses: you can no longer credit or discredit an individual procedure, so TRS would average over several lessons of differing quality
Store the reflection's private diagnosisMore context on why the lesson existsThe diagnosis is scene-specific by construction — that is what the two-step prompt separates out. Storing it re-imports the rule-C violation

Read down the "what breaks" column and a theme emerges: almost every alternative fails by reintroducing scene specificity or by destroying the granularity at which reliability can be measured. The six fields are close to the minimum set that supports both "this is a procedure, not a memory of an event" and "we can measure whether it works".

Concept and realisation: what actually flows

Let us make the data flow completely concrete, because "a memory bank" is the kind of phrase that hides a lot of plumbing.

StageObjectConcrete type
Problemξi = (𝒱i, ti, yi)one or more RGB images; a question string; a target (letter, Yes/No, number, or point list)
Keyψ(ti)a dense vector from text-embedding-3-large, precomputed once per task string
Candidates𝒞ia subset of the bank — every card whose key has cosine ≥ δ with this key
Guidance𝒜itop-k cards (k = 3), rendered as text and prepended to the user prompt
Model calloi = F(𝒱i, ti, 𝒜i)one vLLM chat completion, temperature 0, max 32,768 new tokens
Predictionŷi = Parse(oi)the contents of the final <answer>…</answer> tag
Rewardri = Eval(ŷi, yi)a float in [0, 1] — exact match, or point coverage inside a reference hull

Two things are worth staring at. First, the memory bank is text. Not a fine-tuned adapter, not a set of key-value caches, not activations. A few hundred JSON objects. You could open it in a text editor and read it, and the paper's qualitative appendix does exactly that.

Second, F is called with 𝒜i as an argument. That is not decoration — it means the guidance is part of the input to a frozen function, which is precisely why nothing needs to be trained. The model's behaviour changes because its input changed. That is the entire mechanism.

The one-sentence version. SMA turns "make the model better" into "make the prompt better", and then turns "make the prompt better" into a bandit problem: you have hundreds of candidate sentences, you can only afford three, and you find out which three work by trying them and watching what the verifier says.

What three cards look like as tokens

Abstract descriptions of "guidance" hide how small this actually is. Here is the memory context as it is composed at runtime, with the template's placeholders filled in for one card. This is the literal shape of 𝒜i as text:

Relevant memories from prior RoboSpatial rollouts (different images):
Treat these as procedural notes, not answer keys.
- Match each memory to the *structural shape* of the current question…
- High task similarity does NOT license copying prior coordinates or Yes/No…
- Extract at most one check or one trap per memory, then re-derive…

[Memory 1] task_similarity=0.741
 - prior_task_shape: "Can the storage bin fit to the right of the desk?"
 - transferable_lesson: "When asked whether A fits in a free-space relation to B,
   estimate A's extent against visible clearance, avoid yes-from-apparent-gap,
   and validate by naming the obstacle or dimension that would block the fit."
 - abstract_summary: "Placement-compatibility shape; the rollout confirmed empty
   pixels but never compared object extent to clearance."
 - prior_model_output: [hidden; do not reuse prior coordinates, Yes/No, or wording]

…×3…

Memory-use (silent):
- If no memory fits the shape, ignore them.
- Re-derive the answer from the current image only.
- End with exactly one line: `<answer>…</answer>`

Count it. Header and footer are fixed overhead, maybe 150 tokens. Each memory block is roughly 90 to 120 tokens. Three cards is around 400 to 500 tokens prepended to a prompt with a budget of 32,768 new tokens and an image worth hundreds or thousands of vision tokens.

That is the entire intervention. A half-kilotoken of English. Against it, Chapter 8 will report a 14.4-point accuracy gain on RoboSpatial. It is worth holding both numbers in mind simultaneously, because the ratio is what makes the paper interesting.

Also note what is not in the block. No image from the source problem. No coordinates. No Yes/No. No TRS value — the model never sees a card's reliability score, only the consequence of it, which is that this card is here and some other card is not. The reliability machinery is entirely invisible to the model; it acts purely through selection.

The model is told what to do with each family's cards

The footer of the retrieval block is not generic. It gives per-family instructions for converting a lesson into an action, and reading it makes concrete what "use the memory" is supposed to mean. RoboSpatial's:

FamilyInstruction (paper's wording)What it converts a lesson into
Pointing"turn memories into checks — anchor object, correct side, multiple points in vacant pixels, stay in [0, 1]"A four-item checklist executed before emitting coordinates
Configuration"bind both objects, test the stated relation verb against pixels"Two grounding operations that must complete before a Yes/No is allowed
Compatibility"estimate clearance and obstacles before Yes/No"A measurement step inserted ahead of the decision
Any / none"If no memory fits the shape, ignore them. Re-derive the answer from the current image only."An explicit escape hatch

Notice the verb in the first row: turn memories into checks. That is the whole intended semantics of a card in five words. Not "recall what happened", not "match this to a previous case" — convert a sentence into a sequence of operations you perform on the current image.

And notice the escape hatch. "If no memory fits the shape, ignore them" is permission to discard the guidance entirely. Without it, a model handed three cards would feel obliged to use them — retrieved context reads as relevant by default. The instruction converts the guidance from an assertion into an offer.

This is why the memory context can be safely non-empty even when it is unhelpful. The filter guarantees topical relevance and the ranking guarantees demonstrated reliability, but neither guarantees the card applies to this question. The escape hatch is the third layer: when both automated checks pass and the card is still wrong for the case, the model has been explicitly authorised to drop it.

The four baselines, by which fields they carry

The paper's baseline set is unusually well designed, and it is easiest to understand as an ablation ladder over the card's six fields. Each baseline drops or changes something specific.

MethodReflection?Sees target at write time?Exposes prior output?Reliability score?Isolates
No memoryThe floor
RAGNo — stores raw rollout recordsNoYes — provides prior task and prior model outputNoWhat episodic replay alone buys (sometimes: less than nothing)
MemPYes — summary + transferable lessonYesNoNo — similarity-only retrievalThe value of reflected procedure text, without calibration
MemRL-RYesNo — reward-only reflectionNoRuntime memory-value updatesValue updates under a weak reflection signal
MemRL-GTYesYesNoRuntime memory-value updatesSeparates reflection supervision from TRS-style calibration
SMAYesYesNoTRS — visit-evidence calibrated, semantic filter + combined ranking

MemRL-GT is the baseline the authors added themselves, and they say why: "Since the original MemRL uses reward-only reflection, we implement MemRL-GT, which provides ground-truth answers during reflection for fair comparison." Constructing a stronger version of your closest competitor, so that your own margin shrinks, is the right thing to do and not a common one. It is also why Chapter 8's honest reading is possible at all — MemRL-GT is the baseline that beats SMA twice.

Every field, and the number attached to it

Before moving on, put the whole card on one page with the paper's measured value for each field. This is the summary to come back to.

FieldTypeSet whenChanged byRead byMeasured worth
t — taskstringWriteNeverFilter (as ψ(t)); the model (as text)Not ablated — removing it removes retrieval
s — summarystringWriteNeverThe model−3.2 RoboSpatial, −1.6 Omni3D
l — lessonstringWriteNeverThe model−3.5 RoboSpatial, −5.2 Omni3D
n — visitsintWrite (= 0)Every retrieval during acquisitionThe TRS update onlySets confidence n/(λ+n)
c — reward sumfloatWrite (= 0)Every retrieval during acquisitionThe TRS update onlyWith n, the complete sufficient statistic
v — TRSfloatWrite (= 0.5)Recomputed on every visitCombined ranking only~3.0 macro points vs MemP, and it is what stops memory going negative
(the field that does not exist) — the prior model output−4.4 / −2.0 to add it

The last row is the most instructive line in the table. It is a field the design deliberately does not have, and the paper measured what happens if you add it: accuracy falls on both benchmarks. That is unusual and worth crediting — papers rarely ablate features they chose not to build.

Read the "Changed by" column top to bottom and the card's split personality is obvious: three fields are immutable text set once at write time, and three are mutable numbers that move on every retrieval. The bank is a set of frozen sentences with a live score attached to each. Chapter 4 is about keeping the sentences frozen; Chapter 5 is about the score.

Why the paper calls this procedure memory

There is a taxonomy in cognitive science, borrowed wholesale by the agent-memory literature, worth knowing because it is where the paper's title comes from.

Memory typeHoldsAgent analogueTransfers to a new scene?
EpisodicWhat happened, once, with specificsA stored rollout transcript — the RAG baselinePoorly — the specifics are wrong for the new scene
SemanticFacts about the worldA knowledge base of retrieved documentsOnly if the fact is scene-independent
ProceduralHow to do a thingThe transferable lesson fieldBy construction — it names a question shape, not a scene

The RAG baseline in this paper is exactly the episodic option: it "stores lightweight prior rollout records" and at deployment "provides the prior task and prior model output" with no reflection and no TRS. It is the control that isolates what reflection buys. And it is the baseline that sometimes loses to having no memory at all.

MemP (Fang et al. 2026), the strongest text-side prior work here, is the procedural option without the reliability machinery: it reflects rollouts into summaries and transferable lessons, then retrieves them by semantic similarity only. That makes MemP the single most informative baseline in the paper, because SMA minus TRS is approximately MemP. Every point of the gap between them is attributable to reliability-aware selection.

The bank as a file on disk

To make "the memory bank is text" completely unambiguous, here is one card as it would be serialised. Nothing in this object is a tensor.

{
  "task": "Can the storage bin fit to the right of the desk?",
  "summary": "Placement-compatibility shape; the rollout confirmed empty pixels
               but never compared object extent to available clearance.",
  "transferable_lesson": "When asked whether A fits in a free-space relation to B,
               estimate A's extent against the visible clearance rather than confirming
               that empty pixels exist, avoid answering yes from apparent gap alone,
               and validate by naming the obstacle or the dimension that would block it.",
  "n": 18,          // visits — later retrievals, not writes
  "c": 14.0,        // cumulative reward over those visits
  "v": 0.750        // = (2*0.5 + 14.0) / (2 + 18)
}

Three consequences follow from the bank being this rather than a checkpoint.

It is auditable. You can read every lesson your system has learned, in English, and disagree with any of them. Compare that with a fine-tuned model, where "what did it learn" is answerable only by probing behaviour. If a lesson is wrong, you can see it is wrong before it causes a failure.

It is portable. A few hundred JSON objects moves anywhere. Chapter 9 measures exactly this: a bank written by a 122B model gives a 27B model +9.4 points on RoboSpatial. Try that with a LoRA adapter.

It is editable by hand. Nothing prevents you from deleting a card, rewriting a lesson, or seeding the bank with human-authored entries at v = v0 and letting visit evidence judge them alongside the machine-written ones. The paper does not explore this, and it is one of the more obvious things to try — the mechanism does not care where a sentence came from.

The states a card passes through

One card, four states, and the transitions between them are the whole system from the card's point of view.

Born
Written on pass 0 from one verifier-scored rollout. n = 0, c = 0, v = v0 = 0.5 — identical whether the rollout succeeded or failed.
↓ retrieved for some later problem, which is graded
Calibrating
n and c accumulate. v is mostly prior while n < λ, mostly evidence once n >> λ. This is the only state in which the card changes.
↓ acquisition ends
Frozen — and either promoted or demoted
A card whose visits went well carries a high v and wins slots against nearer but unproven cards. A card whose visits went badly carries a low v and stops being selected, though it is never deleted.
↓ deployment
In service, read-only
Retrieved or not; n, c, v never move again. Its only remaining effect is which three sentences reach the prompt.

Notice there is no dead state. A card with a terrible track record still sits in the bank, still gets compared against every query, and can still be retrieved if the candidate set is weak enough. That is Limitation D.2 — no deletion, no merging, no expiry — visible in the state machine as a missing arrow.

A memory card stores six fields but the prompt receives only three of them. Adding the fourth — the raw prior model output — is measured as an ablation. What happened, and what is the best explanation?

Chapter 2: Earning Experience

A memory bank is only as good as the experience that filled it. This chapter is about where that experience comes from, and it hinges on a split that is easy to state and easy to get wrong.

Two piles, disjoint

The paper defines 𝒳 as the environment split and 𝒟 as the deployment split, and says they are disjoint. The environment split is where memories are written. The deployment split is where all reported numbers come from, and where nothing is ever written.

Why does this matter enough to be the first sentence of the method section? Because without it the entire result is uninterpretable. If a memory could be written from a deployment problem and then retrieved for that same problem, "memory" would just be a cache of answers, and the accuracy gain would measure nothing but leakage. The disjointness is what makes the phrase "transferable lesson" checkable rather than aspirational.

The split is the experiment. Every number in this paper is measured on 𝒟. Every memory in the bank was written from 𝒳. A lesson that only works on the problem that produced it contributes exactly zero to the reported accuracy. This is why the paper can talk about "transfer" without hand-waving.

The actual splits, with real counts

The construction rule is mechanical, and stating it precisely is worth the space because it is what a reproduction would need. For all non-SAT benchmarks: take the retained image-question pool, split it 50/50 per category with seed 42, and where a category has an odd count, alternate the leftover between environment and deployment, environment first.

BenchmarkOriginal poolUsed poolEnvironment 𝒳Deployment 𝒟
RoboSpatial350350175175
ERQA400400200200
Omni3D501501251250
SAT4001 val + 150 test300 + 300300300
EmbSpatial3640364018201820
SITE-image8068444922252224
ViewSpatial5712571228562856

SAT is handled differently and the paper says why: it follows the official protocol, where the test split is the circular-expanded official test set (150 items expanded to 300 rows) and serves as deployment, while the environment split is sampled from the 4001-item validation pool to match the deployment question-type distribution.

Look at the RoboSpatial row for a moment. 175 environment problems. That is the entire experience budget behind a 14.4-point accuracy gain. Not 175 thousand — 175. This is one of the quieter results in the paper and worth carrying forward: the memory bank that lifts Qwen3.6-27B from 54.1 to 68.5 on RoboSpatial is at most 175 text cards.

What one problem looks like

A spatial problem is a triple:

ξi = ( 𝒱i , ti , yi )

𝒱i is one or more visual inputs — a single RGB image for RoboSpatial and Omni3D, one or two ordered stills for SAT, potentially several views of one scene for ViewSpatial. ti is the natural-language task. yi is the verified target.

The seven benchmarks were not chosen for uniformity — they were chosen to be awkwardly different from each other, which is the point. Here is what each actually asks:

BenchmarkInputAnswer spaceWhat it stresses
RoboSpatialSingle indoor RGB imageOpen — a normalised point list, or Yes/NoFree-space localisation, object–object configuration, placement compatibility — robot-relevant home scenes
ERQAInterleaved text and image(s)Single capital letterRobot state, action, trajectory — whether an answer supports a physical decision
Omni3DSingle real-world RGB imageOpen — number, Yes/No, or short phraseMetric estimates, relative distance, occlusion, containment, surface capacity, counterfactual placement
SATOne or two ordered stillsBinary multiple choiceGoal inference, action consequences, perspective, object and ego movement — dynamic, not static
EmbSpatialImage QARelation labelleft, right, above, under, close, far — language-grounded embodied relations at scale
SITE-imageImage-only split of SITEMixed3D information, counting, movement prediction, navigation, multi-view, localisation, relations
ViewSpatialPossibly several views of one sceneMixedCamera-relative and person-relative direction, object orientation, scene simulation

RoboSpatial and Omni3D having open answer spaces is why the paper reports accuracy rather than a per-benchmark metric zoo: accuracy, it argues, "directly measures end-task success across both discrete-answer benchmarks and RoboSpatial's open pointing subset."

Why seven benchmarks, and why five in the main table

The paper evaluates seven benchmark slices but reports five in the main table, with SITE-image and ViewSpatial relegated to an appendix. That split is worth understanding rather than assuming it is arbitrary.

The five in the main table were chosen to "cover complementary spatial reasoning settings, including embodied robot perception, physical scene understanding, 3D spatial relations, abstract spatial aptitude, and instruction-grounded embodied spatial reasoning." Five settings, five benchmarks, one each. It is a deliberately spanning set rather than a convenience sample.

SettingBenchmarkWhat a failure would mean for a robot
Embodied robot perceptionRoboSpatialIt cannot find free space to put something down
Physical scene understandingERQAIt cannot tell whether an action it just took had the intended effect
3D spatial relationsOmni3DIt cannot estimate whether something will fit, reach, or occlude
Abstract spatial aptitudeSATIt cannot predict what a scene looks like after it moves
Instruction-grounded embodied reasoningEmbSpatialIt cannot follow "put it to the left of the shelf"

The two appendix benchmarks add stress rather than coverage. SITE-image is the image-only split of SITE (8,068 rows filtered to 4,449 image questions), spanning 3D information, counting, movement prediction, navigation, multi-view reasoning, localisation, and relations — a broad grab-bag. ViewSpatial is narrower and harder: multi-perspective localisation, where "each example may contain multiple views of the same scene" and the model must answer about camera-relative direction, person-relative direction, object orientation, and scene simulation.

ViewSpatial is where SMA loses twice in Chapter 8, and its structure is the reason to notice. It is the only benchmark in the set where the same scene appears in several views, which means the reasoning is a frame transformation rather than a check on a single image. Whether procedural memory is a good fit for frame transformations is a genuinely open question, and the appendix table is the only place the paper touches it.

Note also the pool sizes. EmbSpatial (3,640), SITE-image (4,449 retained), and ViewSpatial (5,712) are an order of magnitude larger than RoboSpatial (350) and ERQA (400). So the macro average over five benchmarks weights a 350-item benchmark exactly as heavily as a 3,640-item one. That is a defensible choice — it treats each setting equally rather than each question — but it means the headline averages are not question-weighted, and RoboSpatial's large gains carry a fifth of the weight despite being measured on 175 deployment items.

The acquisition loop — and its one surprising feature

Here is the loop, in the order the pseudocode gives it, for each problem in the environment split:

1. Retrieve first
Filter the current bank by similarity, rank by combined score, take the top k. Yes — during acquisition, before this problem has taught anything.
2. Call the frozen VLM
oi = F(𝒱i, ti, 𝒜i), then ŷi = Parse(oi)
3. Grade it
ri = Eval(ŷi, yi) ∈ [0, 1]
4. Pay the retrieved cards
Every card in 𝒜i gets n += 1, c += ri, and a recomputed TRS. This happens on every pass.
5. Reflect — only on pass 0
If this is the first pass, write a new card from this rollout. Otherwise skip. Chapter 4 is about why.

Step 1 is the surprising one. The agent retrieves memory while it is still acquiring memory. The paper states it plainly: "During experience acquisition, each spatial problem is solved with retrieval enabled."

Think about what this buys. If retrieval were disabled during acquisition, every card would be born with n = 0 and stay there — no card would ever be visited during writing, so TRS could only be calibrated at deployment, where the paper forbids updates. The reliability scores would be uniform forever and the whole mechanism would be dead. Retrieval-during-acquisition is what makes visit evidence exist at all.

It also creates a genuine coupling that the paper does not hide: a card written early is retrieved by later problems in the same pass, so early cards accumulate more visits than late ones. The prior strength λ in the TRS update exists partly to keep low-visit cards from being unfairly frozen at their initial value while high-visit cards race ahead.

The shuffle, and why it has a seed

Line 3 of the pseudocode is easy to skip: 𝒳̃e ← Shuffle(𝒳; seed = e). Every pass reshuffles the environment split, with the pass index as the seed.

Why reshuffle at all, if the model is deterministic at temperature 0 and the same problems are seen every pass?

Because the bank state changes between problems, and therefore order matters. On pass 0 the bank grows as you go: problem 1 is solved with an empty bank, problem 175 is solved with 174 cards available. On later passes the bank is fixed but the TRS values are moving continuously — card values after problem 50 differ from their values after problem 51. So the retrieval a given problem receives depends on where it sits in the sequence.

Reshuffling per pass means those position effects are randomised rather than baked in. A problem that happened to come first on pass 0 — and so contributed a card written with no guidance at all — will be somewhere in the middle on pass 1. Over ten passes, position-induced bias averages out instead of compounding.

Seeding by the pass index makes this reproducible: pass 3 always has the same order, so a re-run reproduces the same bank and the same TRS trajectory. Together with temperature 0 and a fixed split seed of 42, the entire pipeline is deterministic end to end — which is a stronger reproducibility property than most agent papers offer.

An ordering effect the shuffle cannot remove. Cards written early on pass 0 exist for more of pass 0 than cards written late, so they collect more visits during the writing pass specifically. Reshuffling later passes dilutes this but does not erase it: after ten passes an early card might have 31 visits and a late one 29. Small, and λ makes the resulting TRS difference smaller still — but it is a real asymmetry that a strict implementation would want to be aware of.

What "verifiable" does and does not admit

The word "verifiable spatial environment" carries a lot of weight, so it is worth marking its boundary precisely. The requirement is a function Eval(ŷ, y) → [0, 1]. That is it. In exchange, the requirement excludes several things you might want.

AdmittedNot admitted
Any labelled benchmark splitTasks whose success is a matter of judgement with no reference answer
Simulators that can check an outcome (did the placement succeed?)Open-ended tasks where "correct" is not a well-defined predicate
Programmatically checkable outputs — coverage, containment, geometryLong-horizon tasks where reward arrives only at the end of many steps (SMA's rollouts are single-turn)
Partial credit, as long as it is bounded in [0, 1]Unbounded or negative rewards — the shrinkage formula assumes [0, 1]
Any modality, in principle — nothing in the mechanism is visualSettings with no held-out environment split, since deployment must be disjoint

That last row of the left column is worth pausing on. Nothing in the memory mechanism is specific to vision. The card is text, the key is a text embedding, the verifier is a scalar function, the update is arithmetic. Spatial is the domain in which the paper demonstrates it, motivated by the observation that spatial failures are heavily procedural. The machinery would transfer to any verifiable single-turn task; whether the gains would is an empirical question the paper does not attempt.

Worked example 1 — the cost of an experience budget

Let us count model calls, because "training-free" does not mean "free". Take RoboSpatial on Qwen3.6-27B, with the paper's hyperparameters: 175 environment problems, 175 deployment problems, k = 3 retrieved cards, and the RoboSpatial pass count from the hyperparameter table.

Solver calls during acquisition. One call per problem per pass. The 122B hyperparameter table lists 6 passes for RoboSpatial:

175 problems × 6 passes = 1,050 solver calls

Reflection calls. Only on pass 0, one per problem:

175 × 1 = 175 reflection calls

Deployment calls. One per deployment problem, no reflection:

175 deployment problems × 1 = 175 solver calls

Total: 1,400 calls to a frozen model. Compare that with the alternative. Post-training a 27B model on spatial data means assembling a dataset, running optimiser steps with activations and gradients and optimiser state resident in memory, and then evaluating. The paper's whole compute footprint is four H200 GPUs running vLLM inference — no backward pass appears anywhere.

Now the visit budget, which is the number that actually matters. Every solver call during acquisition retrieves k = 3 cards, and each retrieved card gets a visit update. So over 6 passes:

1,050 solver calls × 3 cards each = 3,150 visit updates
3,150 updates ÷ 175 cards = 18 visits per card on average

Eighteen visits per card. Hold on to that number — in Chapter 5 we will see that the confidence weight in the TRS estimator is n/(λ + n), so with λ = 2 and n = 18 that is 18/20 = 0.9. The score is ninety percent empirical and ten percent prior. The calibration has genuinely converged. In Chapter 4 we will compute what happens to that number under the alternative writing protocol, and it is the whole argument.

A useful sanity check on any memory system. Divide total retrievals by bank size. If the quotient is small, most of your cards have never been evaluated and your reliability scores are noise. SMA's design decisions — retrieval during acquisition, multiple passes, one-pass writing — are all in service of keeping that quotient large.

The verifier, concretely

Eval is not one function; it is per-benchmark. For ERQA, SAT, EmbSpatial, and ViewSpatial the answer is a letter or a relation label and the reward is a match: 1 or 0. For RoboSpatial's Yes/No families the same. RoboSpatial's pointing family is the interesting one: the system prompt specifies that "pointing is scored by coverage inside the reference region (convex hull by default)", and that "scattered valid free-space points beat a single guess on the object boundary". That gives a genuinely fractional reward — which is why the update rule is written for r ∈ [0, 1] rather than r ∈ {0, 1}.

This matters for the TRS arithmetic. If rewards were binary, cumulative reward c would be an integer count of successes and TRS would be a beta-binomial posterior mean. With fractional rewards the same formula still works — it is just a shrunk mean of bounded scores rather than a success count.

Algorithm 1, line by line

The paper's appendix gives the whole system as twenty-two lines of pseudocode. Every mechanism in this lesson is in there, so it is worth walking it once now — forward references and all — and then returning to it after Chapters 5 and 6 make the two unexplained lines make sense.

Inputs: a frozen VLM F, a reflection model Rφ, environment problems 𝒳, deployment problems 𝒟.
Parameters: passes T, retrieval size k, similarity threshold δ, reliability weight η, initial memory value v0, prior strength λ.

LinePseudocodeWhat it is doing
1Initialize ℋ ← ∅Empty bank. The first problem of the first pass will be solved with no guidance at all.
2for e = 0 to T−1The pass loop. T is the per-benchmark pass count (2 to 10).
3𝒳̃e ← Shuffle(𝒳; seed = e)Reshuffle per pass, seeded by pass index — randomises position effects, reproducibly.
4for all ξi = (𝒱i, ti, yi) ∈ 𝒳̃eNote the target is present here. It will be absent in the deployment loop.
5𝒞i ← { mj ∈ ℋ : cos(ψ(ti), ψ(tj)) ≥ δ }Stage one. Chapter 6. On pass 0, problem 1, this is empty.
6𝒜i ← TopKk [ (1−η)z(relij) + ηz(vj) ]Stage two. Chapter 6. Empty candidate set → empty guidance set → no memory block.
7oi ← F(𝒱i, ti, 𝒜i); parse ŷiOne frozen forward pass. Guidance is an argument, which is why nothing needs training.
8ri ← Eval(ŷi, yi)The verifier. In [0, 1], fractional for pointing.
9∀mj ∈ 𝒜i: nj+=1; cj+=ri; vj ← (λv0+cj)/(λ+nj)Calibration. Chapter 5. Runs on every pass, including pass 0. Note it credits all k cards equally — the credit-assignment hole.
10–13if e = 0: reflect, initialise, appendOne-Pass Memory Writing. Chapter 4. The new card gets n = 0, c = 0, v = v0 — uniform, regardless of ri.
14–15end loops 
16for all ξi = (𝒱i, ti) ∈ 𝒟No y in the tuple. Deployment does not have access to targets.
17–18same two-stage retrievalIdentical to lines 5–6. The retrieval code path is shared.
19oi ← F(𝒱i, ti, 𝒜i); parse ŷiIdentical to line 7.
20Save ŷi without writing a new memory or updating (nj, cj, vj)Read-only deployment. Chapter 7. Lines 8, 9, and 10–13 all absent.
21–22return predictions and ℋ 

Two observations from the shape alone.

First, the acquisition and deployment loops are nearly identical. Lines 5–7 and lines 17–19 are the same three operations. The difference is entirely in what happens after the answer: acquisition grades and updates, deployment records. This is a good property — the retrieval and prompting behaviour a card experiences during calibration is exactly what it will experience in deployment, so TRS is estimating the right quantity.

Second, line 9 sits outside the if e = 0 block and line 12 sits inside it. That single indentation difference is the whole one-pass protocol. Move line 9 inside and TRS would only ever be updated once per card. Move lines 10–13 outside and you have Continual Memory Writing. Two lines of scope determine everything Chapter 4 measures.

The verifier, per benchmark

Eval is not one function. It is a small family, and the shape of each one constrains what the reward can tell you.

BenchmarkOutput contractEvalReward granularity
RoboSpatial — configuration<answer>Yes</answer> or <answer>No</answer>Exact string matchBinary — 0 or 1
RoboSpatial — compatibilitySame Yes/No contractExact matchBinary
RoboSpatial — context (pointing)<answer>[(x1,y1),(x2,y2),…]</answer>, floats in [0, 1]Coverage inside the reference region — convex hull by defaultFractional — anywhere in [0, 1]
ERQAA single capital letterLetter matchBinary
Omni3DOpen — a number, Yes/No, or a short phraseAnswer-type-aware matchBinary per item
SATBinary multiple choiceLetter matchBinary
EmbSpatialOne of six relation labelsLabel matchBinary

The pointing row is the one that changes the mathematics downstream. Its system prompt is explicit about the scoring model: "Pointing is scored by coverage inside the reference region (convex hull by default); scattered valid free-space points beat a single guess on the object boundary."

Work an example. The model returns five points. Three land inside the reference hull for the vacant region; two land on the desk. If reward is the fraction of predicted points inside the region:

r = 3 / 5 = 0.600

Now feed that into the TRS update from Chapter 5. A card visited on this problem receives c += 0.600, not c += 1 and not c += 0. Partial credit propagates. That is why the update rule in the paper is written for r ∈ [0, 1] rather than r ∈ {0, 1} — and it means TRS on RoboSpatial is a shrunk mean of bounded scores rather than a success count.

It also explains the prompt's insistence on several points. One point either hits or misses: reward 1 or 0, maximum variance. Five points spread across the plausible region produce a graded reward that carries information about how well the region was understood, not just whether one guess landed. The scoring rule and the prompt were designed together.

Worked example 2 — the budget on the largest benchmark

RoboSpatial is small. Run the same accounting on EmbSpatial, which has 1,820 environment problems and 1,820 deployment problems, at its tuned pass count of 4.

Solver calls during acquisition:

1,820 problems × 4 passes = 7,280 solver calls

Reflection calls (pass 0 only): 1,820. Deployment calls: 1,820. Total 10,920 model calls.

Visit budget:

7,280 solver calls × 3 cards = 21,840 visit updates
21,840 ÷ 1,820 cards = 12 visits per card

Twelve visits gives a confidence weight of 12/(2+12) = 0.857. Lower than RoboSpatial's 0.900 at 18 visits, because EmbSpatial ran four passes rather than six — and yet still firmly in the evidence-dominated regime. Note that bank size and problem count grow together, so the visits-per-card figure depends only on passes × k, not on how big the benchmark is:

visits per card = (|𝒳| × T × k) / |𝒳| = T × k

Six passes at k = 3 is 18. Four passes at k = 3 is 12. Ten passes at k = 3 is 30. The whole coverage story collapses to one product — which is exactly why Chapter 4's protocol argument is about keeping the denominator at |𝒳| instead of letting it grow to |𝒳| × T.

Sanity-check this against Chapter 4. Under continual writing the bank is |𝒳|×T, so visits per card become (|𝒳|×T×k)/(|𝒳|×T) = k. Just k. Three. Regardless of how many passes you run. Every extra pass writes exactly as many new cards as it generates evidence for, and the average never moves off three. That is the arithmetic behind Finding 5, in one line.

The one design choice you should be suspicious of

The reflection model Rφ is the same frozen VLM. The paper says so directly: "For each run, the same frozen model is used both as the task-solving VLM and as the reflection model that writes procedural memories."

Sit with that. A 9B model that got a spatial question wrong is then asked to diagnose why it got it wrong and write a general lesson. There is an obvious worry: if the model could correctly diagnose its own failure, could it not have avoided the failure?

The resolution is that these are genuinely different tasks with genuinely different inputs. Solving requires reading geometry from pixels under uncertainty. Reflecting is given the model's own output and the verified answer and the reward — it is a post-hoc text task with the answer in hand, closer to "explain the difference between these two strings" than to "estimate this clearance". Verification is easier than generation, and having the target makes it easier still. That asymmetry is what the whole reflection step monetises — and it is also exactly why the reward-only ablation, which withholds the target, costs 5.5 points.

The taxonomy that makes the ablations comparable

One piece of methodology in the appendix explains how Chapter 9's atomic-ability analysis is even possible across benchmarks that share nothing. The authors annotate each benchmark's sub-categories with one or more of ten atomic spatial abilities, used as post-hoc diagnostic labels rather than runtime inputs.

The point is that RoboSpatial's compatibility category and SAT's action-consequence questions are, mechanically, completely different — different images, answer spaces, and scorers. But both require judging whether a spatial configuration supports an action. Label both Affordance and you can ask a question neither benchmark can answer alone: does SMA help with affordance reasoning?

PropertyConsequence
Labels are multi-labelOne question can require several abilities — a compatibility question needs Localization, Distance/depth, and Affordance at once
Labels are non-disjointA question contributes to multiple ability groups, so the per-ability gains are not independent measurements and cannot be summed
Labels are post-hocNothing at runtime sees them. They are not features, not retrieval keys, not prompt content — purely an analysis layer
Applied to four of seven benchmarksRoboSpatial, ERQA, SAT, EmbSpatial. Omni3D is excluded because its released annotations expose answer_type (float, int, str) rather than a spatial taxonomy; SITE and ViewSpatial are outside the main-paper analysis

That Omni3D exclusion is worth flagging honestly. Omni3D is the benchmark with the largest lesson-field ablation (−5.2) and one of the largest SMA gains (+6.0 on the 27B) — and it contributes nothing to the atomic-ability figure. So the ability-level conclusions in Chapter 9 are drawn from the four benchmarks where category annotations happened to exist, not from the full evaluation.

The multi-label property matters too. Because a single question feeds several ability buckets, "SMA improves all ten abilities" is a weaker statement than ten independent wins would be — the buckets overlap, so a broad improvement on compatibility questions lifts Localization, Distance/depth, and Affordance simultaneously. The paper states the non-disjointness plainly, which is the right disclosure.

Why this design is nonetheless worth copying. Cross-benchmark analysis is usually impossible because benchmarks do not share a vocabulary. Annotating categories rather than individual questions makes it cheap — a few dozen category-to-ability mappings instead of thousands of per-item labels — and post-hoc annotation cannot contaminate the results, because nothing at runtime reads them. It is a low-cost way to ask capability-level questions of heterogeneous evaluations.
During experience acquisition, SMA retrieves memories before solving each environment problem — even on the first pass, when the bank is nearly empty. Why is this not merely harmless overhead?

Chapter 3: Verifier-Guided Reflection

The rollout is finished. The model produced 900 tokens of reasoning ending in <answer>Yes</answer>. The verifier said 0. Now what?

You have a choice about what to keep, and the choice is the entire chapter. The rollout is a few thousand tokens. The card you are about to write is two sentences. That is a compression ratio of roughly a thousand to one, and everything depends on which two sentences survive.

The reflection function

( si , li ) = Rφ( oi , ti , yi , ri )

Four inputs. The raw model output oi, the task ti, the verified target yi, and the reward ri. Two outputs: a summary and a transferable lesson, returned as strict JSON.

The bolded input is where the paper differs from its closest neighbour. MemRL-style runtime memory uses reward-only reflection — the reflection step sees the output and the scalar reward but not the ground truth. The paper implements that variant as MemRL-R, and also implements MemRL-GT, which gets the ground truth, specifically so that "stronger reflection supervision" can be separated from "memory-value calibration". This is careful baseline design and it is what lets Chapter 9 attribute the gains.

Why reward-only reflection is so much weaker

Think about what a model can actually infer from each signal.

Reward-only. "You said Yes. That was worth 0." The model now knows it was wrong. It does not know what right looks like. Its diagnosis must be a guess over the space of possible errors, and a plausible-sounding guess is often the wrong one — "I should have looked more carefully at the image" is a fine-sounding lesson that teaches nothing.

Ground-truth-guided. "You said Yes. The answer was No." Now the diagnosis is a differential. There is a specific gap between two specific claims, and the reflection task becomes: what reasoning step would have moved me from the first to the second? That is a far more constrained question, and constrained questions get better answers out of language models.

The measurement: reward-only reflection costs 5.5 points on RoboSpatial (68.5 → 63.0) and 2.8 points on Omni3D (47.6 → 44.8), on Qwen3.6-27B. On RoboSpatial that is the second-largest single ablation in the paper.

The tension this creates. The verified answer makes reflection dramatically better. It also makes the memory dramatically more dangerous — because a memory written with the answer in hand can trivially contain the answer, and a bank full of answers retrieved at deployment time is leakage wearing a lab coat. The paper's response is not to withhold the answer from reflection. It is to forbid the answer from appearing in the output, in writing, as an enumerated contract.

The anti-leakage contract

Here are the rules, from the RoboSpatial reflection prompt in the appendix. They are labelled A through D and marked mandatory in the JSON output.

RuleTextWhat it blocks
ADo NOT reveal or hint at the ground-truth Yes/No or any coordinate valuesThe answer itself, and near-misses like "in cases like this the answer is usually no"
BDo NOT quote the rollout's <answer> lineLaundering the answer through a quotation
CDo NOT use scene-unique object layouts, counts, or room identifiersFingerprinting a specific scene, which would make the lesson a scene-lookup rather than a procedure
DGeneric checks ("verify both referents before Yes/No") are allowedNothing — this is the permission that keeps rules A–C from making the lesson vacuous

Rule C is the one that repays a second read. Rules A and B block the answer. Rule C blocks the index. Without C a model could write "when the scene contains a blue chair beside a radiator with three books on the sill, check the left clearance" — which reveals no answer but effectively pins the lesson to one image, so it is either useless (never retrieved) or a covert scene lookup.

Rule D exists because rules that only forbid produce empty output. Without an explicit permission the safest JSON is a lesson so hedged it says nothing. D tells the model what a compliant lesson looks like.

The output contract

The reflection prompt specifies the schema exactly, and the phrasing is worth quoting because it is unusually strict for an LLM prompt:

Return strict JSON only. No markdown, no code fence, no prose outside JSON.
{ "summary": "…", "transferable_lesson": "…" }

And the two fields:

Plus a style clause: "Be concrete, non-redundant, and self-contained. No self-correction chatter, no apology, no meta talk about JSON." Anyone who has asked a model to reflect on its own errors will recognise what that clause is defending against — the reflexive apology paragraph that contains no information.

The prompt is written per benchmark, and the differences matter

There is not one reflection prompt; there are seven, one per benchmark, each specialised to its answer space. The skeleton is identical — possible inputs, silent diagnosis, transferable lesson, anti-leakage rules A–D, strict JSON schema — but the specifics change in ways that show what the authors were actually worried about.

BenchmarkWhat the reflector receivesWhat rule A protects
RoboSpatial"image + turns, task text, ground truth, model output, and/or a compact trajectory JSON""the ground-truth Yes/No or any coordinate values"
ERQA"interleaved images + turns… the ground-truth option letter"The option letter
Omni3D"image + turns… the ground-truth answer"The answer — which may be a number, a Yes/No, or a phrase
SAT"image(s) + turns… the ground-truth option letter"The option letter
EmbSpatial"image + turns… the ground-truth option letter"The option letter

Look at the "interleaved images" for ERQA and "image(s)" for SAT versus the singular "image" for RoboSpatial, Omni3D, and EmbSpatial. That is the input format leaking into the prompt, correctly — a reflector told to expect one image and handed two would describe the wrong evidence.

And notice how much more dangerous leakage is on the multiple-choice benchmarks. On RoboSpatial the answer is Yes/No or a coordinate list, so a leaked answer is at least tied to a specific spatial claim. On ERQA, SAT, and EmbSpatial the answer is a letter. A card that says "in questions like this, C is often correct" is content-free, undetectable by casual reading, and catastrophic across a benchmark where the option ordering is arbitrary. Rule A on those benchmarks is doing heavier work than its wording suggests.

One reflection per problem, and the cost of that

Reflection runs exactly once per environment problem, on pass 0. Not per pass, not multiple samples per problem, not a best-of-n over candidate lessons.

That is an interesting restraint. The obvious upgrade — sample three lessons per rollout and keep the best — requires a way to judge which is best, and the only judge available is downstream transfer, which you cannot measure at write time. You would be back at the credit-assignment problem. So the design defers the question entirely: write one lesson per rollout, then let visit evidence sort the resulting population.

That reframing is the elegant part of the whole method. Reflection quality is not optimised at write time; it is selected for at read time. A bad lesson is not prevented, it is written into the bank and then demoted by its own track record. Which means the system tolerates a fairly high rate of poor reflections, provided the good ones are distinguishable after a dozen visits.

Generation and selection, separated. This is the same division of labour as evolutionary search, and it has the same virtue: the generator is allowed to be mediocre and cheap, because the selector does the quality work. It is also why the paper's ablations show reflection signal (ground truth versus reward-only) mattering more than reflection effort — a better signal improves the whole population, whereas more samples per problem would only improve individual draws that selection would sort out anyway.

The two-step reflection procedure

The prompt splits reflection into a silent diagnosis and a public lesson.

Step 1 — private diagnosis (silent, never emitted)
"Use the ground truth only to locate reasoning gaps" — and the prompt enumerates the gaps it expects for RoboSpatial: points on occupied pixels, too few points, wrong side of anchor, confused image-plane left with world left, answered configuration without binding both objects, said "fit" without checking clearance.
↓ keep the diagnosis, discard the specifics
Step 2 — transferable lesson (emitted)
"State the abstract question shape… Give one positive procedure and one trap to avoid for other RoboSpatial-like home scenes."

Notice the phrase "use the ground truth only to locate reasoning gaps". The target is a diagnostic instrument, not content. It tells the reflector where to look; it is not supposed to end up in what the reflector writes. Whether a language model reliably honours that boundary is an empirical question, and the paper's honest answer is the disjoint split: if leakage were happening at scale, deployment accuracy on unseen problems would not improve the way it does.

The prompt also enumerates the success habits worth repeating: "anchor first, multi-point spread in free space, read relation verb literally, obstacle sweep for compatibility". Reflection is not only failure analysis. A card written from a correct rollout is a card about what to keep doing — and Chapter 9 shows those cards end up with measurably higher TRS.

Reflecting on a rollout that went right

Every example so far has been a failure, which is how most people picture reflection. Half the bank is not like that. The prompt explicitly asks the reflector to "note success habits worth repeating", and names four for RoboSpatial: anchor first, multi-point spread in free space, read relation verb literally, obstacle sweep for compatibility.

Work one. The task is family 1: "Pinpoint several points within the vacant space to the left of the chair." The model bound the chair, inferred the wedge of free floor to its left, and returned six points. Four landed inside the reference hull. Reward r = 4/6 = 0.667.

Note that this is neither a clean success nor a failure — it is 0.667, and the reflection prompt receives that number alongside the target region. What should the lesson say?

SlotContentWhere it came from
When <shape>"When asked to pinpoint several points inside a vacant region on a stated side of an anchor object"The family taxonomy in the system prompt
apply <habit>"bind the anchor first, then sample points spread across the width of the free region rather than clustered near the anchor"The success habits list — and the diagnosis that four of six landed, so the spread was partly too tight
avoid <trap>"avoid placing points that hug the anchor's silhouette, where occupancy is ambiguous"The two points that missed
validate by <check>"validate by confirming every coordinate lies in [0, 1] and sits on visibly unoccupied floor"The output contract plus the occupancy requirement

Two things this example shows that a pure-failure example cannot.

Fractional rewards make the diagnosis richer, not just the score. A binary 0 would have said "you were wrong" with no information about how wrong. 0.667 with a reference region says "your approach was mostly right and your sampling was slightly too tight" — and the resulting lesson is about spread, which is a repairable habit, rather than about the whole approach.

Success habits and failure traps end up in the same sentence. The four-slot grammar has room for both, which is why a partially-successful rollout is arguably the most productive kind to reflect on: it has a habit worth keeping and a trap worth naming, from one episode.

Chapter 9 puts a number on the difference: memories written from successful source questions reach a mean TRS of 0.522 and 85.7% downstream accuracy, against 0.452 and 61.4% for failure-sourced ones. Success-sourced cards are better. But they are only better on average — and crucially, SMA does not know that at write time and does not use it. It finds out from visits.

The question families the reflector is told to recognise

One more piece of machinery, because it explains why the lessons transfer at all. The system prompt — the one used to solve the task, not to reflect — explicitly teaches the model a taxonomy of question shapes, and instructs it to "recognize the structural shape, not only the category label". For RoboSpatial:

FamilyTypical shapeShared capability
1. Vacant-region localisation via normalised pointing"Pinpoint several points within the vacant space to the left of <object>" → a list of (x, y) in [0, 1]Bind the anchor object, interpret the directional phrase in the image plane, sample multiple points on unoccupied pixels — not on the anchor, clutter, or walls
2. Object–object configuration verification"Is <A> above / below / behind / in front of <B>?" → Yes or NoLocate both referents, then test whether the stated geometric relation holds — support, overlap, occlusion — without guessing from object categories alone
3. Placement compatibility and affordance"Can <A> fit behind / above / to the left of <B>?" → Yes or NoReason about free volume, object extent, and obstacles — whether the placement is physically plausible, not merely whether A is already there

That third row is the warehouse robot's bug, written down as a family. And the fact that the taxonomy lives in the system prompt means both the solver and the reflector share a vocabulary for describing question shapes — which is exactly what makes the "When <shape>…" slot in a lesson meaningful to a future reader.

Worked example 2 — grading three candidate lessons

Take a concrete rollout. The task is family 3: "Can the storage bin fit to the right of the desk?" The model answered Yes. The verified target was No. Reward r = 0.

Here are three lessons a reflector might produce. Grade each against the contract before reading the verdicts.

#Candidate lessonVerdict
1"When asked whether a bin fits to the right of a desk, the answer is No because the gap is too narrow."Violates A and C. It states the answer and it fingerprints the scene. Retrieved on a different image where the bin does fit, this card actively causes an error. It is an answer key with the serial number filed off.
2"When answering spatial questions, be careful and examine the image thoroughly before deciding."Compliant but vacuous. No shape, no trap, no check. It will be retrieved for everything (its embedding is bland enough to be moderately similar to any spatial task) and it will change nothing. This is the failure mode rule D's "generic checks are allowed" is walking a line against — generic checks are fine; generic exhortations are noise.
3"When asked whether one object can be placed in a free-space relation to another, estimate the candidate object's extent against the visible clearance rather than confirming that empty pixels exist; avoid answering yes from apparent gap alone; validate by naming the obstacle or the dimension that would block the fit."Compliant and useful. Shape = placement compatibility. Habit = estimate extent versus clearance. Trap = yes-from-apparent-gap. Check = name the blocking dimension. No answer, no scene fingerprint, and it transfers to any object pair in any room.

Card 3 is what the paper's grammar is engineered to produce, and card 2 is why the grammar has four slots instead of one. A single free-form sentence drifts toward card 2 — the safest thing to say is the thing that says nothing. Four named slots force specificity, because "avoid <trap>" cannot be filled without diagnosing an actual trap.

The check slot is the sleeper. Shape, habit, and trap are descriptive. "Validate by <concrete check>" is executable — it gives the model an action to perform mid-reasoning whose outcome it can observe. That is the difference between advice and a procedure, and it is why the paper's qualitative appendix describes the retrieved memories as "size checking, coordinate localization, depth comparison, motion simulation, and background anchoring" — all verbs.

A fourth candidate, and the subtlest failure

Three candidates were not enough to cover the interesting cases. Here is a fourth, and it is the one that would slip past a careless reviewer:

"When judging whether an object fits beside another, note that in cluttered indoor scenes the visible gap is usually smaller than it appears, so lean toward answering no."

Check it against the contract. Rule A: does it reveal the ground truth? Not literally — it names no specific answer for any specific question. Rule B: it quotes nothing. Rule C: no scene fingerprint. Rule D: it looks like a generic check. By the letter of all four rules it passes.

And it is poison. It encodes a prior over answers rather than a procedure over observations. "Lean toward answering no" is a bias, and once it is in the bank it will be retrieved for compatibility questions where the answer is yes, and it will push the model wrong. Worse, it will often look reliable: if compatibility questions in this benchmark happen to skew toward "no", the card will accumulate reward and its TRS will climb. The mechanism would be rewarding a base-rate exploit.

This is the failure mode that the four-slot grammar is structurally defending against, and it is worth seeing how. "When <shape>, apply <habit>, avoid <trap>, validate by <check>" has no slot for a prior over answers. There is nowhere in the template to put "lean toward no" without it landing in the habit slot, where it reads as obviously wrong — "apply leaning toward no" is not a habit, it is a guess. The grammar makes bad content awkward to express.

Whether that defence always holds is not something the paper tests directly, and it is a genuine open edge. The closest evidence is indirect: if answer-prior cards dominated the bank, cross-benchmark transfer would collapse (a prior tuned to RoboSpatial's answer distribution would be actively wrong on EmbSpatial), and Chapter 9 shows EmbSpatial → RoboSpatial transfer at +7.3.

Reflection is the only place the system gets to be clever

Step back and count the intelligence in SMA. Retrieval is a dot product and a sort. Calibration is three lines of arithmetic. Deployment is string concatenation. All of the judgement in the entire system lives in one place: the reflection call that turns a rollout into a sentence.

ComponentComplexityFailure mode if it is bad
RetrievalA cosine and a weighted sortWrong cards selected — recoverable, because the model can ignore them
Calibration(λv0 + c)/(λ + n)Bad ranking — recoverable, degrades to similarity-only
Prompt assemblyTemplate fillingFormatting bugs — recoverable
ReflectionA frozen VLM writing English under a contractA bank of vacuous or leaky sentences — not recoverable by anything downstream

Everything downstream operates on whatever reflection produced. TRS can demote a bad card but cannot rewrite it. Retrieval can exclude an irrelevant card but cannot improve it. If reflection writes 175 versions of "be careful and look at the image thoroughly", the bank is worthless and no amount of calibration will make it otherwise — every card will have roughly the base rate as its TRS, the z-scores will be noise, and you will have built an expensive no-op.

Which is why the reflection prompt is the longest and most constrained artefact in the appendix, why the output grammar has four named slots, why the anti-leakage rules are enumerated A through D, and why the ground truth is supplied despite the leakage risk it creates. Every one of those decisions is protecting the only component that cannot be fixed downstream.

The practical implication. If you port this and it underperforms, do not start by tuning η or δ. Print twenty cards and read them. If they are vague, no hyperparameter will help. The reflection prompt is where the effort belongs, and the paper's own ablation ranks it accordingly — degrading only the reflection signal, while keeping everything else, costs 5.5 points.

Why "strict JSON only" is a load-bearing instruction

The prompt says: "Return strict JSON only. No markdown, no code fence, no prose outside JSON." It is easy to read that as fussiness. It is not.

Reflection runs once per environment problem — 175 times for RoboSpatial, 1,820 for EmbSpatial — unattended, in a batch. Every output must be machine-parsed into two named fields and appended to the bank. A response wrapped in a code fence, or preceded by "Sure! Here's the memory:", either fails to parse or requires a fragile stripping heuristic. A parse failure at scale means silent holes in the bank — problems that contributed no card, discovered later as an unexplained drop in coverage.

The same discipline appears on the solve side. Every benchmark's system prompt ends by specifying exactly one tagged line, and RoboSpatial's is unusually explicit: "Yes/No output: exactly <answer>Yes</answer> or <answer>No</answer>. Pointing output: exactly <answer>[(x1, y1), (x2, y2), …]</answer> with normalized floats in [0, 1]; include several points; no explanation inside the tag."

That last clause — "no explanation inside the tag" — exists because Parse(oi) extracts the tag contents and hands them straight to Eval. Prose inside the tag is a parse failure, which scores as reward 0, which corrupts both the accuracy number and every TRS update on that problem's guidance set. A formatting slip becomes a false negative in the reliability estimate for three cards.

The general lesson for anyone building this. When a verifier's reward feeds a learning signal, parse robustness is the learning signal. A 2% parse-failure rate is not a 2% accuracy penalty; it is 2% of your reward stream reporting failure for reasons unrelated to reasoning, spread across three cards each time. Strict output contracts are not pedantry, they are noise control.

What the reflector may receive

The prompt lists its possible inputs, and the list is instructive: "the rollout conversation (image + turns), task text, ground truth, model output, and/or a compact trajectory JSON". The trajectory JSON is a fallback for when the full conversation is unavailable — a practical detail that tells you this ran at a scale where some conversations get dropped.

Note that the reflector sees the image. It is a vision-language model reflecting on a visual task, so it can check whether its own claimed observation was actually supported by pixels. That is a genuinely different diagnostic position from a text-only reflector reading a transcript.

The trajectory JSON, and what it tells you about scale

Every reflection prompt lists its possible inputs, and every one ends the same way: "…and/or a compact trajectory JSON." One template is explicit that this is a fallback — "a compact trajectory JSON as a fallback when the conversation is unavailable."

That clause is a small window onto the engineering reality behind the numbers. Why would a conversation be unavailable? Because reflection runs as a separate batch after solving, at a scale where holding every multi-image conversation in memory is impractical, and where some fraction of them get dropped, truncated, or fail to serialise. So the system was built to degrade: full conversation if you have it, a compact summary structure if you do not.

It also implies reflection is not a continuation of the solve call. It is a fresh call with a fresh prompt, reconstructing the rollout from stored artefacts. That matters for a reader trying to reproduce this: you cannot simply append "now reflect" to the solving conversation, because the reflection prompt is a different system prompt with different rules, and the model must be told the ground truth it did not previously have.

ArtefactProduced byConsumed byPersisted?
Rollout conversation (images + turns)The solve callReflection, when availableBest effort
Compact trajectory JSONThe solve callReflection, as fallbackAlways
Parsed prediction ŷParse(o)Eval, and reflectionYes
Reward rEvalReflection, and the TRS updateYes
Ground truth yThe benchmarkEval and reflection — never the cardYes, outside the bank
Card (s, l)ReflectionThe bankYes

Notice the asymmetry in the last two rows. The ground truth is persisted — it is part of the benchmark — but it is persisted outside the memory bank, and the bank is the only artefact that survives into deployment. The separation is structural, not merely procedural: at deployment time the ground-truth store is not consulted, because the deployment loop has no reason to open it.

What makes a lesson score well, summarised

Pulling the chapter together: given a rollout, what does a good card look like? Four tests, each derived from something the prompt or the ablations establish.

TestPasses if…Grounded in
Shape testThe first clause names a structural condition a future question could matchThe "when <shape>" slot, and the family taxonomy shared with the system prompt
Portability testNothing in it identifies a specific scene, layout, count, or roomAnti-leakage rule C
No-answer testIt contains no Yes/No, letter, number, or coordinate that could be copiedRules A and B; and the −4.4 "+model output" ablation showing what copying costs
Executability testThe check clause names an operation the model can actually perform mid-reasoning and observe the result of"validate by <concrete check>" — and the fact that every retrieved procedure in the qualitative appendix is a verb phrase

A card failing the shape test is never retrieved. One failing the portability test is retrieved and misleads. One failing the no-answer test is leakage. One failing the executability test is card 2 from the worked example — harmless, retrieved often, and worth nothing.

Only the last of the four is invisible to any automated check, which is why it is also the one the grammar has to enforce structurally rather than by rule.

What the bank actually ended up containing

The qualitative appendix is the only window onto what the reflector wrote, and one sentence in it is worth more than the rest. Describing five representative successful cases, the paper says SMA "retrieves concrete spatial procedures, including size checking, coordinate localization, depth comparison, motion simulation, and background anchoring."

Read that list carefully. Every item is a verb phrase naming an operation. Not a fact, not a category, not a scene — an operation you perform on an image. That is the reflection grammar working as designed, and it is direct evidence that the "validate by <check>" slot is producing executable content rather than decorative content.

Retrieved procedureThe operationWhich question family it serves
Size checkingCompare an object's extent to an available space before asserting fitCompatibility / affordance — the warehouse robot's bug
Coordinate localizationBind a named referent to specific image coordinates before reasoning about itPointing, and any question with two referents
Depth comparisonOrder objects along the view axis rather than by apparent sizeRelations involving in front / behind, occlusion
Motion simulationImagine the post-action state before answering about itSAT's action-consequence questions, mental simulation
Background anchoringFix a stable reference in the scene to reason relative toViewpoint change, ego movement, multi-view

Two things follow. First, these read like a curriculum — the operations a competent human would name if you asked them how to do spatial reasoning on photographs. The model, given verified feedback and a template, rediscovered a chunk of that curriculum without being told it. Second, and less comfortably: these are all things a person could have written by hand. Which loops back to Chapter 0's objection and gives it its most honest answer — the value is not in the novelty of any single lesson, it is in the automatic discovery, scoping, and validation of a bank of them.

The paper's own conclusion from the cases is stated conservatively: these memories "steer the model toward task-relevant geometry rather than superficial semantic matches, supporting the quantitative finding that high-TRS procedures transfer reliably." Five hand-picked successful cases are an illustration, not evidence, and the paper presents them as such.

SMA gives the reflection model the verified target, then forbids it from appearing in the output. Why not simply withhold the target, which would make leakage structurally impossible?

Chapter 4: Write Once, Calibrate Often

You are going to run ten passes over the environment split. On each pass the agent retrieves, solves, and gets graded. The question this chapter answers is embarrassingly simple and turns out to matter a lot: on which passes should the agent write new memories?

The obvious answer is "all of them". More experience, more cards, more coverage. The paper calls this Continual Memory Writing, tries it, and rejects it. Its default is One-Pass Memory Writing: the reflection model writes only during the first pass over 𝒳, and "later passes reuse the fixed memory bank to update the reliability state of retrieved cards."

The stated reason is duplication: "later passes often produce memories that duplicate earlier cards." Which is unsurprising once you say it out loud — pass 5 sees exactly the same 175 problems as pass 0, with a similar frozen model at temperature 0. It will diagnose similar gaps and write similar lessons.

Why duplication is not merely wasteful

If duplicates only cost disk space, nobody would care. They cost something else, and the arithmetic is the argument.

Every solver call retrieves exactly k = 3 cards. That number does not grow when the bank grows. So the total number of visit updates per pass is fixed at 3 × (number of problems), no matter how large the bank is. Meanwhile the bank size under continual writing grows linearly with passes.

Worked example 3 — TRS coverage under both protocols. RoboSpatial, 175 environment problems, k = 3, 10 passes.

One-Pass Memory Writing. Cards are written only on pass 0, so the bank ends at 175 cards. Visit updates over ten passes:

175 problems × 10 passes × 3 cards = 5,250 visit updates
5,250 ÷ 175 cards = 30 visits per card on average

Continual Memory Writing. A card is written every pass for every problem, so the bank ends at 175 × 10 = 1,750 cards. The visit updates are the same 5,250 — k did not change:

5,250 ÷ 1,750 cards = 3 visits per card on average

Ten times the bank, one tenth the evidence per card. And the paper's measurement matches this arithmetic almost exactly: "By the final pass, One-Pass Memory Writing uses only one-tenth as many memories, exhibits 21% less redundancy, and achieves roughly twice the TRS-update coverage."

The one-tenth is the ratio we just derived. Note the paper says coverage — the fraction of cards receiving a TRS update — is roughly twice, not ten times, which is a healthier number than the naive average suggests: retrieval is not uniform, so under continual writing a subset of cards still gets visited repeatedly while a long tail never gets visited at all. That long tail is the problem.

What an unvisited card does to the ranking

Recall the TRS initialisation: n = 0, c = 0, v = v₀ = 0.5. A card that is never retrieved keeps v = 0.5 forever. Now look at what that does inside the ranking rule, which we will derive properly in Chapter 6 but can already sketch: the score is a blend of normalised similarity and normalised TRS.

If most of your bank sits at exactly v₀, then the TRS term is nearly constant across candidates, its z-score is nearly zero, and the blend degenerates back to pure similarity. You have paid for a reliability mechanism and received MemP. Under continual writing this is not hypothetical — it is what a bank of 1,750 cards with 5,250 scattered visits looks like.

The general principle. A reliability estimate is only worth having if it is estimated. Writing more memories does not add information unless you can also afford to evaluate them. Under a fixed retrieval budget k, bank size and per-card evidence trade off exactly one-for-one. One-Pass Memory Writing is the decision to spend the budget on knowing which cards are good rather than on having more cards.

Redundancy has a second cost, at retrieval

The paper defines redundancy as "the proportion of repeated memories in the memory bank" and reports one-pass as 21% lower. Beyond storage, duplication has a direct effect on what reaches the prompt.

Suppose the bank holds four near-identical copies of the same lesson, each with its own independently-estimated TRS. They will have near-identical embeddings, so if one clears the similarity threshold they all do. If their TRS values happen to cluster high, the top-3 can be filled by three copies of one idea — the model receives one lesson in triplicate instead of three complementary lessons. The retrieval budget has been spent on redundancy.

And their TRS estimates are individually noisier than one merged card would be: four cards with 3 visits each carry less usable evidence than one card with 12, because each of the four is shrunk hard toward v₀. Duplication splits evidence.

Where the passes actually go

If only pass 0 writes, what are passes 1 through T−1 for? Exactly one thing: calibration. Steps 1 through 4 of the acquisition loop still run — retrieve, solve, grade, update n/c/v — and step 5 is skipped.

So the passes are not "more training". They are repeated measurement of a fixed hypothesis set. Pass 0 proposes 175 lessons; passes 1–9 test them, in situ, against real problems, and record how often each one was present when the answer came out right.

The pass counts are tuned per benchmark, and the spread is informative. From the Qwen3.5-122B-A10B hyperparameter table: RoboSpatial 6, ERQA 2, Omni3D 10, SAT 9, EmbSpatial 4. Omni3D — open-answer, hardest, largest gains from the lesson field — uses the full ten. ERQA uses two. The main table reports "the best checkpoint from the 10-pass evaluation", with the same selection rule applied to every SMA row; we will return to what that selection rule costs in Chapter 8.

Why the bank stays small, and why that is a feature

One-Pass Memory Writing caps the bank at |𝒳| cards. For RoboSpatial that is 175. It is worth dwelling on how small that is, because the instinct in a retrieval system is always "more documents is better" and here the opposite holds.

Bank sizeVisits/card at T=10, k=3, |𝒳|=175ConfidenceWhat the ranking can do
175 (one-pass)30.00.938Rank confidently by measured reliability
525 (3 passes writing)10.00.833Still workable
1,750 (continual, 10 passes)3.00.600Mostly prior. Ranking approaches similarity-only
17,500 (a big "more data" bank)0.3~0.13 for the few visited; 0 for the restNothing. You have built MemP with a storage bill

The bottom row is the reductio. A memory system with a hundred thousand cards and no way to evaluate them is not a better memory system — it is a similarity search with extra steps. The reliability layer that distinguishes SMA from MemP requires evidence per card, and evidence per card is bounded by a budget you cannot escape.

This inverts the usual scaling intuition and is the most transferable engineering lesson in the chapter. In a document-retrieval system, more documents means more chance the right one exists, and documents do not need to be individually validated. In an experience-memory system, every card is a hypothesis about how to act, and an unvalidated hypothesis in the prompt is a liability, not an asset. Chapter 9's MemP numbers — negative on Tracking and Affordance — are what unvalidated hypotheses cost.

The rule of thumb. Choose bank size so that T×k lands somewhere above roughly 3×λ. At λ = 2 that means at least six visits per card, giving confidence ≥ 0.75. Below that, you are ranking by a prior with decoration. This is a constraint on bank size, which means it is a constraint on how much you write — which is why the writing protocol and the calibration quality are one decision, not two.

When one-pass would be the wrong choice

The paper scopes Finding 5 to ten passes over a fixed environment split. Take the scoping seriously and ask when the conclusion inverts.

The argument rests on one premise: pass 5 sees the same problems as pass 0. Under that premise, a card written on pass 5 is about a problem that already has a card, so it is a duplicate by construction. Break the premise and the argument goes with it.

RegimeDoes one-pass still win?Why
Repeated passes over a fixed 𝒳Yes — the paper's measured caseLater passes can only re-diagnose problems already diagnosed
A stream of genuinely new problemsNoEach new problem is new coverage, not a duplicate. Refusing to write would be refusing to learn
𝒳 far larger than one pass can cover in budgetNo"Pass 0" never finished; the untouched region has no cards at all
A drifting problem distributionNo, and TRS itself becomes questionableOrder invariance assumes exchangeable visits — under drift you want recency weighting, which the estimator deliberately refuses
Model swapped mid-runUnclearNew failure modes appear that pass-0 lessons never diagnosed — though Chapter 9's model-transfer result suggests old lessons still help

So the right generalisation is not "write once" but "write once per distinct problem". One-Pass Memory Writing is what that policy reduces to when your environment is a fixed finite set you are cycling through. State it that way and it stops being a surprising empirical finding and becomes almost definitional — which is a good sign that the mechanism is understood rather than merely observed.

How writing interacts with checkpoint selection

One more consequence of one-pass writing that is easy to miss. Because cards are frozen after pass 0, every checkpoint in the 10-pass run contains exactly the same lessons. Checkpoint 3 and checkpoint 9 differ only in (n, c, v).

That makes "best checkpoint from the 10-pass run" a much narrower selection than it sounds. You are not choosing among ten different memory banks; you are choosing among ten calibration states of one bank. The lesson content is fixed by the time pass 0 ends, and the selection is over how much visit evidence has accumulated.

Under continual writing the same selection would be far more permissive — checkpoint 3 and checkpoint 9 would have different cards and different scores, and picking the best of ten would be closer to a search over ten distinct systems. Which is a second, quieter argument for one-pass: it keeps the checkpoint-selection rule honest.

It also explains why the per-benchmark pass counts vary so much (2 for ERQA, 10 for Omni3D) without that being alarming. A low pass count does not mean "we stopped learning early"; it means calibration on that benchmark reached its most useful state quickly, and additional visits started to move rankings in ways that did not help.

Watch both protocols run

One-Pass versus Continual writing, over ten passes

Drag the pass slider. The top band is bank size; the bottom band is average visits per card under a fixed retrieval budget of k = 3. The dashed line marks n = 2, where the TRS confidence weight n/(λ+n) is still only 0.5 — below it, a card's score is more prior than evidence.

Pass 10
Problems in 𝒳 175
Retrieval k 3

Push k up and watch the continual curve improve — more retrievals per problem means more evidence to spread around. That is a real lever, and the paper swept it: the sensitivity study peaks at k = 3. Larger k dilutes the guidance with lower-ranked cards and costs prompt tokens; the evidence gain does not pay for it.

The other lever: raising k instead of T

Chapter 2 established that visits per card equals T × k under one-pass writing. So there are two ways to buy evidence, and it is worth asking why the paper spends on passes rather than on retrieval depth.

 Raise T (more passes)Raise k (more cards per query)
Visits per cardGrows linearly — T×kGrows linearly — T×k
Model calls+|𝒳| per extra passUnchanged
Prompt tokens per queryUnchanged~+120 per extra card, at deployment too
Guidance qualityUnchanged — still the best 3Falls — you are adding the 4th, 5th, 6th-ranked cards
Evidence qualityClean — each visit is a fresh, independently-ranked selectionMuddier — credit is split across more co-retrieved cards, worsening the attribution problem
Deployment costZero — passes are offlinePermanent — every query pays

Read the last two rows and the choice is obvious. Extra passes are an offline cost that buys clean evidence. Extra k is a permanent cost that buys muddier evidence and dilutes the guidance the model actually receives. The paper's sweep confirms it empirically — accuracy peaks at k = 3 — but the asymmetry is visible before you run anything.

There is a subtlety worth naming. Raising k also worsens credit assignment quadratically-ish: with k = 3, one reward is shared three ways; with k = 6 it is shared six ways, and the chance that any individual card's average is dominated by its co-retrieved partners rises. So k is not merely a token-budget dial — it is also the dial that controls how noisy every TRS estimate in the bank is.

The design principle. When a system has an offline phase and an online phase, spend on the offline phase. SMA's whole shape follows from taking that seriously: multiple passes (offline) rather than deep retrieval (online); one-pass writing (fewer cards to compare online); precomputed embeddings (no online embedding call); and a frozen bank (no online writes). Every dial is set toward moving work out of the deployment path.

Pass by pass, both protocols

Put the two trajectories in a table so the divergence is visible. RoboSpatial numbers: |𝒳| = 175, k = 3. "Coverage" here is the average visits per card, which we showed in Chapter 2 reduces to T×k for one-pass and to exactly k for continual.

PassOne-pass bankContinual bankCumulative updatesOne-pass visits/cardContinual visits/card
117517552533
21753501,05063
31755251,57593
41757002,100123
61751,0503,150183
101751,7505,250303

The continual column never moves. Not once in ten passes. Every pass adds 525 updates and 175 cards, and 525/175 = 3, forever. Meanwhile one-pass climbs linearly to 30.

Translate that into confidence weights. At pass 10, one-pass cards sit at n/(λ+n) = 30/32 = 0.938 — almost entirely empirical. Continual cards sit at 3/5 = 0.600 — forty percent prior, permanently. And that 0.600 is the average; retrieval is not uniform, so the median continual card is worse and a long tail sits at exactly n = 0, confidence 0.000, TRS pinned at 0.5.

The paper's measured coverage ratio is "roughly twice", not ten times, which tells you the real distribution is more forgiving than these averages — popular cards get visited repeatedly under both protocols. But the direction and the mechanism are exactly what the arithmetic predicts.

The pass counts are themselves a result

The Qwen3.5-122B-A10B hyperparameter table lists a different pass count per benchmark, and the spread is not arbitrary noise — it is the outcome of the checkpoint-selection rule.

BenchmarkPassesVisits/card at k = 3Confidence n/(2+n)Reading
ERQA260.750Peaked early. Only 200 environment problems and a closed answer space — the useful lessons are few and quickly validated
EmbSpatial4120.857Six relation labels, near-ceiling accuracy — little signal left to extract after a few passes
RoboSpatial6180.900Three distinct families, fractional rewards on pointing — more to calibrate
SAT9270.931Egocentric and temporal reasoning across two ordered stills — more varied procedures
Omni3D10300.938Uses the full budget. Open answers, hardest benchmark, and where the lesson field is worth the most (−5.2 to remove)

The ordering is coherent: benchmarks with more diverse procedures and more room to improve keep benefiting from additional calibration passes, while saturated or narrow benchmarks stop early. Omni3D wanting all ten also raises an unanswered question the paper does not chase — would it have kept improving at fifteen?

The honest reading of Finding 5

The paper's Finding 5 says One-Pass Memory Writing "is far more efficient than continual rewriting: it maintains a smaller, less redundant memory bank while increasing TRS-update coverage." Note what is claimed and what is not.

Claimed: smaller bank, less redundancy, better coverage — all directly measured across ten passes on five benchmarks with Qwen3.6-27B. Not claimed: that one-pass wins for any number of passes, any k, or any environment split size. The paper is careful: "the trajectories therefore show that continual writing produces a larger, more redundant memory bank and lower TRS-update coverage over the ten passes considered here."

That hedge is correct and you should keep it. If your environment split is enormous and highly diverse, pass 0 may never see a large region of the problem space, and a second writing pass over fresh problems is not duplication — it is coverage. The paper's finding is about repeated passes over the same problems, which is a specific regime, not a universal law.

What "redundancy" is measuring

The paper reports that one-pass writing exhibits "21% less redundancy (the proportion of repeated memories in the memory bank)". The parenthetical is the whole definition, and it is worth thinking about what "repeated" can mean for text.

Two cards written from the same problem on different passes will not be byte-identical — the model is at temperature 0, but the guidance set it saw differs between passes (the bank has grown, the TRS values have moved), so the rollout differs and so does the reflection. What you get is not duplication but near-duplication: the same procedure phrased three slightly different ways.

Near-duplicates are worse than exact duplicates for this system, for a reason worth spelling out. Exact duplicates could be detected and merged with a hash. Near-duplicates require a similarity threshold, and their embeddings are close enough that they cluster in retrieval — if one clears δ, they all do. So they compete for the same three slots while carrying one idea's worth of information, and each one's TRS is estimated from a third of the evidence a merged card would have had.

 1 card, 30 visits3 near-duplicates, 10 visits each
Total evidence30 observations30 observations
Confidence per card, n/(2+n)0.9380.833
Slots consumed if all retrieved1 of 33 of 3
Distinct ideas delivered1, plus 2 other cards1
Bank entries to compare per query13

Same total evidence, strictly worse outcome on every row. That is the cost of redundancy stated precisely, and it is why the 21% figure is reported alongside bank size rather than as an afterthought.

It also names the missing piece. SMA prevents near-duplicates from being written; it has no mechanism to merge them if they exist. A bank assembled from several sources — say, the cross-benchmark transfer setting in Chapter 9, where you concatenate two banks — would have duplicates that one-pass writing never guarded against. The paper's own Limitation D.2 names merge and compress as unimplemented lifecycle operations, and this is where their absence would first bite.

Diagnosing a bank that is not calibrating

If you implement this and the TRS term is doing nothing, the symptoms are specific and the causes are few. This is the debugging table the chapter has been building toward.

SymptomLikely causeCheck
Almost every card still reads v = v0Never retrieved — bank too large for the retrieval budget, or δ too highHistogram n. If the mode is 0, the bank is too big or the filter is too tight
TRS z-scores are near zero for every candidateCandidates all sit at v0, so the standard deviation is tinyPrint the standard deviation of v within candidate sets. If it is near zero, the ranking is pure similarity
SMA and MemP score identicallyThe above, and it means the whole mechanism is offCompare the selected top-k at η = 0 and η = 0.5. If they match, TRS carries no information yet
TRS values swing wildly between passesλ too small, or too few visits per cardCompute T×k. Below about 6, you are reading noise
Accuracy is worse than no memoryCards contain answers or scene fingerprints, or δ is too lowRead twenty random cards. Every rule-C violation you find is a lesson that will mislead
Mean retrieved similarity did not fall vs similarity-onlyTRS is not affecting selectionThis is the paper's own diagnostic. If your number does not move from the η = 0 baseline, nothing is happening

That last row is worth adopting as a standing metric. The paper reports macro-average retrieved similarity falling 0.792 → 0.698 as evidence that TRS changes selection. It is cheap to compute, requires no accuracy measurement, and tells you immediately whether your reliability machinery is live. If retrieved similarity is unchanged, the mechanism is off, whatever the accuracy says.

And the first row names the failure this chapter is about. A bank ten times too large produces exactly the "everything at v0" symptom, and the fix is not a better estimator — it is writing fewer cards.

The number to watch: visits per card

One metric summarises the whole protocol argument, and it is worth computing before you run anything, because you can predict it in advance.

visits per card = (|𝒳| × T × k) / |bank|
RegimeBank sizeVisits per cardConfidence at λ = 2Verdict
One-pass, T = 10, k = 3|𝒳|300.938Well calibrated
One-pass, T = 6, k = 3|𝒳|180.900Well calibrated
One-pass, T = 2, k = 3|𝒳|60.750Usable — ERQA's setting
One-pass, T = 1, k = 3|𝒳|30.600Marginal — TRS barely moves
Continual, any T, k = 3|𝒳| × T30.600Permanently marginal, at any T

Look at the last two rows together. Continual writing at ten passes gives you the same per-card evidence as one-pass writing at one pass — while costing ten times the model calls and ten times the storage. That is the finding, stated as sharply as the arithmetic allows.

Under a fixed retrieval budget k = 3, why does continual writing weaken TRS specifically, rather than merely wasting storage?

Chapter 5: TRS — Visit Evidence

This is the chapter the paper is named for. Everything so far has been about producing good candidate lessons. This is about deciding which of them to believe.

The wrong answer, and why it is tempting

Here is the obvious design. A card written from a rollout the model got right came from good reasoning, so score it high. A card written from a failure came from bad reasoning, so score it low. Rank by that.

The paper explicitly refuses this, and gives two reasons in one sentence: "A source rollout can be correct but produce a lesson that is too specific, and an imperfect rollout can still produce a useful spatial procedure after verifier-guided reflection."

Take both halves seriously. A correct rollout tells you the model got that problem right; it says nothing about whether the sentence the reflector distilled from it generalises. A model can answer correctly by luck, or by a scene-specific shortcut, and the resulting lesson can be narrow or simply wrong-headed. Conversely, a failed rollout with the ground truth in hand is often the richest reflection material there is — there is a specific, diagnosable gap, and "avoid <trap>" has something concrete to point at.

The reframing. Source correctness is a property of the episode. Transfer reliability is a property of the lesson. They are different objects and there is no reason the first should determine the second. So SMA measures the second directly, by using the lesson and seeing what happens.

The five properties the estimator must have

The appendix lists the requirements before giving the formula, which is a good way to read it — you can almost derive the update from the list.

PropertyWhat it demandsWhat it rules out
Uniform initializationAll new memories start at the same neutral valueSeeding TRS from source correctness — the design we just rejected
Visit-evidence dependenceThe score is calibrated by later retrieval outcomesAny static score; any score derived only from the writing episode
Order invarianceSame visit count and same total reward → same value, regardless of orderExponential moving averages, which weight recent visits more
Low-visit conservatismThe score must not swing hard after one or two visitsThe raw empirical mean c/n, which after one failure reads 0.000
Evidence-driven convergenceAs visits accumulate, empirical outcomes dominateAny fixed shrinkage that never lets the data win

Properties 3 and 4 together are quite restrictive. Order invariance kills EMAs. Low-visit conservatism kills the plain mean. What survives is a mean pulled toward a prior, with the pull weakening as evidence accumulates — and property 5 fixes how it must weaken.

The estimator

Initialisation, for every newly written card:

ni ← 0 ,   ci ← 0 ,   vi ← v0

And whenever card mj is selected into the guidance set for problem ξi, and that problem's answer receives reward ri ∈ [0, 1]:

nj ← nj + 1 ,   cj ← cj + ri ,   vj ← ( λ·v0 + cj ) / ( λ + nj )

Two constants: v0 = 0.5 (the neutral prior value) and λ = 2.0 (the prior strength). Both are held at those values across every benchmark in the hyperparameter tables.

Check the properties. Uniform init: every card starts at v0, full stop. Visit dependence: v moves only when n and c move, which happens only on retrieval. Order invariance: the formula reads only n and c, and addition commutes. The last two properties need the rewrite.

The rewrite that explains everything

The appendix gives the algebraically identical form, and it is the one to memorise:

vi = [ λ / (λ + ni) ] · v0  +  [ ni / (λ + ni) ] · ( ci / ni )

Verify it in one line: expand and the second term's ni cancels, giving (λv0 + ci)/(λ + ni). Same formula.

But now read what it says. TRS is a weighted average of two things: the neutral prior v0, and the empirical success rate ci/ni. The weights sum to one. And the weight on the empirical term,

confidence = ni / ( λ + ni )

is a confidence term: zero at n = 0, and approaching 1 as n grows. This is a shrinkage estimator — the empirical mean shrunk toward a prior by an amount that decays with evidence. It is the same shape as a beta-binomial posterior mean, as James–Stein shrinkage, as Laplace smoothing. The paper offers the cleanest reading: "a prior with λ virtual visits whose average reward is v0. With the default neutral prior v0 = 0.5, λ = 2 corresponds to two virtual visits with one success and one failure."

Every card is born having already been tried twice — once successfully, once not. Real visits then have to outvote those two ghosts.

nconfidence = n/(2+n)Reading
00.000Pure prior. v = 0.5 exactly.
10.333One third data. A single failure moves v to 0.333, not 0.
20.500The crossover. Evidence and prior weigh the same.
50.714Data leading.
100.833Prior is a nudge.
180.900Chapter 2's RoboSpatial average. Ninety percent empirical.
300.938Chapter 4's ten-pass one-pass figure.

Worked example 4 — calibrate a card by hand

A card is written. Over the next passes it gets retrieved five times, and the problems it guided scored: 1, 0, 1, 1, 1. Take λ = 2, v0 = 0.5, so λv0 = 1.0.

Initial. n = 0, c = 0, v = 0.500.

Visit 1, r = 1. n = 1, c = 1.

v = (1.0 + 1) / (2 + 1) = 2/3 = 0.667

The empirical rate is 1.000 — a perfect record. TRS says 0.667. The prior is holding it back, correctly: one success is not evidence of reliability.

Visit 2, r = 0. n = 2, c = 1.

v = (1.0 + 1) / (2 + 2) = 2/4 = 0.500

Empirical rate 0.500, prior 0.500, and at n = 2 the weights are equal, so v lands exactly on 0.500. The card is back where it started — which is the right thing to say about a card that is 1-for-2.

Visit 3, r = 1. n = 3, c = 2.

v = (1.0 + 2) / (2 + 3) = 3/5 = 0.600

Visit 4, r = 1. n = 4, c = 3.

v = (1.0 + 3) / (2 + 4) = 4/6 = 0.667

Visit 5, r = 1. n = 5, c = 4.

v = (1.0 + 4) / (2 + 5) = 5/7 = 0.714

Now cross-check with the convex-combination form. Empirical rate c/n = 4/5 = 0.800. Confidence = 5/(2+5) = 5/7 = 0.714. So:

v = 0.714 × 0.800 + 0.286 × 0.500 = 0.5714 + 0.1429 = 0.714

Both routes agree. The card's honest track record is 80%; TRS reports 71.4%, because five visits is not yet enough to fully trust 80%.

Now verify order invariance by hand. Reorder the rewards as 1, 1, 1, 1, 0 — the failure last instead of second. After five visits: n = 5, c = 1+1+1+1+0 = 4. Identical. So v = (1.0 + 4)/(2 + 5) = 5/7 = 0.714. The same number.

Compare that to an exponential moving average with rate 0.3, which many memory systems use. Sequence 1,0,1,1,1 ends near 0.83; sequence 1,1,1,1,0 ends near 0.24. A three-and-a-half-fold difference from reordering the same five outcomes. Order invariance is not a nicety — retrieval order is an artefact of the shuffle seed, and an order-sensitive score would be reading noise.

Why order invariance is exactly right here. An EMA is the correct choice when the world is drifting — when recent evidence is more relevant because the environment changed. A lesson's transfer reliability is not drifting. It is a fixed property of a fixed sentence against a fixed problem distribution, and the visits are exchangeable samples of it. Under exchangeability, the sufficient statistics are (n, c) and nothing else. The paper's phrasing: the update "preserves exchangeability with respect to the order of observed rewards."

Worked example 5 — fractional rewards from pointing

Binary rewards make the estimator look like a success counter. RoboSpatial's pointing family breaks that, so work one through.

A card about multi-point spread in vacant regions is retrieved for four pointing problems. The coverage rewards come back as 0.60, 0.80, 0.40, 1.00. Same constants: λ = 2, v0 = 0.5, λv0 = 1.0.

Visit 1, r = 0.60. n = 1, c = 0.60.

v = (1.0 + 0.60) / (2 + 1) = 1.60 / 3 = 0.533

Visit 2, r = 0.80. n = 2, c = 1.40.

v = (1.0 + 1.40) / (2 + 2) = 2.40 / 4 = 0.600

Visit 3, r = 0.40. n = 3, c = 1.80.

v = (1.0 + 1.80) / (2 + 3) = 2.80 / 5 = 0.560

Visit 4, r = 1.00. n = 4, c = 2.80.

v = (1.0 + 2.80) / (2 + 4) = 3.80 / 6 = 0.633

Cross-check with the convex form. Empirical mean = 2.80/4 = 0.700. Confidence = 4/6 = 0.667.

v = 0.667 × 0.700 + 0.333 × 0.500 = 0.4667 + 0.1667 = 0.633

Notice what fractional rewards buy. Under binary scoring, visit 1 would have been a coin flip — either the single point landed in the hull (r = 1) or it did not (r = 0), and the card's estimate would swing to 0.667 or 0.333 on the strength of one guess. With coverage, r = 0.60 says "mostly right, partially wrong", and TRS moves to 0.533 — a small, well-earned step. Fractional rewards are variance reduction in the reliability estimate, and they cost nothing extra to compute.

This is also why the pointing prompt insists on several points. More points means the coverage fraction is a finer-grained measurement, which means each visit carries more information about the card. The scoring rule, the prompt instruction, and the TRS estimator are one design.

The estimator you already know, under a different name

If the formula looks familiar, it should. Line up three standard estimators and the resemblance is exact.

EstimatorFormPrior interpretation
SMA's TRS(λv0 + c) / (λ + n)λ virtual visits with average reward v0
Beta-binomial posterior mean(α + successes) / (α + β + trials)Identical, with α = λv0 and β = λ(1−v0). At λ = 2, v0 = 0.5 that is Beta(1, 1) — the uniform prior
Laplace / add-κ smoothing(count + κ) / (total + κ·K)The same shrinkage, written for categorical counts
Bandit value estimate with prior countsQ̂ = (Q0n0 + Σr) / (n0 + n)Optimistic or neutral initialisation, standard in UCB and Thompson implementations

So λ = 2, v0 = 0.5 is exactly a Beta(1, 1) prior — the flat, uninformative one — and the update is its posterior mean. The paper does not frame it Bayesianly, and it does not need to; the design properties in the table above are sufficient justification on their own. But the correspondence tells you the estimator is not ad hoc: it is the standard answer to "estimate a bounded rate from few, noisy, exchangeable samples", arrived at by listing requirements rather than by invoking a prior.

The one place the correspondence breaks is fractional rewards. A Beta-binomial posterior assumes successes are integer counts of Bernoulli trials; c = 2.80 from coverage scores is not that. The formula still computes a sensible shrunk mean of bounded observations, but the exact posterior interpretation is a convenient analogy rather than a derivation.

What λ buys, and what it costs

The paper is direct: "A larger λ makes the calibration more stable and conservative; a smaller λ makes it more reactive to early feedback."

Run the extremes on the same 1,0,1,1,1 sequence. With λ = 0 the estimator is the raw mean: after visit 1 it reads 1.000, after visit 2 it reads 0.500, and a card whose first visit happened to fail reads 0.000 — effectively deleted from ranking on the strength of one coin flip. With λ = 20 the final value is (10 + 4)/(20 + 5) = 0.560, barely off the prior after five real visits; you have built a mechanism that refuses to learn.

λ = 2 sits at the point where two real visits are enough to weigh as much as the prior. Given the coverage numbers from Chapter 4 — 18 to 30 visits per card under one-pass writing — that puts most cards deep in the evidence-dominated regime while still protecting the tail.

The λ sweep, computed

Take a single card with a fixed record — 8 visits, 6 successes, so an empirical rate of 0.750 — and read off what different prior strengths would say about it. v0 = 0.5 throughout.

λv = (0.5λ + 6)/(λ + 8)Confidence 8/(λ+8)Behaviour
06/8 = 0.7501.000Raw mean. A card that failed its first visit would read 0.000 and never be retrieved again
0.56.25/8.5 = 0.7350.941Barely any protection
27/10 = 0.7000.800The paper's setting. Two virtual visits, one success one failure
58.5/13 = 0.6540.615Conservative — 8 real visits still cannot fully outvote the prior
2016/28 = 0.5710.286Nearly inert. The score barely leaves v0 and ranking is effectively similarity-only
→ ∞0.500→ 0The mechanism is switched off. This is MemP

The two ends are both degenerate and they fail in opposite directions. At λ = 0 the estimator is maximally reactive and maximally fragile — single observations become confident assertions and the ranking chases noise. At large λ the estimator refuses to update and you have paid for machinery that does nothing.

Now check λ = 2 against the coverage numbers. RoboSpatial cards reach n = 18, confidence 0.900. EmbSpatial cards reach n = 12, confidence 0.857. Omni3D reaches n = 30, confidence 0.938. In every case the operating point is well into the evidence-dominated regime, while a card that somehow got only two visits still sits at confidence 0.500 and is protected from a bad pair of draws. The constant is chosen so that the typical card is trusted and the rare card is not.

What an adversarial visit sequence does

A useful way to stress an estimator is to ask what the worst realistic sequence does to it. Two cases.

Case 1 — a genuinely good card, unlucky early. Rewards 0, 0, 1, 1, 1, 1, 1, 1. True rate is 0.750.

After visitncv = (1 + c)/(2 + n)Raw mean c/n
1101/3 = 0.3330.000
2201/4 = 0.2500.000
4423/6 = 0.5000.500
6645/8 = 0.6250.667
8867/10 = 0.7000.750

The card recovers. Its worst reading is 0.250 after two failures, not 0.000 — and crucially, 0.250 is still inside the range where it can win a slot in a weak candidate set, so it gets the chance to prove itself. Under λ = 0 it would have read exactly 0.000 for two visits, near the bottom of any ranking, and might never have been retrieved again. Shrinkage is what keeps the estimator from being self-sealing.

Case 2 — a card that rides other cards' success. Suppose a useless lesson keeps getting co-retrieved with two excellent ones on easy questions. It accumulates c += 1 repeatedly and its TRS climbs toward 1.0, entirely undeserved.

The estimator has no defence against this. It is the credit-assignment hole in its purest form, and the only thing working against it is that retrieval is not that correlated — over 30 visits a card is pulled into a varied set of problems with varied partners, so a passenger's average drifts toward the base rate rather than toward its lucky partners'. That is a statistical argument, not a guarantee, and it is exactly why Limitation D.1 exists.

Drive the calibrator

Visit-evidence calibration

Feed the card visits and watch TRS move. The solid line is v; the dashed line is the raw empirical mean c/n it is being shrunk toward; the shaded band is the shrinkage gap. Change λ and re-run to see stability trade against reactivity. The last button proves order invariance: it replays the same rewards in reverse and lands on the same value.

λ (prior strength) 2.0
v₀ (prior value) 0.50

The whole mechanism, in code

Concept and realisation. Everything in this chapter is four lines of Python plus a dataclass. Here it is, so you can see there is no hidden machinery.

from dataclasses import dataclass, field

LAMBDA = 2.0   # prior strength — two virtual visits
V0     = 0.5   # prior value — one virtual success, one virtual failure

@dataclass
class Memory:
    task:    str            # t — the retrieval key AND prompt content
    summary: str            # s — exposed
    lesson:  str            # l — exposed. the payload
    key:     list           # ψ(t), precomputed once
    n: int   = 0          # visits — never exposed
    c: float = 0.0        # cumulative reward — never exposed
    v: float = V0         # TRS — uniform init, regardless of source outcome

    def visit(self, reward: float) -> None:
        """One retrieval outcome. reward ∈ [0, 1]."""
        self.n += 1
        self.c += reward
        self.v  = (LAMBDA * V0 + self.c) / (LAMBDA + self.n)

    @property
    def confidence(self) -> float:
        """How much of v comes from evidence rather than the prior."""
        return self.n / (LAMBDA + self.n)

Three lines in visit. That is the Transfer Reliability Score in its entirety.

And here is the property that makes it correct, expressed as a test you should actually write:

def test_order_invariance():
    rewards = [1, 0, 1, 1, 1]
    a = Memory("q", "s", "l", [])
    b = Memory("q", "s", "l", [])
    for r in rewards:           a.visit(r)
    for r in reversed(rewards): b.visit(r)
    assert a.v == b.v == 5 / 7   # 0.714…  — the worked example above
    # An EMA implementation fails this test. That is the point.

If you are porting this and you reach for v = alpha * reward + (1 - alpha) * v because it is one line shorter, this test is what catches you. The EMA gives 0.832 forward and 0.240 reversed at α = 0.3 — same evidence, wildly different conclusion, determined by shuffle order.

One implementation note the paper implies but does not state. Because visit recomputes v from scratch out of (n, c) rather than incrementing it, the update is idempotent under recomputation and safe to replay. You can serialise a bank as (n, c) pairs and reconstruct every v exactly. With an EMA you would have to serialise v itself and could never audit it. Sufficient statistics are an engineering convenience as well as a statistical property.

The credit-assignment hole, named early

There is a real weakness here and the paper puts it in its own limitations section, so we will name it now rather than pretend.

When a guidance set of three cards produces a correct answer, all three get c += 1. But maybe only one of them mattered. Maybe none did — the model would have answered correctly anyway. Maybe one helped and one actively hurt, and the net was positive. The update rule cannot tell these apart. The paper: "when a final answer improves or fails, the current framework cannot precisely determine whether the outcome should be attributed to memory writing, reflection, retrieval, semantic filtering, or the model's final use of the retrieved memory."

What saves it in practice is scale and randomness. Across thousands of retrievals, a card that never actually helps is co-retrieved with a broad, roughly random assortment of partners; its expected reward converges toward the base rate of the problems it gets pulled into. A card that genuinely helps lifts that average. The estimator is noisy per-visit but not biased in the limit — provided a card is retrieved for a reasonably diverse set of problems, which is another argument for keeping the bank small enough that each card gets used broadly.

Chapter 10 covers the work the paper points to for fixing this properly — attribution-guided process feedback, local rerollouts, provenance DAGs.

A card has been visited 5 times with rewards 1, 0, 1, 1, 1. With λ = 2 and v₀ = 0.5, TRS is 5/7 ≈ 0.714 while the raw success rate is 0.800. Which statement is correct?

Chapter 6: Filter, Then Rank

You have a bank of a few hundred cards, each carrying a lesson and a calibrated TRS. A new spatial problem arrives. You can afford to put three cards in the prompt. Which three?

The default answer everywhere in retrieval is "the three most similar". SMA does something else, and the paper's most quotable diagnostic is that doing something else means retrieving less similar memories and getting more accuracy.

Stage one: the semantic filter

Embed the current task string and every stored task string with ψ = text-embedding-3-large, then take cosines:

relij = cos( ψ(ti) , ψ(tj) )

Keep only what clears a threshold:

𝒞i = { mj ∈ ℋ : relij ≥ δ }

This is a hard cut, not a soft weight. A card below δ is discarded outright and cannot be rescued by a high TRS.

That asymmetry is deliberate and it is the most important structural fact in the retrieval design. TRS is a global quantity — "this lesson tends to help" — with no reference to the current question. Left unconstrained, a globally excellent lesson about pointing geometry would be injected into every question in the benchmark, including ones it has nothing to do with. The semantic filter is what keeps TRS honest: it says first establish topical relevance, then argue about reliability.

Which is exactly why removing the filter is the single most expensive ablation in the paper: −5.8 points on RoboSpatial (68.5 → 62.7) and −7.2 points on Omni3D (47.6 → 40.4). Larger than removing the lesson field. Larger than reward-only reflection. A high-TRS lesson delivered to the wrong question is worse than no lesson at all.

The threshold is tuned per benchmark

δ is not a universal constant, and the values are informative. From the Qwen3.5-122B-A10B hyperparameter table:

BenchmarkδReading
RoboSpatial0.618Highest — the three question families are phrased very consistently, so a genuine match scores high and the bar can be raised
ERQA0.600High — templated multiple-choice robot questions
EmbSpatial0.585Relation labels drawn from a closed set of six, so phrasings cluster
SAT0.561Mixed question types over one or two stills
Omni3D0.488Lowest — open answer space, free-form questions about metric quantities, occlusion, containment, counterfactual placement. Genuinely related questions can be worded so differently that a high bar would empty the candidate set

The Omni3D value is the interesting one. At δ = 0.488 you are admitting fairly loose matches, which sounds sloppy — until you remember stage two exists to sort them out. A low δ and a strong ranker is a different, and here better, allocation of work than a high δ and a weak ranker.

Filter and rank are one design, not two. The filter's job is recall — get the plausibly relevant cards into the room. The ranker's job is precision — pick the three that will actually help. Tuning δ alone, or η alone, misreads the system: δ controls how much work the ranker is given, and η controls how it does it.

Stage two: combined ranking

Among the survivors, score each candidate:

Sij = ( 1 − η ) · z( relij )  +  η · z( vj )

where z(·) is clipped z-score normalisation and η weights the TRS term. Take the top k. The paper's sweeps land on η = 0.5 and k = 3, and those values are used for every benchmark in the hyperparameter tables.

Two details deserve unpacking.

Why z-scores at all? Because the two quantities live on incomparable scales. Within a candidate set, similarities might span 0.62 to 0.71 — a range of 0.09 — while TRS spans 0.34 to 0.92, a range of 0.58. Add them raw with equal weight and TRS dominates by a factor of six, for no reason other than that its numbers happen to be more spread out. Z-scoring maps both to "standard deviations above this candidate set's mean", which makes η = 0.5 actually mean "count both equally".

The paper is careful about what the normalisation does and does not do: "Z-score normalization is used only to combine similarity and TRS on a comparable scale within the candidate set; it does not replace the low-visit shrinkage provided by λ, because shrinkage is part of the reliability estimate before candidate-level ranking."

Read that twice. Shrinkage happens first, at update time, and is about how much to believe a card's record. Z-scoring happens second, at rank time, and is about putting two numbers on one axis. If you z-scored raw empirical means instead, a card that is 1-for-1 would z-score as spectacularly reliable. Shrinkage is what stops that.

Why z-score within the candidate set? Because it makes the comparison local. The question "is this card's TRS high?" is answered relative to the other cards competing for the same slot, not relative to the whole bank. If every candidate is mediocre, the least mediocre still wins — which is correct, because you are choosing among these, not among all.

Worked example 5 — rank five candidates by hand

A RoboSpatial compatibility question arrives. δ = 0.618, η = 0.5, k = 3. Six cards clear the similarity floor in the raw bank; one falls below and is discarded before ranking.

CardrelTRS vPasses δ = 0.618?
A0.7800.42Yes
B0.7400.88Yes
C0.7000.50Yes
D0.6600.79Yes
E0.6200.61Yes
F0.5900.95No — discarded despite the best TRS in the bank

Step 1 — similarity z-scores. The five survivors have rel = 0.780, 0.740, 0.700, 0.660, 0.620.

mean = (0.780 + 0.740 + 0.700 + 0.660 + 0.620) / 5 = 3.500 / 5 = 0.700

Deviations: +0.080, +0.040, 0.000, −0.040, −0.080. Squares: 0.0064, 0.0016, 0, 0.0016, 0.0064, summing to 0.0160. Divide by 5 and take the root:

σrel = √(0.0160 / 5) = √0.0032 = 0.0566

So z(rel) = +1.414, +0.707, 0.000, −0.707, −1.414 for A through E.

Step 2 — TRS z-scores. v = 0.42, 0.88, 0.50, 0.79, 0.61.

mean = (0.42 + 0.88 + 0.50 + 0.79 + 0.61) / 5 = 3.200 / 5 = 0.640

Deviations: −0.220, +0.240, −0.140, +0.150, −0.030. Squares: 0.0484, 0.0576, 0.0196, 0.0225, 0.0009 → sum 0.1490.

σv = √(0.1490 / 5) = √0.0298 = 0.1726

So z(v) = −1.275, +1.390, −0.811, +0.869, −0.174.

Step 3 — blend at η = 0.5. S = 0.5·z(rel) + 0.5·z(v):

Cardz(rel)z(v)S = 0.5·z(rel) + 0.5·z(v)Similarity rankCombined rank
A+1.414−1.2750.5(1.414) + 0.5(−1.275) = +0.0701st3rd
B+0.707+1.3900.5(0.707) + 0.5(1.390) = +1.0492nd1st
C0.000−0.8110.5(0) + 0.5(−0.811) = −0.4063rd4th
D−0.707+0.8690.5(−0.707) + 0.5(0.869) = +0.0814th2nd
E−1.414−0.1740.5(−1.414) + 0.5(−0.174) = −0.7945th5th

Pure similarity would have picked A, B, C. The combined ranking picks B, D, A. Card C — middle similarity, exactly-average TRS of 0.50, which is the value of a card that has never been visited — is dropped for card D, which is noticeably less similar but has a demonstrated track record.

Now compute what the swap did to average retrieved similarity. Similarity-only picks A, B, C: mean rel = (0.780 + 0.740 + 0.700)/3 = 2.220/3 = 0.740. Combined picks B, D, A: mean rel = (0.740 + 0.660 + 0.780)/3 = 2.180/3 = 0.727.

Average similarity went down by 0.013. That is the mechanism behind the paper's headline diagnostic, at the scale of one query. Across the whole macro average, the same effect measures as 0.792 → 0.698, a drop of 0.094 in retrieved similarity, alongside 66.8% → 69.8% in accuracy. The paper's Finding 4 states it as well as anyone could: "The best memory is not always the nearest memory; transfer reliability turns retrieval from semantic matching into evidence-weighted procedure selection."

And look at card F once more. TRS 0.95 — the most reliable lesson in the entire bank — discarded at the filter for a similarity of 0.590 against a threshold of 0.618. That is the filter doing precisely its job. Whatever F is brilliant at, it is not this question.

How you would tune δ on a new task

δ is the one hyperparameter the paper varies per benchmark, so it is the one you would actually have to set yourself. There is no sweep reported for it, which means we should reason about it from what it does rather than pretend the paper prescribes a value.

δ controls the size of the candidate set, and both failure directions are visible in the simulation above.

δ too highδ too low
|𝒞| < k on many queries — the model gets one or two cards, or none|𝒞| is most of the bank — the ranker is doing all the work
The memory block is often omitted entirely; SMA degenerates to No-memoryTopically wrong lessons enter the running and can win slots on TRS alone
Diagnostic: high rate of empty candidate setsDiagnostic: mean retrieved similarity drops toward the bank average
Symptom: results converge on the No-memory baselineSymptom: the −5.8-point no-filter ablation, approached continuously

A sensible procedure, given what the paper reports: embed your environment split's questions, compute the full pairwise cosine distribution, and pick δ near a percentile that leaves comfortably more than k candidates for the median question. The observed values are consistent with exactly that. RoboSpatial's three tightly-templated families produce a high-similarity distribution, so δ = 0.618 still leaves plenty of candidates. Omni3D's free-form questions produce a much lower distribution, so the same percentile lands at 0.488.

Which reframes δ usefully: it is not a semantic constant meaning "similar enough". It is a percentile on the question-phrasing distribution of your particular task, and it has to be re-estimated whenever that distribution changes.

The consequence for anyone reusing a bank. Chapter 9 shows banks transferring across benchmarks. But a bank written on EmbSpatial and read on RoboSpatial has stored questions from one phrasing distribution being matched against queries from another — and the cosine distribution of that cross-product is neither of the two δ values the paper tuned. Cross-benchmark transfer numbers are therefore reported at some δ, and how sensitive they are to it is not something the paper measures. Worth knowing before building on the transfer result.

Drive the ranker

Two-stage retrieval — filter, then rank

Eight cards in the bank, plotted by similarity to the current question (horizontal) and TRS (vertical). The vertical line is δ: everything left of it is discarded. Among the survivors, the diagonal contours are equal-S lines; the three cards on the best side are selected and shown at the bottom. Slide η to 0 for pure similarity, to 1 for pure reliability, and watch which cards enter and leave the prompt.

η (TRS weight) 0.50
δ (similarity floor) 0.600
k (retrieved) 3

Push δ to 0.80 and watch the candidate set empty out — with fewer than k survivors, the model gets fewer than three cards, or none. Push η to 1.0 and the selection stops responding to the question at all: the same three globally-reliable cards get injected regardless of what is being asked. Both extremes are worse, which is why the sweep peaks in the middle at η = 0.5.

The same five cards at the two extremes

Keep the worked example's numbers and re-rank at η = 0 and η = 1. Nothing else changes — same filter, same candidates, same z-scores.

Cardz(rel)z(v)S at η = 0
pure similarity (MemP)
S at η = 0.5
SMA
S at η = 1
pure TRS
A+1.414−1.275+1.414 (1st)+0.070 (3rd)−1.275 (5th)
B+0.707+1.390+0.707 (2nd)+1.049 (1st)+1.390 (1st)
C0.000−0.8110.000 (3rd)−0.406 (4th)−0.811 (4th)
D−0.707+0.869−0.707 (4th)+0.081 (2nd)+0.869 (2nd)
E−1.414−0.174−1.414 (5th)−0.794 (5th)−0.174 (3rd)
Selected top-3A, B, CB, D, AB, D, E
Mean retrieved similarity0.7400.7270.673
Mean retrieved TRS0.6000.6970.760

Trace the mean-similarity row across the columns: 0.740, 0.727, 0.673. It falls monotonically in η, which is exactly the mechanism behind the 0.792 → 0.698 macro measurement. And the mean-TRS row rises: 0.600, 0.697, 0.760. η is a dial that trades one for the other, and the paper's sweep says the accuracy peak is halfway along.

Look at what η = 1 does to card E. It has the worst similarity of the five survivors, and it gets into the prompt purely because its TRS is not the worst. At η = 1 the ranking has stopped looking at the question — it is selecting globally good cards from whatever the filter happened to admit. That is the degenerate mode the paper's −5.8-point no-filter ablation is a stronger version of.

And look at what η = 0 does to card C: it gets a slot despite a TRS of exactly 0.50, which is the value of a card that has never been visited. Similarity-only retrieval cannot distinguish "reliably useless" from "completely unknown" from "reliably useful", because it does not look. That is MemP, and Chapter 9 shows MemP going negative on two atomic abilities.

Why the z-scores are clipped

The paper specifies "clipped z-score normalization", and the clipping is not cosmetic. Consider a candidate set where one card's TRS is a wild outlier — say four cards near 0.50 and one at 0.98 with three visits behind it. Its z-score could exceed 4 or 5, which after blending would dominate S no matter what the similarity term says, and it would take both remaining slots' worth of margin with it.

Clipping bounds any single term's contribution, so a blend at η = 0.5 really is a blend rather than a lexicographic sort with a tiebreak. It is the ranking-time analogue of what λ does at update time: both are mechanisms for refusing to let thin evidence become a strong assertion.

There is a second reason clipping matters here specifically. Candidate sets are small — often a handful of cards — and z-scores computed over five samples are noisy by construction. The standard deviation in our worked example was estimated from five points; with a different five it could easily halve, doubling every z-score. Clipping caps how much that estimation noise can propagate into the selection.

What retrieval costs

Concept and realisation: what does a query actually execute?

StepOperationCost
Embed the query taskOne text-embedding-3-large call — and the paper says embeddings are precomputed, so in practice a cache lookup~0 at query time
Similarity against the bankOne matrix–vector product: (|ℋ| × d) · (d)175 × 3072 multiply-adds ≈ 0.5M flops. Microseconds
ThresholdOne comparison per cardNegligible
Two z-scores over candidatesTwo means and two standard deviations over |𝒞| valuesNegligible
Top-kPartial sort of |𝒞|Negligible
Render and prependString formatting, ~400–500 tokensThe only real cost — prefill on ~500 extra tokens

The entire retrieval stack is a dot product and a sort. There is no vector index, no ANN structure, no reranker model — at a few hundred to a few thousand cards, brute force is faster than anything clever. The dominant cost is the prefill on 500 extra prompt tokens, which against an image-bearing prompt at a 32,768-token budget is noise.

Compare that with route two from Chapter 0: running a depth estimator and a 3D reconstruction pipeline per question. The asymmetry in inference cost between "call a monocular depth model" and "do a 175×3072 dot product" is several orders of magnitude, and it is the practical reason the parameter-update-free route is interesting even where a tool agent would score higher.

Two-stage retrieval, in code

The other half of the realisation. Twenty lines, no dependencies beyond NumPy.

import numpy as np

DELTA = 0.618   # RoboSpatial. a percentile on YOUR question distribution
ETA   = 0.5     # sweep peak
K     = 3       # sweep peak

def z(x, clip=3.0):
    """Clipped z-score. Computed WITHIN the candidate set, not globally."""
    x = np.asarray(x, dtype=float)
    sd = x.std()
    if sd < 1e-9:                 # all candidates identical on this axis
        return np.zeros_like(x)     # → contributes nothing to the blend
    return np.clip((x - x.mean()) / sd, -clip, clip)

def retrieve(query_key, bank):
    # --- stage 1: semantic filter (a HARD cut — TRS cannot override it) ---
    rel  = np.array([float(query_key @ m.key) for m in bank])  # keys are unit-norm
    keep = np.flatnonzero(rel >= DELTA)
    if keep.size == 0:
        return []                       # memory block omitted entirely → No-memory behaviour

    # --- stage 2: combined ranking ---
    cand = [bank[i] for i in keep]
    S = (1 - ETA) * z(rel[keep]) + ETA * z([m.v for m in cand])
    order = np.argsort(-S)[:K]
    return [cand[i] for i in order]

Four details in that code are load-bearing, and three of them are easy to get wrong.

1. z is called on rel[keep], not rel. Normalising over the whole bank instead of the candidate set would make the similarity z-scores measure "how similar is this compared to everything, including the cards we already rejected" — which compresses the surviving candidates into a narrow band near the top and effectively kills the similarity term. Local normalisation is the point.

2. The zero-variance guard. If every candidate has the same TRS — which is exactly the situation early in pass 0, when every card sits at v0 — the standard deviation is zero and a naive z-score is a division by zero or a NaN that silently poisons the sort. Returning zeros makes the TRS term contribute nothing and the ranking fall back to pure similarity, which is the correct behaviour when there is no reliability information yet.

3. The empty-candidate early return. It returns a list, not an error, and the caller omits the memory block. Chapter 7's floor property depends on this branch existing.

4. Keys are unit-norm, so cosine is a dot product. Normalise once at write time and retrieval is a single matrix-vector product. At a few hundred cards this is faster than any index you could build.

What the ranking cannot do

One structural gap worth naming. The top-k is computed independently per card — each candidate gets a score and the best three win. There is no term penalising redundancy within the selected set. If the three highest-scoring cards happen to carry the same lesson in three phrasings, all three go in the prompt.

Retrieval literature has standard answers to this — maximal marginal relevance, submodular selection, clustering before ranking. SMA uses none of them, and instead attacks the problem upstream: One-Pass Memory Writing exists partly so that near-duplicates never enter the bank in the first place. That is a legitimate design choice, and it makes Chapters 4 and 6 two halves of one argument. It is also the place a follow-up paper would most obviously push.

Where this sits in the retrieval literature

Strip away the spatial framing and Chapter 6 is a retrieval-ranking design. It is worth naming what it is and is not, because retrieval has a long history of two-stage systems.

PatternStage 1Stage 2Where SMA differs
Classic retrieve-and-rerankCheap recall — BM25 or ANNAn expensive learned cross-encoder scoring query–document pairsSMA's stage 2 is not query-dependent. TRS knows nothing about the current question
Learning to rankCandidate generationA model trained on relevance labelsNo training. η is set by sweep, not learned; there are no relevance labels
PageRank-style priorsQuery matchA query-independent quality score blended inThis is the closest analogue. TRS is a query-independent quality prior, exactly like a document authority score
Contextual banditsRestrict arms by contextSelect by estimated valueAlso very close — see the cross-domain bridge in Chapter 10. The difference is that η is fixed rather than an explore/exploit schedule

The PageRank comparison is the most illuminating. Web search learned decades ago that pure query–document matching is exploitable and insufficient, and that blending in a query-independent quality signal — how often does anyone link to this page — is what makes ranking robust. TRS is the same move: how often did this card help, independent of what is being asked.

And the same caveat applies. A query-independent prior must be gated by relevance, or your highest-authority page gets returned for every query. That is precisely why the semantic filter is a hard cut and why removing it is the most expensive ablation in the paper. Chapter 6 rediscovers, in a memory-agent setting, a lesson search engines learned about ranking a long time ago.

What is genuinely new is where the quality signal comes from. PageRank harvests link structure that already exists. TRS has no such structure to harvest — there are no links between memory cards — so it manufactures the signal by using each card and watching what happens. The retrieval system generates its own authority scores by acting.

SMA reduces the average similarity of retrieved memories from 0.792 to 0.698 while raising accuracy from 66.8% to 69.8%. What does this pair of measurements license you to conclude?

Chapter 7: Read-Only Deployment

Acquisition is over. The bank is written and calibrated. Now the agent meets problems it has never seen, and this chapter is about the contract it operates under — which is defined mostly by a list of things it is not allowed to do.

The three freezes

The paper: "Deployment does not write new memories and does not update any memory-value state: the visit count ni, cumulative reward ci, and TRS value vi remain frozen even when a memory is retrieved."

FrozenMeaningWhy it matters for the result
Model weightsF is the same function throughoutThe "parameter-update-free" claim. Nothing is being trained anywhere.
Bank contentsNo new cards written from deployment problemsDeployment problems cannot become memories, so nothing can be re-retrieved for itself or for its near neighbours in the same split
Reliability state (n, c, v)Retrieval no longer moves TRSThe subtle one — see below

The third freeze is the one that would be easy to skip, and it is the strictest.

Suppose TRS were updated during deployment. Updating requires a reward. A reward requires the verified target. So the system would be reading answer keys on the test set at inference time, and every deployment question would improve the ranking for the questions after it. Accuracy would then be a function of evaluation order, and the number would no longer mean "how well does this memory bank transfer" — it would mean "how well does this memory bank transfer, plus how much online supervision leaked in".

Freezing (n, c, v) closes that door completely. Deployment needs no targets at all — the pseudocode's deployment loop takes ξi = (𝒱i, ti), with no y field — and every question is answered by a system in exactly the same state.

The practical reading. This is not just experimental hygiene, it is what a deployed system looks like. In the warehouse there is no verifier standing next to the robot. Read-only deployment is the regime where you have no rewards — which is the regime that matters — and the paper's protocol matches it exactly rather than quietly assuming online feedback.

What one deployment call actually contains

Trace the tokens end to end for a single question.

1. System prompt
Benchmark-specific. Names the question families, the shared capability behind each, cross-cutting checks, the silent reasoning protocol, and the exact output contract — e.g. "<answer>Yes</answer> or <answer>[(x1,y1),…]</answer> with normalized floats in [0,1]".
2. Retrieval header
"Relevant memories from prior RoboSpatial rollouts (different images): Treat these as procedural notes, not answer keys." Then three instructions: match on structural shape not object nouns; high similarity does not license copying; extract at most one check or trap per memory.
3. Memory item block × k
Rank, task_similarity to three decimals, prior_task_shape, transferable_lesson, abstract_summary, and the hidden prior_model_output line. Repeated once per retrieved card. Omitted entirely if the candidate set is empty.
4. Retrieval footer
Per-family memory-use notes, then the three closers: "If no memory fits the shape, ignore them" — "Re-derive the answer from the current image only" — "End with exactly one line: <answer>…</answer>".
5. The actual task
Image(s) plus question text. Then one vLLM completion at temperature 0, top-p 1, max 32,768 new tokens, repetition penalty 1.5, presence penalty 1.0.

Count the defensive instructions in that stack. "Treat these as procedural notes, not answer keys." "High task similarity does NOT license copying prior coordinates or Yes/No; the current image is always new." "Current image wins over any memory; never copy prior coordinates or Yes/No labels." "Extract at most one check or one trap per memory, then re-derive from the current image." "If no memory fits the shape, ignore them."

Five separate hedges against one failure mode. That density tells you something honest about the method: the biggest risk in in-context memory is not that the model ignores the memory, it is that the model over-trusts it and copies. The design is layered against this — anti-leakage rules at write time, the hidden-output line at render time, and these instructions at read time.

A full deployment trace, end to end

Walk one RoboSpatial compatibility question all the way through, naming every object as it appears. This is the whole system, once.

#What happensObject produced
1Problem arrives from 𝒟ξ = (one RGB image, "Can the storage bin fit to the right of the desk?") — note: no target field
2Look up the precomputed keyψ(t), a dense vector
3Cosine against all 175 stored keys175 similarities in [−1, 1]
4Discard anything below δ = 0.618𝒞, say 11 candidates
5Z-score rel and v over those 11; blend at η = 0.511 scores Sij
6Take the top 3𝒜 — three cards
7Render header + 3 memory blocks + footer~450 tokens of text
8Prepend to the benchmark prompt; call vLLMo — up to 32,768 tokens ending in one <answer> line
9Extract the tag contentsŷ = "No"
10Record it. Update nothingn, c, v untouched. Bank unchanged. Weights unchanged

Step 10 is the whole chapter. In acquisition, step 10 was four separate mutations. In deployment it is a no-op.

And notice step 1: the deployment tuple genuinely has no y in the pseudocode — for all ξi = (𝒱i, ti) ∈ 𝒟. The target exists in the benchmark, of course, and is used afterwards to compute the reported accuracy. But it is not available to the system while the system is answering, which is the difference between evaluating a model and training one.

Where the guidance sits relative to the image

One placement detail with a real consequence. The paper says the guidance set "is prepended to the current user prompt" and that the composed memory context "is prepended to the current benchmark task". So the order is: system prompt, then memory block, then the task with its image.

Prepending rather than appending means the model reads the procedures before it reads the question and looks at the image. For a reasoning model that produces its chain of thought after ingesting the full prompt, this ordering primes the approach rather than second-guessing a conclusion already forming. It also means the memory block is at a stable position, which matters for prefix caching — though with three cards varying per query, the memory block itself is not cacheable across questions.

The alternative — task first, memory after — would put the advice in the position of a correction. Given how hard the prompt works to prevent the model from treating memories as answers, arriving before the question is the safer position: a procedure you read before seeing the problem is a lens; one you read after is a hint.

The empty-candidate case

Worth stating because it is a real branch: if no card clears δ, "this block is omitted". The model gets the plain benchmark prompt, exactly as in the No-memory baseline.

This is a good property. It means the floor of SMA on any individual question is the no-memory behaviour, not something worse. A question sufficiently unlike anything in the environment split simply gets answered without help, rather than being handed an irrelevant lesson. It also explains part of why the whole-benchmark gains look modest on saturated benchmarks — on EmbSpatial, where no-memory is already 85.7%, most questions have little room to move and some get no memory at all.

The composed prompt, in full

Here is the whole thing, assembled, for a RoboSpatial compatibility question. Fixed text is quoted from the paper's templates; runtime-filled fields are marked.

══ SYSTEM ══════════════════════════════════════════════════
You solve RoboSpatial-Home open-answer questions from a single indoor RGB image.
…
Spatial-intelligence question families (recognize the *structural shape*…):
 1) Vacant-region localization via normalized pointing
 2) Object-object spatial configuration verification
 3) Placement compatibility and affordance
Cross-cutting checks:
 - Image-plane directions ("left of") follow the camera view unless stated.
 - For pointing: spread several valid points; coordinates in [0, 1].
 - For Yes/No: inspect *both* named objects and the exact relation phrase.
Reasoning protocol (apply silently; do not narrate the protocol):
 1. Single-image grounding.   2. Shape-specific validation.   3. Decision discipline.
Input / output constraints:
 - Yes/No output: exactly `<answer>Yes</answer>` or `<answer>No</answer>`
 - Pointing output: exactly `<answer>[(x1, y1), …]</answer>`, floats in [0, 1]

══ MEMORY CONTEXT (omitted entirely if 𝒞ᵢ is empty) ════════
Relevant memories from prior RoboSpatial rollouts (different images):
Treat these as procedural notes, not answer keys.
 - Match each memory to the *structural shape*… not to similar object nouns alone.
 - High task similarity does NOT license copying prior coordinates or Yes/No.
 - Extract at most one check or one trap per memory, then re-derive.

[Memory 1] task_similarity=0.741            ← runtime
 - prior_task_shape:     {task}              ← runtime
 - transferable_lesson:  {transferable_lesson} ← runtime
 - abstract_summary:     {summary}           ← runtime
 - prior_model_output:   [hidden; do not reuse prior coordinates, Yes/No, or wording]
[Memory 2] …
[Memory 3] …

Memory-use (silent):
 - Pointing: turn memories into checks — anchor object, correct side, multiple
   points in vacant pixels, stay in [0, 1].
 - Configuration: bind both objects, test the stated relation verb against pixels.
 - Compatibility: estimate clearance and obstacles before Yes/No.
 - If no memory fits the shape, ignore them.
 - Re-derive the answer from the current image only.
 - End with exactly one line: `<answer>…</answer>`

══ USER ════════════════════════════════════════════════════
<image>
Can the storage bin fit to the right of the desk? Answer yes or no.

Three structural observations you can only make with the whole thing in view.

The memory context is sandwiched, not appended. It sits after the system prompt and before the image. So the model reads the general procedure, then the specific procedures, then the problem — general to specific to concrete, which is the order a human would want.

The system prompt and the memory block say overlapping things. "Inspect both named objects and the exact relation phrase" is in the system prompt; "bind both objects, test the stated relation verb against pixels" is in the memory footer. That redundancy is deliberate. The system prompt is the general scaffold present in every condition including No-memory; the memory block adds specifics learned from experience. The reported gains are what the specifics buy on top of a good general prompt.

The three hardest instructions all appear in the memory block, not the system prompt. "Not answer keys", "does NOT license copying", "re-derive from the current image only". None of these are needed when there is no memory. Their presence is a map of the risks memory introduces.

The three states of the system

It is worth laying the whole lifecycle out as a state machine, because "acquisition" is really two states wearing one name and conflating them causes confusion.

 State A: Writing
pass 0 over 𝒳
State B: Calibrating
passes 1…T−1 over 𝒳
State C: Deploying
one pass over 𝒟
Retrieval runsYesYesYes
Solver calledYesYesYes
Verifier calledYesYesNo
New cards writtenYesNoNo
(n, c, v) updatedYesYesNo
Needs targetsYesYesNo
Bank size at end|𝒳||𝒳| — unchanged|𝒳| — unchanged
Model calls2 per problem (solve + reflect)1 per problem1 per problem

State C is the only one you could run in production, because it is the only one that does not need answers. States A and B are an offline preparation phase — the analogue of training, executed entirely with forward passes.

Read the "Model calls" row and the economics become clear. Writing costs two calls per problem. Calibrating costs one. Deploying costs one, forever. So the entire investment is (2 + (T−1)) × |𝒳| calls, amortised over every deployment query thereafter. For RoboSpatial at T = 6 that is 7 × 175 = 1,225 calls, once. Every deployment query after that costs exactly what a No-memory query costs, plus ~450 prompt tokens.

The engineering budget, honestly

If you were putting this in front of a robot, what would you actually be paying?

CostMagnitudeNotes
Extra prompt tokens per query~450Header + 3 memory blocks + footer. Prefill only, no extra decode
Extra decode tokensUnknown, likely positiveA model given a "validate by <check>" instruction will produce more reasoning. The paper does not report token counts, and this is a genuine unmeasured cost
Retrieval computeMicrosecondsOne dot product against |ℋ| × 3072, then a partial sort
Embedding the queryZero at query timePrecomputed in the paper; in production, one embedding call per novel question
StorageKilobytes175 cards of text, plus 175 × 3072 floats ≈ 2 MB of keys
Offline preparation~1,225 model callsOnce, per task family. Reusable across base models — see Chapter 9

The one row worth flagging is decode length. Prompting a model to apply an explicit check-and-validate procedure plausibly lengthens its chain of thought, and at temperature 0 with a 32,768-token budget there is room for that to be substantial. The paper reports accuracy but not latency or token counts, so the true inference-time cost of SMA relative to No-memory is not established. It is almost certainly far below a depth-estimation pipeline, but "almost certainly" is doing work there.

Why temperature zero matters more than it looks

Every run uses temperature 0 and top-p 1 — greedy decoding. For the headline results this is standard practice. But it interacts with the memory mechanism in a specific way worth noticing.

Under greedy decoding, a given (image, question, guidance) triple maps to exactly one output. So the reward attributed to a guidance set is not an average over samples — it is a single deterministic outcome. All the stochasticity in the TRS estimate comes from which problems a card gets retrieved for, not from sampling noise in the model.

That is why the visit count n is a meaningful sample size: each visit is an independent draw from the distribution of problems that retrieve this card, and the reward is a deterministic function of that draw. It is also why the ten-pass repetition is about coverage rather than variance reduction — re-running the same problem with the same bank state would return the same answer.

Threats to the read-only claim, checked one by one

"Read-only" is a strong claim, and the value of the whole paper depends on it holding. Here is every route by which deployment information could leak backwards, and what closes it.

Potential leakClosed byResidual risk
A deployment problem becomes a memoryNo writing during deployment; splits are disjoint by construction with a fixed seedNone, if the split code is correct
Deployment rewards move TRS(n, c, v) frozen; the deployment loop takes no targetNone
A card contains a target from 𝒳 that happens to answer a 𝒟 questionAnti-leakage rules A–C at write timeReal but bounded — enforced by prompt, not by code. Would show as inflated gains only where 𝒳 and 𝒟 questions share answers
Checkpoint selection uses deployment accuracyNothing — this is exactly what "best checkpoint from the 10-pass run" doesReal. A consistently applied hyperparameter choice, but one that consumes evaluation signal
δ and η tuned on deploymentη and k are swept on RoboSpatial; δ varies per benchmark with no stated procedureReal. Per-benchmark thresholds tuned against reported numbers would be optimistic
Evaluation order effectsFrozen state means every question is answered identically regardless of positionNone — this is the direct payoff of freezing (n, c, v)

Three of the six are fully closed by construction; three are prompt-enforced or protocol-level and carry residual risk. That is a normal profile for an empirical paper, and the authors are transparent about the checkpoint rule. The one to keep in mind when reading Chapter 8 is that the SMA rows are best-of-ten calibration states while the baselines are reported at whatever their own protocols specify — the comparison is fair in that the same rule is applied to all SMA rows, but it is not a blind single-shot number.

What happens when the memory is wrong

A question the design has to answer: what is the damage when a retrieved card is confidently irrelevant?

Chapter 8's delta table gives the empirical answer — across all four base models and five benchmarks, SMA never falls below the no-memory baseline in any cell. So the layered defences are, in aggregate, sufficient. But it is worth naming what each layer is holding back, because they are the reason.

Layer 1 — write time
Anti-leakage rules keep the card from containing an answer or a scene. A card that is wrong is at worst wrong advice, never a wrong answer.
Layer 2 — filter
Cosine below δ and the card never appears, no matter how high its TRS. Topically wrong cards are excluded before ranking.
Layer 3 — ranking
A card that repeatedly coincides with failure loses TRS and stops winning slots. Bad advice self-demotes over passes.
Layer 4 — render time
The prior output is hidden with a line saying it is hidden and why. There is nothing concrete to copy.
Layer 5 — read time
Five instructions telling the model to treat cards as notes, re-derive from the current image, extract at most one check per card, and ignore anything that does not fit the shape.

Compare this with RAG, which has layer 2 and nothing else — and which goes negative on two of four base-model blocks. The layering is the difference between a mechanism that helps on average and one that never hurts.

What "best checkpoint" means, and why to flag it

One methodological detail belongs here rather than buried in Chapter 8. The main table reports, for SMA, "the best checkpoint from the 10-pass One-Pass Memory Writing run", with "the same selection rule applied to all SMA rows".

A "checkpoint" here is a state of the memory bank after some number of passes — the cards are fixed after pass 0, so what varies across checkpoints is the calibration state (n, c, v), and therefore the ranking. Selecting the best one is a legitimate hyperparameter choice, consistently applied. It is also a choice that consumes some of the evaluation signal, and the honest framing is: the reported number is the best of ten calibration states, not the state you would get by fixing the pass count blindly. The per-benchmark pass counts in the hyperparameter table (RoboSpatial 6, ERQA 2, Omni3D 10, SAT 9, EmbSpatial 4) are the outcome of that selection.

What would have to change to run this on a robot

Everything so far is a benchmark protocol. The paper's motivation is embodied agents, so it is worth being explicit about the gap between "held-out deployment split" and "in the aisle".

Benchmark deploymentReal deploymentDoes SMA already handle it?
Questions arrive as text with imagesQuestions arrive as goals from a planner, or not at allNo — the retrieval key is a question string. Something must generate one
One question, one answer, doneLong-horizon: many decisions, reward at the endNo — rollouts are single-turn. Credit assignment across steps is unaddressed
No verifier at deploymentNo verifier at deploymentYes — this is exactly what read-only means, and it is the one thing that already matches
The question distribution is fixedThe distribution drifts — new rooms, new objects, new tasksNo — frozen banks do not adapt, and order-invariant TRS deliberately cannot track drift
Latency is irrelevantLatency is a control-loop constraintPartly — retrieval is microseconds, but the extra reasoning tokens are unmeasured
Bank size is fixed at |𝒳|Bank would grow indefinitely without a lifecycleNo — Limitation D.2

One row is already solved and it is the important one. The hardest thing about deploying a learned system is usually that learning needs supervision and deployment does not have any. SMA's read-only phase is designed for exactly that asymmetry: acquisition happens where verifiers exist, deployment happens where they do not, and nothing in the deployment path needs a reward signal.

The remaining rows are honest open work, and the paper's limitations section names two of them (drift and lifecycle under D.2, credit assignment under D.1). The single-turn constraint is not named as a limitation, and it is arguably the largest gap between the demonstrated system and the motivating application.

What "no verifier at deployment" buys you

Worth dwelling on, because it distinguishes this from the test-time-training literature it superficially resembles.

A system that updates at test time — test-time training, online RL, adaptive prompting with feedback — needs a reward at test time. Sometimes you have one: a compiler, a unit test, a simulator. Often you do not: there is no oracle standing behind a robot telling it whether the bin actually fits. Systems in that second category either fake a reward (self-consistency, model-as-judge, confidence heuristics) or do not adapt.

SMA takes the third option: do all the adapting where rewards are free, then stop. The environment split is a place where rewards are free, because it is a labelled dataset. Deployment is a place where they are not, so deployment does not use them. The system is not "online learning with a weak reward"; it is "offline learning, then a fixed artefact".

That is a less exciting position than continual adaptation, and it is a far more shippable one. It also means the failure mode is legible: if the deployment distribution drifts away from the environment split, performance degrades quietly rather than adapting wrongly. A frozen artefact fails predictably.

During read-only deployment, SMA freezes not only the weights and the bank contents but also each card's (n, c, v). Why is freezing the reliability state specifically necessary?

Chapter 8: The Numbers, Honestly

Twenty evaluations: five benchmarks by four frozen base models, six methods each. Here is the whole table, and then the parts of it that are less flattering than the abstract.

The main table

Accuracy (%), measured on the held-out deployment split. Avg. is the macro average over the five columns.

ModelMethodRoboSpatialERQAOmni3DSATEmbSpatialAvg.
Qwen3.5-
122B-A10B
No memory61.254.540.083.787.365.3
RAG56.855.540.482.086.464.2
MemP62.455.039.282.387.565.3
MemRL-R63.056.040.485.386.566.2
MemRL-GT64.053.540.083.786.665.6
SMA65.560.543.287.087.668.8
Qwen3.6-
35B-A3B
No memory57.149.537.278.086.361.6
RAG55.050.542.484.384.163.3
MemP55.251.542.082.387.663.7
MemRL-R53.654.040.884.086.863.8
MemRL-GT52.751.043.681.387.063.1
SMA57.957.545.285.387.766.7
Qwen3.6-27BNo memory54.153.041.682.385.763.3
RAG59.354.544.085.086.565.9
MemP65.451.544.086.087.166.8
MemRL-R62.251.544.883.786.865.8
MemRL-GT67.255.543.687.087.268.1
SMA68.558.047.687.087.969.8
Qwen3.5-9BNo memory58.146.537.277.384.160.6
RAG55.549.531.677.781.859.2
MemP53.753.034.478.084.260.7
MemRL-R54.243.536.476.782.558.7
MemRL-GT52.749.034.480.383.860.0
SMA58.552.040.881.384.963.5

The three readings that hold up

1. SMA has the best macro average in all four blocks. 68.8, 66.7, 69.8, 63.5. And the margins over the strongest non-SMA baseline in each block are +2.6 (over MemRL-R's 66.2), +2.9 (over MemRL-R's 63.8), +1.7 (over MemRL-GT's 68.1), +2.8 (over MemP's 60.7). Note the strongest baseline is a different method in three of the four blocks — there is no single runner-up.

2. Gains are not concentrated in one benchmark type. On Qwen3.6-27B: RoboSpatial 54.1 → 68.5 (+14.4), Omni3D 41.6 → 47.6 (+6.0), EmbSpatial 85.7 → 87.9 (+2.2). Open pointing, open 3D reasoning, and closed relation labels all move up.

3. Memory is not automatically good. This is the most useful thing in the table and it comes from the baseline rows. Count the cells where a memory method is worse than no memory at all: RAG loses on the 122B block (64.2 vs 65.3) and on the 9B block (59.2 vs 60.6). MemRL-R loses on the 9B block (58.7 vs 60.6). MemRL-GT loses on the 9B block (60.0 vs 60.6). On Qwen3.5-9B, every single baseline is at or below the no-memory average, and only SMA beats it.

The 9B block is the paper's most interesting evidence. A weaker model has less headroom to exploit in-context guidance and more tendency to be derailed by it — and indeed four of five baselines make it worse. That SMA is the only method that helps at 9B is a stronger claim than any of the margins: the difference is not "memory helps", it is "reliability-filtered memory helps where unfiltered memory hurts".

Where SMA does not win

The abstract says "best accuracy among the evaluated methods in most of the 20 evaluations". Here are the cells it does not win, and the appendix block where it loses outright.

In the main table. On Qwen3.6-27B SAT, SMA and MemRL-GT tie at 87.0. On Qwen3.5-9B RoboSpatial, SMA's 58.5 is only 0.4 above no-memory's 58.1 — and no-memory beats every other baseline on that cell. On Qwen3.5-9B ERQA, SMA's 52.0 is below MemP's 53.0. So "most of 20" is doing real work in that sentence.

In the appendix. Table 7 evaluates two further benchmarks, SITE-image and ViewSpatial, on all four models:

ModelMethodSITEViewS.Avg.
Qwen3.5-
122B-A10B
No memory70.448.459.4
RAG68.447.357.9
MemP71.454.963.2
MemRL-R70.559.665.1
MemRL-GT70.962.866.9
SMA71.459.765.6
Qwen3.6-27BNo memory69.548.959.2
RAG70.549.860.2
MemP73.055.364.2
MemRL-R73.857.665.7
MemRL-GT72.264.368.3
SMA74.063.268.6
Qwen3.6-
35B-A3B
No memory66.149.457.8
RAG67.349.258.2
MemP68.854.761.8
MemRL-R69.257.163.2
MemRL-GT68.057.462.7
SMA69.560.765.1
Qwen3.5-9BNo memory57.646.051.8
RAG57.742.350.0
MemP60.748.754.7
MemRL-R62.148.055.0
MemRL-GT63.348.756.0
SMA63.950.257.1

On the Qwen3.5-122B-A10B block, MemRL-GT beats SMA on both the ViewSpatial column (62.8 vs 59.7) and the two-benchmark average (66.9 vs 65.6). That is a clean loss, reported by the authors, in their own appendix. On the 27B block MemRL-GT also takes ViewSpatial (64.3 vs 63.2) though SMA takes the average.

ViewSpatial is the benchmark about multi-perspective localisation — camera-relative direction, person-relative direction, object orientation, scene simulation. It is the one where the same scene is shown from several views. A plausible reading is that perspective-transformation questions reward a strong reflection signal (which MemRL-GT has, since it also gets ground truth) more than they reward reliability filtering — but the paper does not analyse this and neither should we pretend to. The honest statement is: on ViewSpatial with a large base model, ground-truth-guided reflection without TRS was better, twice.

The training-based comparison, scoped correctly

Table 3 compares SMA on Qwen3.5-9B against SpatialEvo-7B, a public training-based self-evolving spatial baseline.

MethodRoboS.ERQAOmni3DSATEmbS.Avg.
SpatialEvo-7B41.337.025.657.774.147.1
SMA (Qwen3.5-9B)58.552.040.881.384.963.5
Δ+17.2+15.0+15.2+23.6+10.8+16.4

A sixteen-point macro average gap, higher on every benchmark. It is the paper's most dramatic table and also the one to be most careful with, and the authors are: they note SpatialEvo was chosen because it "releases a public 7B baseline", and conclude only that "an external procedure-memory route can be competitive with training-based spatial self-evolution under this evaluation scope."

Three reasons to keep that hedge. The base models differ (7B versus 9B, different families, different pretraining). The evaluation is the paper's own splits, not SpatialEvo's reported protocol. And it is a single training-based system — SpatialEvo, SAGE, and AtlasVA are all named in the related work, but only one had a public checkpoint to run. "Competitive with one public 7B training-based baseline on our splits" is what the table supports.

"Most of the 20 evaluations", counted

The abstract's central claim deserves an exact tally rather than a vibe. Twenty evaluations means five benchmarks × four base models. For each cell, does SMA hold the highest accuracy among the six methods?

ModelRoboS.ERQAOmni3DSATEmbS.Block
Qwen3.5-122B-A10Bwinwinwinwinwin5 / 5
Qwen3.6-35B-A3Bwinwinwinwinwin5 / 5
Qwen3.6-27Bwinwinwintie (87.0, MemRL-GT)win4 wins, 1 tie
Qwen3.5-9Bwinloss (52.0 vs MemP 53.0)winwinwin4 / 5

18 outright wins, 1 tie, 1 loss. "Most of the 20" is an understatement, and it is interesting that the authors chose the weaker phrasing when 18/20 was available. The likely reason is the appendix: extend to seven benchmarks and the 122B block loses ViewSpatial to MemRL-GT and the 27B block loses it too, taking the tally to 20 wins, 1 tie, 3 losses out of 28. "Most" is accurate under either counting, and safe under both.

Now do the same for the block averages, which is the claim the abstract makes separately: "the highest macro average in every base-model block." 68.8 > 66.2, 66.7 > 63.8, 69.8 > 68.1, 63.5 > 60.7. Four for four in the main table. In the appendix's two-benchmark average, SMA takes three of four blocks — losing the 122B to MemRL-GT, 65.6 against 66.9.

The one loss, examined. Qwen3.5-9B on ERQA: MemP 53.0, SMA 52.0. Worth noting that on this same cell No-memory scores 46.5, so both methods help substantially and the gap between them is one point on a 200-item deployment split — two questions. With no reported variance or confidence intervals anywhere in the paper, a two-question difference is not distinguishable from noise. That cuts both ways: several of SMA's narrower wins are equally undistinguishable, and the absence of error bars is the single biggest gap in the paper's reporting.

What is missing from the reporting

Since we are being honest about the numbers, here is what a reader cannot check.

Not reportedWhy it matters
Variance or confidence intervalsEverything runs at temperature 0, so there is no sampling variance — but there is split variance and seed variance. A single seed-42 split per benchmark means a 1–2 point difference has unknown significance, especially on 175- and 200-item splits
Token counts and latencyThe practical cost of SMA versus No-memory at inference is unestablished. Guidance plausibly lengthens reasoning traces
The δ tuning procedurePer-benchmark thresholds are given as values with no stated selection rule. If they were chosen against deployment accuracy, the numbers are optimistic
Final bank sizes and TRS distributionsWe can infer bank size from |𝒳| under one-pass writing, but the actual distribution of v across a converged bank is never shown — which is exactly what a practitioner would want to see
Reflection failure rateHow many rollouts produced unparseable JSON, or lessons that violated the anti-leakage rules? An automated leak check is never described
Results on a non-Qwen familyAll four base models are Qwen. The scale claim spans 9B to 122B, but the family claim spans one family

None of these undermine the main result — the effect sizes on RoboSpatial and Omni3D are far too large to be noise, the ablations are directionally consistent across two benchmarks, and the transfer probes are all positive. They do mean that the narrower margins should be read as suggestive rather than settled, and that the single-family evaluation is the most obvious limit on how far to generalise.

Explore the results

All 20 evaluations, method by method

Pick a base model. Each group is one benchmark; each bar is one method, with SMA highlighted. The dashed line in each group is the no-memory baseline — bars below it are memory methods that made the model worse. Switch to the 9B block to see four of five baselines fall below the line on average.

Everything as a delta against no memory

Absolute accuracies make it hard to see who is actually helping. Subtract each block's No-memory row and the picture sharpens considerably. Negative cells are memory methods that made the frozen model worse.

ModelMethodRoboS.ERQAOmni3DSATEmbS.Avg. Δ
122B-A10BRAG−4.4+1.0+0.4−1.7−0.9−1.1
MemP+1.2+0.5−0.8−1.4+0.20.0
MemRL-R+1.8+1.5+0.4+1.6−0.8+0.9
MemRL-GT+2.8−1.00.00.0−0.7+0.3
SMA+4.3+6.0+3.2+3.3+0.3+3.5
35B-A3BRAG−2.1+1.0+5.2+6.3−2.2+1.7
MemP−1.9+2.0+4.8+4.3+1.3+2.1
MemRL-R−3.5+4.5+3.6+6.0+0.5+2.2
MemRL-GT−4.4+1.5+6.4+3.3+0.7+1.5
SMA+0.8+8.0+8.0+7.3+1.4+5.1
27BRAG+5.2+1.5+2.4+2.7+0.8+2.6
MemP+11.3−1.5+2.4+3.7+1.4+3.5
MemRL-R+8.1−1.5+3.2+1.4+1.1+2.5
MemRL-GT+13.1+2.5+2.0+4.7+1.5+4.8
SMA+14.4+5.0+6.0+4.7+2.2+6.5
9BRAG−2.6+3.0−5.6+0.4−2.3−1.4
MemP−4.4+6.5−2.8+0.7+0.1+0.1
MemRL-R−3.9−3.0−0.8−0.6−1.6−1.9
MemRL-GT−5.4+2.5−2.8+3.0−0.3−0.6
SMA+0.4+5.5+3.6+4.0+0.8+2.9

Count the negative cells. Across the four blocks and the five benchmarks, the four baselines fill 80 cells between them, and 28 of those 80 are negative — more than a third. SMA fills 20 cells and none of them is negative. Not one cell in the main table where SMA is worse than doing nothing.

The distribution of those 28 is itself informative: 8 on the 122B block, 5 on the 35B, only 2 on the 27B, and 13 on the 9B — nearly half of all the damage lands on the smallest model, which is the one least able to weigh a suspect instruction against the evidence in front of it.

That is a different and arguably better claim than any margin. "Never hurts" is a property; "wins by 2.6 on average" is a measurement. And it is the property you actually want from a memory system you are about to deploy, because a method that helps by six points on average while occasionally costing five is much harder to ship than one that helps by three and never costs anything.

Read the 35B RoboSpatial column. RAG −2.1, MemP −1.9, MemRL-R −3.5, MemRL-GT −4.4, SMA +0.8. Four methods degrade the model on this cell, one does not. Whatever is happening on 35B RoboSpatial — retrieved lessons that misfire on this particular model's failure profile — the reliability filter is the only thing that survives it. Not by winning big, but by not losing.

Cross-checking the tables against each other

A paper's tables should agree. When they do, it is weak evidence the pipeline is sound; when they do not, it is worth knowing. Four checks are available here without any extra experiments.

CheckSource ASource BAgree?
27B RoboSpatial no-memoryTable 1: 54.1Table 4 transfer, "No mem" column: 54.1Yes, three times over (rows for model transfer and both benchmark-transfer probes into RoboSpatial)
27B Omni3D no-memoryTable 1: 41.6Table 4: 41.6Yes
27B EmbSpatial no-memoryTable 1: 85.7Table 4: 85.7Yes
27B SMA macro averageTable 1 row: 69.8Similarity analysis: "raising macro accuracy from 66.8% to 69.8%"Yes — and 66.8 is MemP's Table 1 average exactly
9B SMA rowTable 1: 58.5 / 52.0 / 40.8 / 81.3 / 84.9, avg 63.5Table 3 SpatialEvo comparison: identical five numbers and averageYes
27B ablation referenceTable 2 SMA row: 68.5Table 1 27B RoboSpatial SMA: 68.5Yes
Omni3D ablation referenceTable 8 SMA row: 47.6Table 1 27B Omni3D SMA: 47.6Yes

Seven for seven. Every cross-reference resolves, including the similarity analysis, which quietly confirms that the MemP baseline used for the 0.792 → 0.698 measurement is the same MemP run reported in the main table. That kind of consistency is not proof of anything, but its absence would be a red flag and it is worth having checked.

One arithmetic check you can also do yourself. The paper claims average gains over the strongest non-SMA baseline of 2.6, 2.9, 1.7, and 2.8. Take the 27B block: the best non-SMA average is MemRL-GT at 68.1, and 69.8 − 68.1 = 1.7. Correct. And the 35B: best non-SMA is MemRL-R at 63.8, and 66.7 − 63.8 = 2.9. Correct. Note that the runner-up is a different method in three of the four blocks — MemRL-R, MemRL-R, MemRL-GT, MemP — which means no single baseline is consistently second, and SMA's margin is measured against a moving target each time.

Reading the benchmarks against each other

The per-benchmark spread says something the macro average hides.

BenchmarkNo-memory range across the 4 modelsSMA gain (best block)Why
RoboSpatial54.1 – 61.2+14.4 (27B)Three tightly-defined question families, open answers, plenty of headroom. Ideal conditions for procedural memory.
Omni3D37.2 – 41.6+6.0 (27B)Hardest benchmark; the lesson field is worth 5.2 points here, the most anywhere.
ERQA46.5 – 54.5+8.0 (35B)Multiple choice with real headroom.
SAT77.3 – 83.7+7.3 (35B)Binary choice — a 50% floor, so absolute gains compress.
EmbSpatial84.1 – 87.3+2.2 (27B)Near ceiling for every method. Six relation labels, largest pool. Little room to move.

EmbSpatial is where every method clusters within about three points, and it drags the macro average toward flatness. If you wanted to make SMA look better you would drop it; if you wanted to make it look worse you would weight it higher. Reporting it as one of five equally-weighted columns is the neutral choice.

What the appendix benchmarks add

SITE-image and ViewSpatial are relegated to an appendix, and the temptation is to skip them. They are the two most informative tables in the paper for anyone deciding whether to build this, because they are where the method is stressed.

Compute the deltas over no-memory the way we did for the main table:

ModelMethodΔ SITEΔ ViewSpatialΔ Avg.
122B-A10BRAG−2.0−1.1−1.5
MemRL-GT+0.5+14.4+7.5
SMA+1.0+11.3+6.2
27BRAG+1.0+0.9+1.0
MemRL-GT+2.7+15.4+9.1
SMA+4.5+14.3+9.4
35B-A3BRAG+1.2−0.2+0.4
MemRL-GT+1.9+8.0+4.9
SMA+3.4+11.3+7.3
9BRAG+0.1−3.7−1.8
MemRL-GT+5.7+2.7+4.2
SMA+6.3+4.2+5.3

Look at the ViewSpatial column. Every memory method except RAG produces a huge gain — MemRL-GT reaches +15.4 on the 27B, SMA +14.3. No-memory sits in the high 40s on a benchmark where memory methods reach the low 60s. This is the benchmark where having procedural memory at all matters most, and where the difference between memory methods matters least.

That reframes SMA's two losses here. It is not that TRS fails on multi-perspective reasoning; it is that on a benchmark with 15 points of headroom for any reflected procedure, the marginal value of reliability filtering is small, and a one-point difference between two strong methods is inside the noise of a single split.

Meanwhile on SITE-image, SMA takes the column on all four models — 71.4, 74.0, 69.5, 63.9. Four for four, including beating MemRL-GT everywhere. So across the two appendix benchmarks, SMA wins SITE 4/4 and loses ViewSpatial 2/4, taking the two-benchmark average on 3 of 4 models.

What the macro average hides

Every headline number in this paper is a macro average over benchmark columns. That choice deserves scrutiny because it drives the four-for-four claim.

It equalises benchmarks of wildly different size. RoboSpatial contributes 175 deployment items and EmbSpatial contributes 1,820, weighted identically. A question-weighted average would be dominated by EmbSpatial, where every method scores between 81.8 and 87.9 and the whole spread is six points. Under question weighting, SMA's margins would shrink dramatically — not because the method got worse, but because the benchmark with the least headroom would carry most of the weight.

It equalises benchmarks of wildly different difficulty. Omni3D's ceiling in this table is 47.6; EmbSpatial's floor is 81.8. Averaging a 47 and an 88 produces a number that describes neither. The delta table earlier in this chapter is a more honest summary for that reason: it is scale-free per column.

But it is the right choice given the goal. The paper's claim is about spatial reasoning across settings, and each benchmark is one setting. Weighting by question count would say that whichever benchmark happened to release the most items is the most important kind of spatial reasoning, which is clearly wrong. Macro-averaging is standard, defensible, and stated plainly — and the per-column numbers are all published, so a reader can reweight however they like.

The reweighting that matters most. Drop EmbSpatial — the near-ceiling benchmark — and recompute the 27B block over four columns. No memory: (54.1+53.0+41.6+82.3)/4 = 57.75. SMA: (68.5+58.0+47.6+87.0)/4 = 65.28. A gap of 7.5 points rather than the 6.5 the five-column average reports. Excluding the saturated benchmark makes SMA look better, not worse — which is the direction that tells you the reported number is conservative rather than cherry-picked.
On the Qwen3.5-9B block, RAG (59.2), MemRL-R (58.7), and MemRL-GT (60.0) all score at or below the no-memory average of 60.6, while SMA reaches 63.5. Which conclusion is best supported?

Chapter 9: What the Ablations Prove

Main tables tell you a system works. Ablations tell you why, and they are where a paper is most likely to overclaim. This chapter goes through every one, states what it measures, and states what it does and does not license.

Component ablations, on two benchmarks

Both on Qwen3.6-27B. Remove or add one component at a time.

SettingRoboSpatialΔOmni3DΔ
SMA (full)68.547.6
− summary65.3−3.246.0−1.6
− transferable lesson65.0−3.542.4−5.2
− semantic filter62.7−5.840.4−7.2
+ model output64.1−4.445.6−2.0
Reward-only reflection63.0−5.544.8−2.8

Four things fall out of reading both columns together rather than either alone.

The semantic filter is the most valuable component on both benchmarks. −5.8 and −7.2, larger than any other single change. This is the strongest quantitative argument in the paper for the two-stage design: without a relevance gate, TRS becomes a global popularity score and injects well-performing but topically wrong lessons everywhere.

The lesson field matters more on the harder benchmark; the summary matters less. On RoboSpatial the two are near-equal (−3.5, −3.2). On Omni3D they diverge sharply (−5.2, −1.6). Omni3D is open-answer 3D reasoning — metric estimates, occlusion, containment, counterfactual placement — where an explicit procedure is doing real work, and abstract framing is nearly redundant with the system prompt.

Adding the raw model output hurts on both, and hurts more where answers are constrained. −4.4 on RoboSpatial versus −2.0 on Omni3D. That direction is consistent with the copying story: RoboSpatial's answer space is Yes/No and coordinate lists, which are short, concrete, and eminently copyable. Omni3D's open answers are more varied and copy less cleanly.

Reflection signal quality is worth more on RoboSpatial than on Omni3D. −5.5 versus −2.8. Where the answer is Yes/No, the reward alone tells you almost nothing about the failure mode — you know you said the wrong one of two things. Where the answer is a number or a phrase, even a scalar reward is somewhat more diagnostic.

What no ablation here shows. None of these removes TRS itself. The closest proxy is the comparison against MemP, which is procedural memory with similarity-only retrieval — on the 27B block, MemP 66.8 versus SMA 69.8, a 3.0-point macro gap. Read that as the approximate value of reliability-aware ranking, with the caveat that MemP is a re-implementation of someone else's method, not a strict SMA-minus-TRS build.

The hyperparameter sweeps

Swept on RoboSpatial with Qwen3.6-27B: the reliability weight η and the retrieval depth k. The paper reports the sweep "peaks at η = 0.5 and k = 3", which are the values used throughout.

η = 0.5 sitting at the peak is the whole thesis restated as a hyperparameter. η = 0 is MemP — similarity only. η = 1 is TRS only, ranking a filtered candidate set purely by global track record with no regard for which candidate best matches this question. That the optimum is exactly in the middle says the two signals are close to equally informative and largely complementary.

k = 3 is a budget the paper does not dramatise but is worth noting: three cards is roughly three sentences of summary plus three of lesson. A tiny prompt addition. The gains in Chapter 8 are bought with a handful of sentences.

Reading the two ablation columns as a single experiment

The paper runs the same six-row ablation on two benchmarks. Most readers will look at one column. Putting them side by side is where the information is, because the ordering changes and the ordering is diagnostic.

Rank by damageRoboSpatialOmni3D
1 (worst to remove)semantic filter (−5.8)semantic filter (−7.2)
2reward-only reflection (−5.5)transferable lesson (−5.2)
3+ model output (−4.4)reward-only reflection (−2.8)
4transferable lesson (−3.5)+ model output (−2.0)
5summary (−3.2)summary (−1.6)

Only the first and last positions agree. Everything in between reorders, and the reordering tracks the answer space.

RoboSpatial's answers are Yes/No and coordinates. Short, enumerable, copyable. So the two ablations that touch what the model is tempted to copy or guess — adding the prior output, and degrading the reflection signal so lessons become vaguer — do the most damage after the filter. The lesson field matters less because RoboSpatial's system prompt already carries a detailed family taxonomy and cross-cutting checks; the card is adding to an already-strong scaffold.

Omni3D's answers are open. A number, a Yes/No, or a short phrase, about metric extent, occlusion, containment, or counterfactual placement. There is much less to copy, so the prior-output ablation costs only 2.0. But there is far more procedure required, and no strong per-family scaffold in the prompt to lean on — so removing the lesson field costs 5.2, more than anything except the filter.

The generalisable reading. The value of a procedural memory system rises with (a) how much procedure the task requires and (b) how little of that procedure is already in your system prompt. It falls with (c) how copyable the answers are, because copyability is the mechanism by which memory backfires. Any task you are considering this for can be scored on those three axes before you build anything.

One more thing the paired columns establish: the filter is first in both, by a clear margin, on benchmarks that otherwise disagree about everything. That is the most robust single finding in the ablation set, and it is an argument about retrieval design rather than about spatial reasoning — relevance gating before value ranking is not a spatial insight, it is a retrieval one.

Does TRS actually predict anything?

This is the load-bearing question — TRS is only worth computing if it correlates with downstream success. The paper measures it three ways.

1. Binned by mean retrieved TRS. Bin deployment questions by the mean TRS of their retrieved memories, then measure accuracy per bin. Accuracy rises from 19.3% in the [0.2, 0.3) bin to 97.3% in the [0.9, 1.0] bin.

That is a very large spread, and the paper immediately hedges it: the trend "may also reflect differences in benchmark difficulty and question composition". Take the hedge seriously, because it is the right one. TRS is built from rewards. Easy questions produce high rewards, so cards retrieved for easy questions accumulate high TRS. Then at deployment, high-TRS cards are retrieved for — easy questions. Part of that 19.3-to-97.3 sweep is a difficulty gradient dressed as a reliability gradient. It is a pooled correlation, not a controlled comparison.

2. By source-question outcome. Stratify Qwen3.6-27B memories by whether the environment rollout that wrote them was correct.

Source rolloutMean TRSDownstream deployment accuracy
Success0.52285.7%
Failure0.45261.4%

A 24.3-point accuracy gap. This is a genuinely interesting result to sit with, because it complicates Chapter 5. TRS was deliberately initialised uniformly so that source correctness would not bias the score — and then visit evidence discovered, on its own, that success-sourced memories are in fact better. The mechanism was not told; it found out.

Note the TRS gap is small (0.522 vs 0.452, both close to v₀ = 0.5) while the accuracy gap is large. So source outcome is a real signal that TRS partially recovers, but TRS is not a clean sorter of it. There is genuine headroom here for something better — which is more or less what the credit-assignment limitation says.

3. By retrieval composition. Group deployment questions by the source outcomes of all three retrieved memories.

Composition of the 3 retrieved cardsNDeployment accuracyMean TRS
All from successful source questions13,22693.0%0.909
Mixed10,26465.1%0.653
All from failed source questions60339.0%0.480

Monotone in both accuracy and TRS. And look at the counts: 603 all-failure retrievals out of 24,093 total — 2.5%. The ranking has already pushed failure-sourced cards down; they rarely fill all three slots. The mechanism is doing quiet triage before this table is even computed.

The same difficulty confound applies to this table as to the bins. It is consistent evidence, not clean evidence, and the paper's own framing — "confirming that memories from successful questions transfer more effectively" — is about as strong as the data supports.

Does the bank transfer off its home turf?

The strongest generalisation result in the paper, and the one with the clearest practical consequence. Two probes: write a bank with one model and read it with another; or write on one benchmark and read on a different one.

SettingNo memoryWith transferred bankΔ
Model transfer — bank written by Qwen3.5-122B-A10B, read by Qwen3.6-27B
RoboSpatial54.163.5+9.4
ERQA53.056.5+3.5
Omni3D41.644.8+3.2
SAT82.388.0+5.7
EmbSpatial85.787.3+1.6
Benchmark transfer — Qwen3.6-27B throughout, source benchmark changed
ERQA → RoboSpatial54.161.7+7.6
EmbSpatial → RoboSpatial54.161.4+7.3
EmbSpatial → Omni3D41.644.4+2.8
Omni3D → EmbSpatial85.787.2+1.5

Every probe is positive. Two things follow.

Model transfer is what makes this deployable. Look at RoboSpatial: a bank written by the 122B model gives the 27B model +9.4 points. That is 65% of the +14.4 the 27B gets from its own bank. So a memory bank is an asset that outlives the model that wrote it — the thing that is emphatically not true of a fine-tuned checkpoint. Upgrade the base model and your lessons come with you. It also opens an obvious recipe the paper does not pursue: write the bank with the strongest model you can afford, once, then deploy it on a cheap one.

Benchmark transfer proves the lessons are procedures. EmbSpatial → RoboSpatial gives +7.3. EmbSpatial is closed-set relation labels; RoboSpatial is open-answer pointing and compatibility on different images with a different answer format. Nothing scene-specific or format-specific could survive that crossing. What transfers has to be procedural — bind both referents before judging a relation, read the relation verb literally, check the image-plane convention. Exactly the content the reflection grammar was built to produce.

The paper's hedge: "the magnitude still depends on source–target similarity". True and visible in the table — the gains into EmbSpatial and Omni3D are much smaller than the gains into RoboSpatial. But RoboSpatial also has the most headroom, so target difficulty and source–target distance are entangled here.

Atomic spatial abilities

The finest-grained analysis. Ten capability labels, applied post-hoc to benchmark sub-categories as diagnostic annotations rather than runtime inputs. Each question can carry several labels, since the labels are multi-label and non-disjoint. Gains are averaged across four base models over the common RoboSpatial / ERQA / SAT / EmbSpatial scope. Omni3D is excluded because its released annotations expose answer_type (float, int, str) rather than a spatial taxonomy.

AbilityDefinition (paper's wording, condensed)SMA gain
CorrespondenceMatch a referred entity, region, marker, state, or answer option to the correct visual evidence+11.2 pp
AttributeRecognise or compare shape, size, colour, material, state, orientation+8.0 pp
Object motionReason about displacement, rotation, or spatial-state change after an action+7.6 pp
LocalizationIdentify where an object, region, point, or free space is locatedpositive
Relationleft/right, front/behind, above/below, support, containment, contact, adjacencypositive
Mental simulationPredict a spatial outcome under an imagined action, transformation, or viewpoint changepositive
TrackingFollow an object, agent, camera, or state across an ordered sequencepositive (MemP: −3.0)
Camera reasoningInterpret relations under camera, ego, person, or viewpoint-centred framespositive
Distance/depthEstimate or compare distance, depth, scale, metric extent, clearance, capacity+2.6 pp
AffordanceJudge whether a configuration supports an action, placement, navigation, or manipulation+2.9 pp (MemP: −1.9)

SMA improves all ten on average. The pattern in the extremes is coherent with everything else in the paper.

Correspondence tops the list at +11.2, and correspondence is the most procedural of the ten — "bind the named entity to the right pixels before answering" is a checkable habit, exactly what the lesson grammar produces. Distance/depth is near the bottom at +2.6, and that is the ability least amenable to advice: no sentence tells you how many centimetres of clearance are in the image. You either read metric extent from pixels or you do not. The gap between +11.2 and +2.6 is the boundary between "procedure helps" and "perception is the bottleneck".

And the MemP numbers are the sharpest single data point in the chapter. MemP is negative on Tracking (−3.0) and Affordance (−1.9) — the paper's reading is that "unfiltered procedural memory can hurt when retrieved experience does not transfer". Same reflection machinery, same lesson grammar, no reliability filter, and two abilities get worse. The filter and the ranking are what turn a mechanism that sometimes hurts into one that helps everywhere.

Putting the two TRS tables together

Tables 5 and 6 look like the same measurement twice. They are not, and the difference is worth extracting.

Table 5 groups memories by their own source outcome and reports the mean TRS each group reached. The gap is small: 0.522 versus 0.452, both hugging the prior. Table 6 groups evaluation questions by the composition of their three retrieved cards and reports mean TRS. That gap is enormous: 0.909 versus 0.480.

Why the difference? Because the second table is conditioned on having been selected, and selection is a strong filter. A question whose three retrieved cards are all success-sourced did not get those cards by accident — they won a combined ranking in which TRS carries half the weight. So "all success" and "high TRS" are two names for largely the same event, and Table 6's monotone TRS column is partly the ranking rule described back to itself.

Table 5 is the cleaner measurement of the two, because it conditions only on how a card was written, not on whether it was chosen. And it says the effect is real but modest — a 0.07 TRS separation. Read together, the honest summary is: source outcome predicts transfer; TRS recovers part of that signal from visit evidence alone, without ever being told.

The counts tell a fourth story. 13,226 all-success retrievals, 10,264 mixed, 603 all-failure. That is 24,093 evaluation questions total across five benchmarks — consistent with the deployment split sizes (175 + 200 + 250 + 300 + 1,820 = 2,745 per pass, times the multi-pass evaluation). And all-failure retrievals are 2.5% of the total. Given that failure-sourced cards are roughly half the bank by construction, an all-failure triple would occur about 12.5% of the time under random selection. Observing 2.5% means the ranking is suppressing them by a factor of five before the analysis begins.

What a controlled version of the TRS analysis would look like

Since the paper names its own confound, it is worth being concrete about what would remove it — both because it sharpens what the current evidence means, and because it is the obvious follow-up.

ConfoundWhy it inflates the TRS–accuracy correlationControl
Question difficultyEasy questions yield high rewards → cards retrieved for them gain TRS → those cards are retrieved for easy questions againBin by TRS within a fixed difficulty stratum — e.g. within questions the no-memory baseline gets right at a fixed rate
Benchmark compositionEmbSpatial is near-ceiling and huge; pooling it with Omni3D mixes two very different base ratesReport the bin curve per benchmark, not pooled
SelectionHigh-TRS cards are preferentially retrieved, so the high bins are not a random sample of cardsRandomise k−1 of the retrieved cards and vary only one slot
Co-retrievalA card's reward reflects its two partners as much as itselfLocal rerollout: answer with and without the card, difference the rewards

None of this means the TRS result is wrong. It means the reported 19.3 → 97.3 sweep is an upper bound on the effect size, and the true causal contribution of TRS is somewhere below it. The ablation evidence — η sweeping to a peak at 0.5, MemP trailing SMA by 3.0 macro points, the similarity-down-accuracy-up pairing — is the causally cleaner support, and it points the same way.

The atomic abilities, read as a boundary

Ten abilities, all improved on average, with a spread from +11.2 to +2.6. That spread is more informative than the fact that all ten are positive, because it marks where the method stops working.

Sort the named numbers by what kind of cognitive work each ability requires.

AbilityGainIs it a checkable procedure, or an estimate from pixels?
Correspondence+11.2Pure procedure. "Bind the referred entity to the visual evidence before answering" is a step you either take or skip — and taking it requires no new perceptual precision
Attribute+8.0Mostly procedure. "Compare shape/size/orientation explicitly" directs attention; the underlying recognition was already available
Object motion+7.6Mostly procedure. "Reason about the post-action state" is a step that is often simply omitted
Affordance+2.9Mixed. The check is nameable ("estimate clearance") but executing it needs a metric judgement
Distance/depth+2.6Pure estimate. No sentence tells you how many centimetres of clearance are in the image. Either you can read metric extent from pixels or you cannot

The gradient is monotone in "how much of this is a step you can be reminded to take". That is the clearest empirical statement in the paper of what procedural memory is for, and it is also the ceiling: memory converts available perception into correct answers more reliably. It does not create perception.

The paper's failure cases say the same thing from the other side. Three cases where "both the baseline and SMA fail despite high-quality, semantically relevant retrieved memories (TRS ≥ 0.6)", with responses that "attempt to apply the retrieved procedure, but still misread critical visual evidence such as movement direction, object count, or spatial connectivity." The procedure was retrieved. The procedure was applied. The pixels were read wrong. Nothing in the mechanism can help.

The prediction this makes. If you improved only the base model's visual grounding and left everything else alone, SMA's relative gain on Distance/depth should rise, because more questions would move from "perception failed" into "perception fine, procedure skipped" — the band memory operates in. That is a testable claim the paper does not test, and it is the sharpest way to check whether the procedure/perception split proposed here is real.

MemP going negative is the most important baseline number

Buried in the atomic-ability discussion is a result that deserves top billing: MemP has negative gains on Tracking (−3.0 pp) and Affordance (−1.9 pp).

Sit with what MemP is. It reflects rollouts into summaries and transferable lessons — the same card format, produced by the same kind of reflection. It retrieves them by semantic similarity. The only thing it lacks relative to SMA is the reliability layer.

And on two of ten abilities, that identical card format, retrieved by similarity alone, makes the model worse than having no memory. The paper's reading: "unfiltered procedural memory can hurt when retrieved experience does not transfer."

So the claim SMA is actually supporting is not "procedural memory helps". Procedural memory sometimes hurts, measurably, on the same benchmarks with the same cards. The claim is narrower and more interesting: procedural memory helps once you can tell which procedures have earned their place. Every other result in the paper — the η = 0.5 peak, the similarity-down-accuracy-up pairing, the 28 negative baseline cells against SMA's zero — is a restatement of that same point from a different angle.

It also explains why the paper bothers with the No-memory baseline at every cell rather than only reporting method-vs-method comparisons. Without that column you could not see that several memory methods are net harmful, and the contribution would look like a margin rather than a qualitative difference.

The five findings, and what each one is worth

FindingEvidence behind itStrength
1. Gains extend across base-model scalesBest macro average in all 4 blocks, 9B to 122B-A10BStrong — four models, one family though
2. Reliable transfer needs structured writing and calibrated retrievalComponent ablations on two benchmarks, consistent directionsStrong — one base model, two benchmarks
3. The bank transfers across models and benchmarks9 transfer probes, all positiveStrong — and the most practically useful
4. The best memory is not the nearest memorySimilarity 0.792 → 0.698 with accuracy 66.8 → 69.8Strong — a paired, directional measurement on every benchmark
5. One-pass writing beats continualBank size, redundancy, coverage over 10 passesScoped — the authors themselves limit it to "the ten passes considered here"

What model transfer actually means operationally

Of the nine transfer probes, the one with the clearest practical consequence is the 122B → 27B row on RoboSpatial: 54.1 → 63.5, a gain of +9.4. Compare that with the 27B's gain from its own bank: 54.1 → 68.5, +14.4.

9.4 / 14.4 = 65% of the own-bank gain, from a bank the model did not write

Now count what that saves. Writing the 27B's own bank costs, from Chapter 2's accounting, roughly 1,225 calls to the 27B. Writing the 122B's bank costs 1,225 calls to a much larger model — more expensive per call, but it is a one-time cost that can then be amortised across every model you deploy on.

StrategyOffline costRoboSpatial result on the 27B
No memoryZero54.1
Write with the 27B, deploy on the 27B1,225 calls to a 27B68.5
Write with the 122B, deploy on the 27B1,225 calls to a 122B, reusable63.5
Write with the 122B, deploy on N modelsSame 1,225 calls, amortised over N63.5 on each, presumably

The fourth row is the one the paper does not run and the one an engineering team would care most about. If a single bank written once by your strongest model retains most of its value on every smaller model in your fleet, then procedural memory becomes infrastructure rather than a per-model artefact. The single 122B → 27B probe is suggestive of that, not proof of it.

Note also the direction that was tested: large to small. The reverse — a bank written by a 9B model and deployed on a 122B — is not reported. It is the more interesting question in some ways (can a cheap model generate lessons that help an expensive one?) and its absence is worth noticing.

Why benchmark transfer is the stronger evidence

Model transfer could, in principle, be explained without any procedural content: two Qwen models share a tokenizer, a pretraining lineage, and probably many failure modes, so lessons diagnosing one might transfer for uninteresting reasons.

Benchmark transfer has no such escape. Consider EmbSpatial → RoboSpatial, +7.3 on the 27B:

 EmbSpatial (source)RoboSpatial (target)
Answer spaceOne of six relation labelsYes/No, or a list of normalised points
Question form"Is the X to the left of the Y?" over a large templated poolThree families: pointing, configuration, compatibility
ImagesEmbodied-task scenesIndoor home scenes
ScoringLabel matchMatch, or hull coverage
System promptEmbSpatial'sRoboSpatial's, with its own family taxonomy

Nothing scene-specific, format-specific, or answer-specific can survive that crossing. A card that leaked an answer letter is useless. A card that fingerprinted a room is useless. A card that encoded a base rate over EmbSpatial's six labels is worse than useless. The only content that can produce +7.3 is content about how to look — bind both referents before judging a relation, read the relation verb literally, check which coordinate frame the question means.

So the transfer table doubles as a leakage audit. If the anti-leakage rules from Chapter 3 were failing at scale, cross-benchmark transfer would be near zero or negative. It is positive on every probe. That is indirect evidence, but it is the best evidence the paper offers that the cards contain procedures rather than answers.

The strongest sentence you can defend from this table. Not "memory transfers" — too vague. Not "SMA generalises" — too strong. It is: a bank of reflected procedural lessons retains a substantial fraction of its value when moved to a different base model or a different benchmark within the same broad domain, and the magnitude decays with source–target distance. Every clause there is measured.
Deployment accuracy rises from 19.3% in the lowest TRS bin to 97.3% in the highest. Why does the paper explicitly hedge this?

Chapter 10: Limits & Lineage

The paper devotes an appendix to its own weaknesses and a set of figures to its failures. Both are unusually candid and both are worth reading before you decide what to build on top of this.

Limitation 1 — credit assignment

Named in Chapter 5, stated properly here. When an answer improves or fails, the framework "cannot precisely determine whether the outcome should be attributed to memory writing, reflection, retrieval, semantic filtering, or the model's final use of the retrieved memory."

The paper notes this is especially acute for spatial reasoning, "where a successful answer may depend on several coupled operations, such as identifying the target object, estimating scale, transforming viewpoints, and applying a previously learned placement rule". A single scalar reward at the end of that chain is a very blunt instrument for deciding which of three cards deserved it.

Three lines of work are named as the fix. AttriMem (Li et al. 2026b) introduces attribution-guided process feedback to assign localised rewards to memory construction rather than relying on outcome-level signals. Memory-R2 (Yan et al. 2026) uses local rerollouts and a global objective to distinguish the effects of memory operations across sessions. MemQ (Liao et al. 2026) models memory dependencies with provenance DAGs and propagates value through memory-generation chains, so credit can reach earlier memories that indirectly supported later decisions.

The local-rerollout idea is the most directly applicable here: answer the same problem with and without a given card and difference the rewards. Expensive — k times as many model calls — but it would turn the TRS update from "was present when the answer was right" into "changed the answer for the better", which is the quantity you actually wanted all along.

Limitation 2 — long-term memory maintenance

SMA writes, retrieves, and reliability-weights. It does not curate. The paper: "As the memory bank grows, old lessons may become redundant, partially conflicting, overly specific to early environment examples, or stale with respect to later deployment distributions… SMA does not explicitly decide when to delete, merge, compress, expire, or rewrite memories under a storage or latency budget."

TRS can downweight an unreliable card, and the filter can exclude an irrelevant one, but neither ever removes anything. A bad card sits in the bank forever, costing an embedding comparison on every query. And two cards giving contradictory advice can both be retrieved for the same question, with nothing to detect the conflict.

Named prior work again: MemRefine (Kim et al. 2026) studies storage-budgeted long-term memory with LLM-guided decisions to delete, merge, or preserve. TRUSTMEM (Yang et al. 2026) focuses on trustworthy consolidation, with the sharp observation that write, revise, and delete operations "can themselves introduce omission, corruption, or hallucinated persistent state". memorywire (Munirathinam 2026) standardises remember / recall / forget / merge / expire as an interface-level concern.

The TRUSTMEM point deserves a beat: a memory system that edits itself can corrupt itself. SMA's write-once design is unsophisticated, and that is also the reason it cannot degrade — the bank after pass 9 contains exactly the sentences written on pass 0. Whatever else is true, nothing rotted.

The failure cases, split into two kinds

The qualitative appendix separates failures deliberately, and the separation is the useful part.

Benchmark-side ambiguity (five cases). Questions that are "underspecified, depend on unavailable metric or depth information, contain only partial visual evidence, or rely on hidden simulator geometry". These are cases where the observable RGB evidence does not determine a single answer — no memory system can fix them, because there is nothing to reason from.

Base-model visual grounding limits (three cases). Both baseline and SMA fail despite relevant retrieved memories with TRS ≥ 0.6. "The responses attempt to apply the retrieved procedure, but still misread critical visual evidence such as movement direction, object count, or spatial connectivity."

That second category is the boundary of the whole method, stated by the authors in one line: "memory can guide the reasoning process but cannot replace accurate visual grounding."

The honest ceiling. A transferable lesson is a procedure over observations. If the observations are wrong, a better procedure applied to wrong observations still gives a wrong answer. SMA raises the fraction of questions where correct perception is converted into a correct answer. It does not improve perception. That is exactly why the atomic-ability gains are largest on Correspondence (+11.2, a procedural check) and smallest on Distance/depth (+2.6, a perceptual estimate).

Should you build this? A decision table

The most useful thing to take from a systems paper is a rule for when it applies. Score your task on these six rows.

QuestionBuild it if…Do not bother if…
Can you grade an answer programmatically?Yes — exact match, a test suite, a simulator check, a coverage scoreNo. Without a verifier there is no reward, no TRS, and no mechanism at all
Are your failures procedural or perceptual?Procedural — skipped checks, wrong order of operations, missing validation. Correspondence-style gains: +11.2Perceptual — the model genuinely cannot read the input. Distance/depth-style gains: +2.6, and the paper's own failure cases confirm memory cannot fix grounding
Does your task have recognisable question shapes?Yes — a handful of families you could name. The "when <shape>" slot needs something to point atEvery problem is sui generis. Retrieval will never find a relevant card
Is there headroom?Baseline accuracy in the 40–70% band. RoboSpatial at 54.1 gained 14.4You are at 87%, like EmbSpatial, which gained 2.2 for the same machinery
Do you already have a strong system prompt?Yes — memory adds specifics on top of good general scaffoldingNo — write the system prompt first. It is free and it is what the No-memory baseline already includes
Are your answers short and copyable?Somewhat — then follow the anti-leakage discipline carefullyExtremely, and you cannot enforce the rules — a leaked answer key is worse than no memory

Roughly: verifiable, procedural, shaped, with headroom. Four conditions. Spatial reasoning happens to satisfy all four, which is why the paper's gains are as large as they are, and it is worth being suspicious of anyone who reports similar gains on a task that satisfies two.

The lineage, in one table

Where this sits. Every row is cited by the paper.

YearSystemContributionWhat SMA takes from it
2020RAGRetrieve documents, condition generation on themThe retrieval frame — used here as the weakest baseline
2023ReflexionVerbal reinforcement: an agent critiques its own failure in text and reuses the critiqueThe reflection step. SMA adds the verified target and a rigid output grammar
2023Generative AgentsA memory stream with retrieval by recency, importance, relevanceThe idea that memory ranking is more than similarity — SMA replaces heuristic importance with measured reliability
2023VoyagerA growing skill library for an embodied agentProcedural, reusable memory as the unit
2024MemGPTContext as a paged memory hierarchyThe systems framing of memory as managed state
2025Mem0Production-grade scalable long-term memoryThat this is an infrastructure problem, not only a research one
2026MemPAgent procedural memory: reflect into summaries and lessons, retrieve by similarityThe card format. SMA is MemP plus reliability calibration — and beats it by 3.0 macro points
2026MemRLRuntime memory-value updatesThe idea that memories carry a value. SMA changes what the value is estimated from
2026SMAVisit-evidence-calibrated transfer reliability, and reliability-weighted retrieval, for spatial reasoning

Read down the "contribution" column and the trajectory is clear: from retrieve documents, to write your own documents, to write procedures instead of episodes, to measure which procedures work. Each step narrows what a memory is and adds a way to judge it. The obvious next step, which the limitations section names, is measure which procedure in a retrieved set deserved the credit.

Six things that would be worth trying next

IdeaGrounded in
Write the bank once with the largest model, deploy on the cheapestModel transfer gives the 27B +9.4 on RoboSpatial from a 122B-written bank — 65% of its own-bank gain, at a fraction of the writing cost
Local-rerollout credit assignment for TRSLimitation D.1 and the Memory-R2 direction: difference the reward with and without each card instead of crediting all k
Redundancy-aware top-k (MMR or clustering)Chapter 6's structural gap — the top-k has no within-set diversity term, and one-pass writing is currently the only defence
Multimodal retrieval keysψ embeds only the task string. Scene-conditioned keys would let "similar geometry, different wording" retrieve — currently impossible
Difficulty-stratified TRS validationThe paper's own hedge on the TRS bins. Recompute the bin curve within a fixed difficulty stratum and the confound disappears
Lifecycle policies: merge, expire, compressLimitation D.2 and MemRefine / memorywire — with TRUSTMEM's warning that self-editing memory can corrupt itself

The five sentences worth remembering a year from now

Papers decay into one or two ideas. Here are the ones from this paper that will still be useful when the benchmark numbers are stale.

#The ideaWhy it survives
1Source correctness is not transfer reliability. Whether an episode went well says little about whether the lesson distilled from it generalisesIt is a statement about the relationship between episodes and abstractions, not about spatial reasoning or VLMs. It applies to any system that distils reusable knowledge from experience
2The best memory is not the nearest memory. Retrieved similarity can fall while accuracy risesA directly testable diagnostic for any retrieval system with a quality signal, and a cheap one — you can compute it without measuring accuracy at all
3Under a fixed retrieval budget, bank size and per-card evidence trade one-for-one. Writing more memories does not add information unless you can also evaluate themPure arithmetic. It holds for any memory system with a top-k retrieval step, regardless of domain
4More context can be worse context. Adding the raw prior output cost 4.4 points because a concrete answer is an attractorThe general form — that in-context information competes with reasoning rather than supplementing it — keeps showing up and keeps surprising people
5Memory guides reasoning; it cannot replace grounding. +11.2 on correspondence, +2.6 on distance/depthIt is the boundary condition. Any claim that a memory system fixed a perception problem should be met with this number

Notice that none of the five is about spatial reasoning specifically, and none depends on the accuracy table being reproduced. They are claims about the structure of experience-grounded memory, demonstrated in a spatial setting because that setting happens to satisfy the four conditions from the decision table above.

What would falsify this

A useful last question for any paper. What result would show the mechanism is not doing what it claims?

Would falsify…The experimentIs it reported?
That TRS carries causal signalReplace every TRS with a random draw from the same distribution and re-rank. If accuracy holds, the ranking was doing nothingNo — and this is the single cheapest missing control in the paper
That lessons are procedures, not answersCross-benchmark transfer with disjoint answer spacesYes — EmbSpatial → RoboSpatial, +7.3. Answer-key content could not produce that
That the gains need calibration, not just reflectionCompare against reflected procedural memory retrieved by similarity aloneYes — MemP, 3.0 macro points lower on the 27B, and negative on two atomic abilities
That the verified target matters at write timeWithhold it and use reward onlyYes — −5.5 and −2.8
That the effect is not confined to one model familyRun one non-Qwen base modelNo — all four base models are Qwen
That the differences exceed split noiseMultiple seeds, or confidence intervalsNo — single seed-42 split, no variance reported anywhere

Three of six are answered, and answered well. The three that are not — the shuffled-TRS control, a non-Qwen model, and any measure of variance — are the three things a reviewer should ask for, and the first one is nearly free to run.

Glossary — every term this lesson bolded

TermOne lineFirst appeared
VerifierA function from (prediction, target) to a scalar reward in [0, 1]. In practice, a graderCh 0
Verifiable spatial environmentA pile of spatial problems you happen to have answers for, used as a rehearsal space rather than a test setCh 0
Memory bank ℋA list of text cards. Not weights, not activations — JSON you could open in an editorCh 1
Transferable lessonOne sentence: "When <shape>, apply <habit>, avoid <trap>, validate by <check>"Ch 1
Procedural memoryMemory of how, as opposed to episodic (what happened) or semantic (facts)Ch 1
Environment split 𝒳Where memories are written. Never evaluated onCh 2
Deployment split 𝒟Where every reported number comes from. Never written toCh 2
Verifier-guided reflectionDistilling a rollout into a card with the verified target in hand, under anti-leakage rulesCh 3
Anti-leakage rulesA–D: no answer, no quoted answer line, no scene-unique detail; generic checks allowedCh 3
One-Pass Memory WritingWrite cards only on pass 0; later passes only calibrateCh 4
Transfer Reliability Score (TRS)v ∈ [0, 1] — a shrunk estimate of how often this card helps when retrievedCh 5
Shrinkage estimatorAn empirical mean pulled toward a prior by a factor that decays as evidence accumulatesCh 5
Confidence termn/(λ+n) — the weight on the empirical rate. 0.5 at n = 2, 0.9 at n = 18Ch 5
Order invarianceThe score depends only on (n, c), so reordering the same rewards changes nothingCh 5
Semantic filterHard cut at cosine ≥ δ. The most valuable single component in the ablationsCh 6
Combined rankingS = (1−η)z(rel) + ηz(v) — z-scored within the candidate setCh 6
Read-only deploymentWeights, bank contents, and (n, c, v) all frozen. No targets neededCh 7
Atomic spatial abilitiesTen post-hoc diagnostic labels — correspondence, attribute, object motion, and seven moreCh 9

The cheat sheet — every equation, every symbol

SymbolMeaningValue / shape in SMA
ξi = (𝒱i, ti, yi)A spatial problemImage(s), question string, verified target
𝒳 / 𝒟Environment and deployment splitsDisjoint. RoboSpatial: 175 / 175
FThe frozen VLM — solver and reflectorQwen3.5-9B / 122B-A10B / Qwen3.6-35B-A3B / 27B, via vLLM
RφThe reflection modelThe same frozen F, under the reflection prompt
mi = (t, s, l, n, c, v)A memory card3 text fields exposed to the prompt, 3 numeric fields never exposed
ψThe task embeddertext-embedding-3-large, precomputed per task string
δSimilarity threshold (hard cut)0.488 (Omni3D) to 0.618 (RoboSpatial)
ηTRS weight in combined ranking0.5 — the sweep peak
kRetrieval depth3 — the sweep peak
v0Uniform prior TRS value0.5
λPrior strength (virtual visits)2.0 — one virtual success, one virtual failure
TPasses over 𝒳10 evaluated; per-benchmark best 2 to 10

The five equations, in order.

(1)  oi = F(𝒱i, ti, 𝒜i) ,  ŷi = Parse(oi) ,  ri = Eval(ŷi, yi)
solve with guidance, parse the answer tag, grade it
(2)  (si, li) = Rφ(oi, ti, yi, ri)
reflection sees the target; the output must not contain it
(3)  relij = cos(ψ(ti), ψ(tj)) ,   𝒞i = { mj : relij ≥ δ }
stage one — a hard relevance cut that TRS cannot override
(4)  Sij = (1 − η)·z(relij) + η·z(vj) ,   𝒜i = TopKk(Sij)
stage two — z-scored within the candidate set so η = 0.5 really means "equal"
(5)  nj ← nj+1 ,  cj ← cj+ri ,  vj ← (λv0 + cj) / (λ + nj)
= [λ/(λ+n)]v0 + [n/(λ+n)](c/n) — a shrunk mean. Frozen during deployment

The numbers worth remembering

NumberWhat it is
0Gradient steps. The entire mechanism is text in a prompt
175RoboSpatial environment problems — the whole experience budget behind +14.4 points
54.1 → 68.5RoboSpatial, Qwen3.6-27B, no memory versus SMA
68.8 / 66.7 / 69.8 / 63.5SMA macro averages — best in all four base-model blocks
+2.6 / +2.9 / +1.7 / +2.8Margin over the strongest non-SMA baseline in each block
0.792 → 0.698Retrieved-memory similarity falls while accuracy rises 66.8 → 69.8
−5.8 / −7.2Cost of removing the semantic filter — the largest single ablation on both benchmarks
−5.5 / −2.8Cost of reward-only reflection — the value of the verified target at write time
−4.4 / −2.0Cost of adding the raw prior model output. More context, worse answers
19.3% → 97.3%Deployment accuracy across TRS bins — correlational, with a difficulty confound the paper names
0.522 / 0.452Mean TRS of success-sourced versus failure-sourced memories (85.7% vs 61.4% downstream)
13,226 / 10,264 / 603Retrievals that were all-success, mixed, all-failure — 93.0% / 65.1% / 39.0% accuracy
+9.4RoboSpatial gain for the 27B from a bank written by the 122B — memory outlives its author
+7.3EmbSpatial → RoboSpatial cross-benchmark transfer. Procedures, not scenes
+11.2 / +2.6Correspondence versus Distance/depth — the boundary between procedure and perception
−3.0 / −1.9MemP's negative gains on Tracking and Affordance — unfiltered memory can hurt
λ = 2, v0 = 0.5, η = 0.5, k = 3The four constants, unchanged across every benchmark

Where to go from here

If you want…Go to
The training-based spatial route this is measured againstSpatialEvo and SpatialVLM
The reflection ancestor — verbal feedback instead of gradientsReflexion
Long-term agent memory as a systemMemGPT, Mem0, and agent memory
The retrieval half, properlyRAG, vector embeddings, vector databases, similarity metrics
Retrieval when the query is not textMultimodal RAG
Why shrinkage toward a prior is the right estimatorBayes rule and bandits and preference learning
How agents are put together around a frozen modelAgent architectures and tool use
Evaluating any of this without fooling yourselfAgent evaluation and the agent-eval survey

Build it yourself — the weekend recipe

Every piece of SMA is implementable without a GPU-hours budget. Here is the checklist, with the decision that matters at each step.

StepWhat to doThe decision that matters
1. SplitTake any labelled task set. Split it 50/50 per category with a fixed seedDisjointness is the experiment. Without it your gains measure leakage
2. Solve promptWrite a system prompt that names the question families and the capability behind eachThe "shape" slot in a lesson is only meaningful if solver and reflector share a vocabulary
3. VerifierAny function to [0, 1]. Exact match is fine; partial credit is betterFractional rewards make TRS a shrunk mean rather than a success count — strictly more information
4. ReflectionGive it output, task, target, reward. Demand strict JSON with summary + one-sentence lessonWithholding the target costs ~5.5 points. Give it the target and forbid it in the output
5. Anti-leakageEnumerate the rules: no answer, no quoted answer line, no scene-unique detail — and one permissionRule C (no scene fingerprints) is the one people forget, and it is what makes lessons transfer
6. KeysEmbed task strings once, cache themEmbed the question, not the transcript. The key should describe the shape
7. FilterHard cut at cosine ≥ δ, tuned per task familyBiggest single win in the ablations. Lower δ for free-form tasks and let the ranker work
8. TRSv = (lam*v0 + c) / (lam + n) with lam=2.0, v0=0.5Two lines. Not an EMA — order invariance is the point
9. RankZ-score similarity and TRS within the candidate set, blend at η = 0.5, take k = 3Z-score within the candidates, not globally. The comparison should be local
10. PassesWrite only on pass 0. Run 5–10 more passes that only calibrateUnder a fixed k, bank size and per-card evidence trade one-for-one. Spend on evidence
11. DeployFreeze everything — weights, bank, and (n, c, v)If you update TRS at test time you are reading answer keys. Your number stops meaning anything
12. Sanity checkCompute total retrievals ÷ bank sizeIf it is under ~5, your TRS values are still mostly prior and you have built MemP

References

  1. Zhang, H., Ding, Y., Zhou, Y., Du, X., Zhang, S., Zhao, Z., Xi, Y., Chen, H. "Spatial Memory Agent: Experience-Grounded Procedure Memory for Spatial Intelligence," 2026 — arXiv:2608.12743. The paper this lesson is built on. Project page.
  2. Fang, R. et al. "MemP: Exploring Agent Procedural Memory," Findings of ACL 2026 — the similarity-only procedural-memory baseline. SMA minus TRS is approximately MemP.
  3. Shinn, N. et al. "Reflexion: Language Agents with Verbal Reinforcement Learning," NeurIPS 2023 — arXiv:2303.11366. The ancestor of verifier-guided reflection.
  4. Lewis, P. et al. "Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks," NeurIPS 2020 — arXiv:2005.11401. The RAG baseline.
  5. Song, C. H. et al. "RoboSpatial: Teaching Spatial Understanding to 2D and 3D Vision-Language Models for Robotics," 2026 — arXiv:2411.16537. Benchmark and post-training exemplar.
  6. Chen, B. et al. "SpatialVLM: Endowing Vision-Language Models with Spatial Reasoning Capabilities," CVPR 2024 — the instruction-data route.
  7. Ray, A. et al. "SAT: Dynamic Spatial Aptitude Training for Multimodal Language Models," 2025 — arXiv:2412.07755.
  8. Jia, M. et al. "OmniSpatial: Towards Comprehensive Spatial Reasoning Benchmark for Vision Language Models," 2026 — arXiv:2506.03135.
  9. Du, M. et al. "EmbSpatial-Bench: Benchmarking Spatial Understanding for Embodied Tasks," ACL 2024.
  10. Li, D. et al. "SpatialEvo: Self-Evolving Spatial Intelligence via Deterministic Geometric Environments," 2026 — arXiv:2604.14144. The training-based comparison in Table 3.
  11. Dai, Y. et al. "S-Agent: Spatial Tool-Use Elicits Reasoning for Spatial Intelligence," 2026 — arXiv:2606.20515; Chen, S. et al. "SpaceTools: Tool-Augmented Spatial Reasoning via Double Interactive RL," 2026 — arXiv:2512.04069. The tool-agent route.
  12. Li, Q. et al. "AttriMem: Attribution-Guided Process Feedback for Agent Memory Learning," 2026 — arXiv:2607.21106; Liao, J. et al. "MemQ: Integrating Q-Learning into Self-Evolving Memory Agents over Provenance DAGs," 2026 — arXiv:2605.08374. The credit-assignment fixes.
  13. Kim, M. et al. "MemRefine: LLM-Guided Compression for Long-Term Agent Memory," 2026 — arXiv:2606.13177; Munirathinam, T. "AMP: A Vendor-Neutral Wire Format for Agent Memory Operations," 2026 — arXiv:2606.01138. Memory lifecycle.
  14. Chhikara, P. et al. "Mem0: Building Production-Ready AI Agents with Scalable Long-Term Memory," 2025 — arXiv:2504.19413; Packer, C. et al. "MemGPT," 2024 — arXiv:2310.08560.
  15. Kwon, W. et al. "Efficient Memory Management for Large Language Model Serving with PagedAttention" (vLLM), SOSP 2023. The serving layer for all four base models.
Cross-domain bridge
TRS is a multi-armed bandit's value estimate, and retrieval is the arm-selection rule
In a bandit problem you have many arms, each with an unknown payoff, and you learn the payoffs by pulling. Every card in SMA's bank is an arm; retrieving it is a pull; the verifier reward is the payoff. And the TRS update — an empirical mean shrunk toward a prior with weight n/(λ+n) — is exactly the posterior-mean value estimate that bandit algorithms maintain, with λ playing the role of prior pseudo-counts. Where SMA departs from a textbook bandit is that the arms are context-dependent: the semantic filter is what makes this a contextual bandit, restricting the arm set to those relevant to the current query, and η is a hand-set exploitation weight rather than a learned policy. If you have implemented Thompson sampling or UCB with Beta priors, you have implemented Chapter 5 — see our bandits and preference learning and Bayes rule lessons for the same estimator with different labels.
"What I cannot create, I do not understand."
A verifier, a reflection prompt, an embedding cache, and two lines of shrinkage arithmetic. No backward pass appears anywhere. Build it on any task you can grade, and the phrase "the model learned from experience" will stop being a metaphor.
Exit gate — teach it back before you leave.

Without scrolling up: (1) name the six fields of a memory card and say which three reach the prompt; (2) write the TRS update and compute v after visits 1, 0, 1 with λ = 2, v₀ = 0.5; (3) explain why the same v results if those rewards arrive in any order, and why an EMA would not; (4) explain why removing the semantic filter costs more than removing the lesson field; (5) explain how SMA can retrieve less similar memories and score higher; (6) name the one thing memory cannot fix, and the atomic-ability number that shows it. If any of the six stalls, its chapter is one tap away.

Which single sentence best captures what SMA contributes?