Skip to content

release: SuperLocalMemory 4.2.12 — large stores answer, purges finish, the mode says where data goes - #305

Merged
varun369 merged 8 commits into
mainfrom
release/4.2.12
Oct 28, 2026
Merged

varun369 merged 8 commits into
mainfrom
release/4.2.12

Conversation

@varun369

Copy link
Copy Markdown
Member

Fixes the six reports filed after 4.2.11. No migration.

Full suite: 23,371 passed, 83 skipped; the 5 failures were two test-isolation bugs (shared /tmp LanceDB dir, unpaced spool claimer), fixed in 0b12519 and green under 6 workers.

🤖 Generated with Claude Code

varun369 and others added 8 commits October 28, 2026 10:58
…t 503 (#304)

On a 37k-fact store every explicit recall overran its run budget and was told
"busy, ask again in 2 seconds" on an idle daemon; every retry overran too.

- An overrun now serves the keyword fallback, started beside the run when only
  its floor is left, labelled degraded_lexical and unjudged. Busy stays the
  answer only when no slot was free, where asking again does help.
- The channel phase never waits past the caller's deadline (less a reserve to
  fuse, rerank and check); the 8 s guard is unchanged otherwise.
- Semantic, hopfield and spreading activation shared nothing: three identical
  vec0 scans per recall. A search for the same vector already in flight now
  answers the others (k=500: 113 ms vs three scans of 93-113 ms each).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ge finishes (#297)

Revising or deleting a folder note while its save was still `queryable`
archived or erased the save's facts; enrichment then failed three times with
"queryable fact profile mismatch or missing fact", and `sources remove --purge`
refused until every retry ran out (2 s doubling to 300 s).

When none of the save's queryable facts is live any more (archived, gone, or
being erased) the operation now settles as complete at once, with no final
facts and derivation_state {"superseded": true}, and enriches nothing back. Its
queryable ids stay on the row for the erasure scrubs. A fact still live, or in
another profile, keeps the old error: those are real faults.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… can prune old ones (#301)

After local reinstalls the GitHub sign-in page listed several identical
"default (chatgpt)" connections. Each option now shows a short connection ID
and its credential expiry, newest first. An opt-in, never prechecked checkbox
revokes the other connections with the same profile and app on this GitHub
account, through the same steps as /owner/revoke, fenced to the signed-in owner
and re-read before each revoke.

On top of the reported patch: cleanup runs only after the consent is approved
(a refused consent must not leave older connections revoked with no new one),
a cleanup failure never blocks the chosen connection, and a device the kept
connection still uses is never revoked.

Patch by @DannyGi82 in #301.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
All 110 tools now register with a plain-words title and explicit
readOnlyHint, destructiveHint, idempotentHint and openWorldHint booleans,
named through mcp/tool_hints.py. slm_cache_set no longer claims to be
read-only (it writes a cache value). A new test registers every tool and
checks titles, the four hints, and the known destructive, read-only and
open-world sets.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… chose (#302)

Modes A and B filled a blank model name and width on an openai-compatible
embedding endpoint with the local bundle's nomic id at 768, and the next save
made that durable. A provider gets its own model id or none at all, so blank
now stays blank in the config template.

The three doors that save an embedding config (POST /api/v3/mode/set,
PUT /api/v3/embedding/config, and the re-index target_config) refuse an
openai-compatible endpoint with no model name or no positive dimension, with
code embedding_endpoint_incomplete naming what to fill in. They no longer
borrow the live local model's width or id for an endpoint. A config.json that
already holds the inferred pair loads as stored and is not rewritten.

VectorStore._ensure_vec0_table now leaves the tables alone and disables the
store when the configured width is not positive, so an unknown width can never
read as "the model changed" and drop the vectors a store holds.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…oint is set (#303)

Modes A and B accept a remote embedding endpoint (and B a hosted language
model) while ModeCapabilities.data_stays_local stayed True. Following the
maintainer's decision, the configuration is accepted and the claims follow it.

core/data_locality.py holds the one classifier (loopback, *.localhost, and
numeric private-LAN hosts are local; everything else, including unresolvable
public names, is remote; no DNS lookup, reusing the reranker's host helpers)
and effective_data_locality(mode, embedding, llm). The per-mode record stays
as the default. Readers now use the effective value: the dashboard payload
(data_stays_local, data_locality_label, data_remote_parts), GET
/api/v3/embedding/config, validate_mode_config (new warning), the engine's
startup call to it, EUAIActChecker.check_compliance, and the MCP set_mode and
get_mode descriptions. Step 3 of the dashboard says a non-local endpoint sends
memory text off this computer, and the Mode A card no longer says Zero Cloud
while a remote endpoint is set.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The LanceDB fixture wrote to one fixed /tmp directory every xdist worker shared, so tables went missing or already existed. The hook-spool test claimed in a loop with no pause and starved its writers past their 1 s lock wait; it now claims at the daemon's fastest pace (50 ms).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@varun369
varun369 merged commit 19e0d82 into main Oct 28, 2026
14 of 16 checks passed
@varun369
varun369 deleted the release/4.2.12 branch October 28, 2026 06:11
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