v0.2.1 — bugfix release
v0.2.1 — bugfix release
Drop-in upgrade from v0.2.0. No schema changes, no breaking API changes.
Bug fixes
memory_synapse_traverse returned [] despite wikilink synapses existing.
The MCP tool wrapper for synapse traversal had a SQL parameter-binding bug: it built params as [min_weight, connection_type, id, limit] while the SQL's ? placeholders appear in order [JOIN.source_id, WHERE.weight, WHERE.connection_type, LIMIT]. With default min_weight=0, the JOIN's source_id placeholder got bound to 0 — filtering every synapse to source_id=0, which matches nothing.
This broke any client that relied on synapse traversal, including evidence-counting procedures in the reflection skill.
Fix: Extracted runSynapseTraverse helper into src/access.ts with explicit, ordered param binding (JOIN placeholders first, WHERE next, LIMIT last). Refactored memory_synapse_traverse MCP handler to delegate to the helper.
Decay's access-based exemption was dead code.
synapses.access_count was effectively never written. Only memory_get(include_synapses=true) bumped it; every other retrieval path left the counter at 0. Decay's exemption logic (>3 mid-exempt, >10 hot-exempt thresholds) was unreachable. Verified pre-fix: 0 of 378 synapses crossed the >10 threshold.
Fix: Extracted bumpMemoryAccess + bumpSynapseAccess helpers into src/access.ts. Wired into runActivate (result-set neighborhood) and memory_get (unconditional). Critical constraint preserved: synapses.updated_at is not touched on access — preserves the "slow-fading glory" semantic.
Stats
- Tests: 121 → 138 (+17)
- Files changed: 10
- Insertions: +792 / deletions: −55
🤖 Generated with Claude Code