Skip to content

v0.11.1

Latest

Choose a tag to compare

@github-actions github-actions released this 02 Sep 16:36
· 1 commit to main since this release

MOOSEDev v0.11.1

v0.11.1 is a distribution fix: release archives now ship the embedding model they have always required.

The problem

Every release through v0.11.0 shipped the embedding backend compiled into the binary but not the weights. ontologies/, skills/, and templates/ were bundled; models/ was not. On a fresh install the engine therefore fell through to downloading Snowflake Arctic-Embed-S (~133 MB) from Hugging Face on the first cold start.

That failed quietly. A backbone that cannot load is non-fatal by design — the server still starts, align_concepts and suggest_mappings report unavailable per call, and get_relevant_context falls back to lexical-only seeding. The one log line naming the cause was emitted on the moose target, which the default log filter excluded. An offline, air-gapped, or proxied install got degraded retrieval and no explanation.

On macOS it was worse: even a bundled models/ directory would not have been found. std::env::current_exe() there does not resolve symlinks, and both install channels put a symlink on PATH (Homebrew's bin/ shim, the install script's ~/.local/bin link), so the engine looked for the bundle beside the link rather than the real binary.

Fixes

  • Release archives bundle the weights. models/snowflake-arctic-embed-s/ now ships beside the binary, packaged in CI from the engine's git-LFS copy. Nothing is downloaded on first run; embeddings are computed locally and MOOSEDev works fully offline. The download grows from roughly 19 MB to roughly 78 MB — a one-time cost that replaces a ~133 MB fetch from Hugging Face on first use.
  • Symlink-safe model resolution. The engine canonicalizes the executable path before looking for a bundled model, and honours a new MOOSE_MODEL_DIR. MOOSEDev resolves its own install layout and hands the directory over, the same contract already used for MOOSE_ONTOLOGY_DIR.
  • MOOSEDEV_MODEL_DIR points MOOSEDev at a directory containing models/, for source builds and custom layouts.
  • Backbone failures are visible. The default log filter is now moosedev=info,moose=warn,rmcp=warn, so a model that fails to load says so instead of degrading in silence.
  • The release workflow asserts what it packaged. Checkout fetches LFS objects, and packaging fails if model.safetensors is missing, undersized, or still a git-LFS pointer stub — the failure mode that would otherwise ship a 133-byte text file as a model.

Upgrading

No MCP tools, HTTP routes, or record semantics changed.

The bundled weights are stored at half precision, where earlier installs embedded with full-precision weights downloaded from Hugging Face. The vector-store stamp records model identity and dimension (Snowflake/snowflake-arctic-embed-s, 384), both unchanged, so existing vector stores are not invalidated and will not rebuild. An installed store therefore keeps document vectors built at full precision while new queries are embedded at half precision.

That mixture was measured rather than assumed. Building the ontology vector store both ways and pairing all 37 vectors: cosine agreement is at worst 1 - 4.6e-7, with a largest per-component difference of 1.8e-4. No vector is bit-identical, so the difference is real, but it is far below the separation between ranked neighbours — and the dense channel only seeds a bounded symbolic expansion. Ranking is unaffected in practice.

To rebuild cleanly instead, delete the derived caches and restart — they regenerate from the graph:

rm -f .moosedev/ontology-vectors.db .moosedev/instance-vectors.db

What's Changed

  • Refine Story timeline and linked-record previews by @rhinoman in #29

Full Changelog: v0.11.0...v0.11.1