Skip to content

v0.11.0

Choose a tag to compare

@VonderVuflya VonderVuflya released this 15 Jul 20:05

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 (was demo-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.*.bak backup is written first, and the
    resolved identity is pinned explicitly into config.json so no future
    default change can ever strand memory again
    . FTS is untouched (it indexes
    content, not identity).
  • ygg sync users: 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 hardcoded demo-user fallbacks were routed through it, so
    the default can no longer diverge across the codebase. The demo/eval gates pin
    the demo identity explicitly via ygg_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/embed that some builds and
    hosted proxies serve instead); it sent no User-Agent, so the Cloudflare proxy
    in front of *.proxy.runpod.net 403'd every request (now identifies as a
    product string, like ygg seed already 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.py now 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_TOKEN env lookup in four
    gates; drop stale "MVP" wording and engine.sengine's typos (roadmap #14/#17).