Repository navigation
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 forMOOSE_ONTOLOGY_DIR. MOOSEDEV_MODEL_DIRpoints MOOSEDev at a directory containingmodels/, 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.safetensorsis 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.dbWhat's Changed
Full Changelog: v0.11.0...v0.11.1