NeuralMind v4.22.0 — a feature branch’s calls stay on the branch
| Type: Minor release | Theme: the call graph each build seeds follows the checkout, so a branch’s calls no longer reach the default branch’s recall |
Every build seeds the call and import edges it finds into the synapse layer,
so recall can follow the code’s structure from the first query. Those seeds
went into the shared baseline, which every branch reads and nothing cleared.
A call you added on a feature branch was seeded there by the branch’s build,
and after you switched back to main it was still recalled, at half weight,
until it decayed on the shared 60-day half-life. The same went for a call
deleted from the code.
Associations learned from use were never affected: they go into the branch’s
own branch:<name> namespace, as they have since v0.24.0.
What changed
Call-graph seeds live in a structural namespace each build replaces
Seeds now go into a structural namespace that every build replaces with the
graph of the code checked out. After the post-checkout hook’s rebuild (or any
build) on main, a feature branch’s calls are gone from recall, and so is a
call deleted from the code.
- Recall on a clean
maindoesn’t change. The merged read takesstructuralat 0.5, the weight the seeds had inshared. In a store an earlier release seeded, the old copies insharedadd to it until they fade (below). - It doesn’t decay: the next build replaces it.
- It isn’t published.
neuralmind memory publishexportspersonalandshared, so the team bundle no longer carries call-graph seeds; each teammate’s own build writes theirs. - It’s never the active namespace.
NEURALMIND_NAMESPACEormemory_namespacenamingstructuralis ignored, since a build would wipe anything learned there. neuralmind memory inspect .lists it as its own row.
Old copies in shared
The seeds earlier releases wrote to shared are left there. Their rows look
like team memory (an edge approved with neuralmind memory review-approve or
imported from a bundle is a single-activation shared row too), so deleting
them would delete approved memory. Builds no longer refresh them, so they fade
on the 60-day shared half-life. Until then, a call still in the code is
counted in both shared and structural, and a branch-only call already in
shared is still recalled.
Still open
The SYNAPSE_MEMORY.md file written for Claude Code at session start lists
the strongest associations from every namespace, other branches’ included.
Recall doesn’t read them; the agent does see the file.
What the agent sees
| Agent | Before (to v4.21.0) | After |
|---|---|---|
| Claude Code (hooks + MCP) | Prompt-time recall on main could name a file linked only by a call that exists on a feature branch, until it decayed |
Recall follows the call graph of the code checked out |
| Cursor / Cline / generic MCP | The same, in neuralmind_query and search results |
The same fix |
| Hermes-Agent plugin | The same, in the per-turn block | The same fix |
Upgrading
pip install -U neuralmind, then build once (neuralmind build .) to fill
the structural namespace. Nothing else to change.
Tests
tests/test_synapses.py: a branch-only call is gone from the default branch’s recall, and from every namespace, after switching back (on v4.21.0 it was still recalled); a deleted call is dropped on rebuild;structuralreads at the weightsharedseeds had and doesn’t decay; an empty graph empties it; seeding never deletes asharedrow, approved edges included.tests/test_synapse_namespaces.py: astructuraloverride falls through to branch detection.tests/test_team_memory.py: a published bundle carries no call-graph seeds.