v0.11.0
Retire the demo-heritage identity so real memory no longer lives under a
throwaway "demo" name (roadmap #16), and fix dense search against remote /
proxied Ollama endpoints.
Changed (BREAKING)
- Default identity is now
local/personal(wasdemo-user/
yggdrasil-demo). On the first engine start after upgrade, existing memory is
auto-migrated once — a version-guarded (PRAGMA user_version) SQL relabel
that only touches the exact legacy demo pair, so a custom identity is never
moved. A timestamped*.pre-identity-v1.*.bakbackup is written first, and the
resolved identity is pinned explicitly intoconfig.jsonso no future
default change can ever strand memory again. FTS is untouched (it indexes
content, not identity). - ⚠
ygg syncusers: upgrade every synced machine together. The sync key
format changes with the identity; a lagging demo-keyed peer is auto-adopted to
the default on import, but mixed versions briefly diverge.
Added
ygg migrate [--dry-run]— preview or run the identity migration manually
(backup-first), for when the daemon isn't the one you want to drive it.- Identity now resolves through a single source of truth (
ygg_config.user_id()
/namespace()); ~15 hardcodeddemo-userfallbacks were routed through it, so
the default can no longer diverge across the codebase. The demo/eval gates pin
the demo identity explicitly viaygg_config.DEMO_*constants.
Fixed
- Dense search silently degraded to lexical against remote / proxied Ollama.
Three independent causes, all fixed: the embedder only called the legacy
/api/embeddings(now falls back to the newer/api/embedthat some builds and
hosted proxies serve instead); it sent noUser-Agent, so the Cloudflare proxy
in front of*.proxy.runpod.net403'd every request (now identifies as a
product string, likeygg seedalready did); and a dropped request left a
memory permanently unembedded (now retries transient failures with backoff).
Benchmark
- Grew the retrieval eval corpus from 35 to 232 memories / 110 labelled queries
(docs/TODO #26) for statistical power — the candidate pool per query roughly
doubles and the recall CIs tighten.ygg_eval.pynow seeds+embeds the corpus
once (not 6×), shows a progress heartbeat, prints per-query-class recall, and
warns loudly if a requested embedding model produced no vectors.
Cleanup
- Dedup the copy-pasted
YGG_ENGINE_TOKEN or YGG_ENGINE_TOKENenv lookup in four
gates; drop stale "MVP" wording andengine.s→engine'stypos (roadmap #14/#17).