Skip to content

release: SuperLocalMemory 4.2.13 — lighter ingestion on large stores, fresh graph scores - #307

Merged
varun369 merged 5 commits into
mainfrom
release/4.2.13
Oct 28, 2026
Merged

varun369 merged 5 commits into
mainfrom
release/4.2.13

Conversation

@varun369

Copy link
Copy Markdown
Member

Fixes from #306 and the follow-up on #304. No migration.

Verification: full suite at -n 10, 23,384 passed, 83 skipped, 1 failed (that socket test; passes alone 3/3, fixed in 1ced9f3, hook suite 362 passed at -n 10). 4.2.13 daemon on a copy of the 38k-fact store: 3 saves complete in 32 s, outbox drained, recall 1.7 s full mode, slm db regraph --check in step (472,535 = 472,535). #297 second purge after settle verified: purged, source gone, removed notes not recalled, unrelated memory kept.

🤖 Generated with Claude Code

varun369 and others added 5 commits October 28, 2026 20:13
…306)

Facts store canonical entity IDs, and the key expander looked each one up as
a name: every lookup missed, so no alias reached the keyword index. The name
query also wrapped the column in LOWER(), which idx_entities_name_lower
(canonical_name COLLATE NOCASE) cannot serve, so each lookup scanned the
profile's entities (reported ~3 s per 45 lookups on 38k entities).

The name lookup now uses COLLATE NOCASE (the same ASCII case fold) and the
index; get_entity_by_id_or_name tries the primary key first, then the name,
and the key expander uses it. The 13 other name lookups are unchanged.

Reported with measurements by @DannyGi82 in #306.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The projection drain called add_edge per incident edge, one Cozo transaction
(edge and edge_rev) each: 40 per fact on average and 203 at most on a
reporter's 45k-fact store, which kept the disk busy during ingestion.

CozoDBGraphBackend.add_edges writes them through the existing atomic
_put_edges once per fact, keeping the last weight for a repeated key as the
sequential calls did. The drain uses it when the backend has it and keeps the
one-at-a-time path otherwise. Tests pin one write for 30 edges, the copy equal
to the store, edge_rev mirroring edge, and the fallback.

Reported with measurements by @DannyGi82 in #306.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e stores get fresh metrics (#304)

On a store of 3.6 M edges the memory watchdog killed the graph-metrics helper
at 2.9 GB against the 2.5 GB every worker gets, so PageRank and the
communities that the entity and spreading-activation channels rank with were
never recomputed after an upgrade.

The helper is a spawn child whose command line matches any other worker, so
run_in_child now records a limit against the child's PID while it runs, and
the watchdog applies that limit first. The metrics pass asks for 800 MB plus
about 1.2 KB per edge of the profile's graph, never below the per-worker
default and never above the daemon's budget (40% of RAM).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Under load the daemon's close lands while the client is still sending, and macOS reports that as ENOTCONN (errno 57) rather than a reset. It is the hang-up the test asserts; any other error still fails it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@varun369
varun369 merged commit 93e5869 into main Oct 28, 2026
10 of 16 checks passed
@varun369
varun369 deleted the release/4.2.13 branch October 28, 2026 15:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant