← Journal
Tech·May 12, 2026

The links were there, nobody followed them

A cork board covered with blank white index cards hanging from taut threads, lit by a pendant lamp above it

From the start, the app wrote a link every time two recollections related to one another. But when the time came to remember, those links were never walked: they were an archive trail, not a path. On 12 May, search learned to follow a link one hop out, a subject mentioned three times became a recollection in its own right, life domains went from five to eight, and a map of intent was pinned to the top.

An address book of links nobody opened

In neural memory, a recollection never lives alone. When two things relate to one another, an edge is written between them: this one concerns that one, this one supersedes that one, these two are about the same person. Those links had been forming on their own for months, and the graph was growing honestly.

The flaw was that when it came time to find something, nothing read them.

Search worked by similarity of meaning. For every recollection you compute a numerical fingerprint of what it means, then bring neighbouring fingerprints together. That is powerful, and it misses exactly one case: two recollections explicitly linked but phrased in words that share nothing. "Renew the prescription" and "Dr Guy, Thursday 2pm" have almost no words in common. Their fingerprints push them apart. Their link pulls them together, and that link was there, written down, in a table nobody was querying.

Put plainly, the memory held the address book of its own associations and never opened it. It is a quiet kind of flaw, because nothing breaks: you get an answer, it is simply poorer than it should have been, and there is no way to notice from the outside.

It is also, in short, the opposite of what a living memory does. A partial cue there does not bring back an isolated recollection, it relights an index, and the index relights the whole episode. That is the principle that was given back to ours.

One hop, and only one

So search was given an option: after doing its usual work, it fetches the direct neighbours of what it found, merges them into the result, and removes duplicates.

One hop. Not two.

The temptation of a second hop is real, and it is a bad idea for two reasons. The first is technical: as soon as you move two steps through a graph you have to detect cycles and set a maximum depth, or the traversal goes in circles. The second is more interesting, because it is not technical at all: at two hops, in a memory of any size, you bring back roughly everything. And a memory that brings back everything remembers nothing. The point is not to display the most recollections, it is to bring back the right ones. The immediate neighbourhood is almost always relevant, the neighbourhood of the neighbourhood almost never.

One implementation detail says a lot about how things are built here. If the graph traversal fails, the error is swallowed silently and search still returns its base result. The enrichment is a bonus, never a dependency: an improvement must not be able to break what worked before it.

Three times, and it becomes a subject

The second change of the day is about what happens when the same element keeps coming back.

When you mention the same person three times, or the same theme three times, something happens that nobody explicitly asked for: that subject has become real. It was not at the first mention, it may have been at the second, it certainly is at the third.

So the background task that tidies the memory counts, on every pass, how many recollections share a theme or a person. Past three, it builds a recollection of a new kind, one that tells no story of its own but points at the others: the subject Marc, the subject cooking, the subject money. It assigns it the dominant life domain of its members along the way.

The benefit is direct. Asked "what do you know about Marc", the app no longer has to sweep the entire memory hoping similarity of meaning sorts things out: it opens the subject Marc and follows its links. A question that cost a full examination now costs a lookup.

Two safeguards frame this mechanism, and they rhyme:

Five life domains were not enough

Every recollection is filed under a life domain. There were five: family, work, personal, friends, health.

The problem is obvious the moment you try to file a real day. An invoice, a transfer, a quote: where does that go? Under "work", which turns into a catch-all the moment you are self-employed. A move, a boiler to service, a lease: under "personal", which then means nothing at all. Two whole slices of life had no drawer and were polluting other people's.

We went and looked at how the people who do this for a living carve up a life. The wheel of life used in coaching, the areas of focus of the GTD method, the PARA system: the cuts differ, but they all converge on a number, between six and ten. Below that, you pile things up. Above it, you hesitate at every filing, and hesitation costs more than the extra precision earns.

Eight, then: family, work, health, friends, money, home, learning, and self. That last one replaced "personal" in the internal naming, and the change is not cosmetic: "personal" meant everything that was not professional, which is to say nothing in particular. On screen the label stayed short, but what it files became precise.

"OK."

The best flaw of the day fits in three characters.

In production, someone says "remind me in two minutes". The app answers "OK." and does absolutely nothing. The server logs confirm it without ambiguity: the model finished normally, it produced three characters of text, and it called no tool. No error, no alert. Just a reminder that does not exist, and a user who will find out in two minutes.

What makes this flaw instructive is that nothing was missing. The model had the tool to create a reminder. It had the principles telling it how to behave. What it did not have was the table connecting an intention someone expressed to the matching action. Without that plan, it did what anyone does when asked for something they do not know where to file: it politely acknowledged.

The answer was to pin a map of the memory to the top of the instructions. It holds four axes: the types of recollection with what triggers them, the eight life domains with their scope, the tagging rules, the floors of the memory. Then a table of routes, spelled out: when someone says this, the mandatory action is that. And one rule over the top of it all, worded to leave no room: an action verb demands an action, never a mere acknowledgement.

Position in the instructions matters as much as their content. What sits at the top is read with more attention than what is buried in the middle. A correct rule, placed too low, is a rule you apply half the time.

A side effect found along the way deserves a mention, because it runs against intuition. The model was also hesitant to create simple reminders, and the cause was not in the instructions: it was in the description of the tool itself, which had grown so rich, with all its card formatting options, that the tool looked reserved for complicated cases. The description was reopened by a sentence stating who it does not address. An intimidating tool is a tool you do not call.

What the day changed

These four pieces of work look independent. They say the same thing.

A memory is not worth what it stores, it is worth what it can connect at the moment you ask it something. The links only served the archive: they now serve retrieval. Repeated mentions only piled up: they now build subjects. Life domains forced two slices of existence into drawers that were not theirs: they have their own. And an intention spoken out loud now has a marked path to the action, instead of depending on flair.

That is also why a list without a tab holds up. You can do without navigation when what should surface surfaces on its own.

Read next
XNeuronal is available on AndroidA memory that works things out is almost here