MNEMOS 6.1.7 is the current release of the 6.1 line. Pin :6.1 on container images to keep a fleet on identical code.
ghcr.io/ncz-os/mnemos:6.1 # amd64 + arm64
ghcr.io/ncz-os/mnemos-enterprise:6.1 # amd64, adds Oracle/Db2/MySQL drivers
Why upgrade
Nearly every fix in 6.1 belongs to one family: a guard existed, was correct, and never ran on the path that failed. Several were total outages that presented as healthy services.
Availability
- A dead rate-limit store no longer takes the API down. The
serverprofile defaults its limiter to Redis; an image without one raisedConnectionErroron every request, which slowapi routed to its rate-limit-exceeded handler, which readsexc.detail. The handler itself then raised — HTTP 500 on every route including/health, from a container that logged "Application startup complete". Now fails open at the limiter and logs loudly. Losing rate limiting degrades to unlimited, never to broken. - The published image no longer requires AVX512.
llama-cpp-pythonwas compiled-march=nativeagainst the CI runner.import llama_cppsucceeded, so containers started and reported healthy; the illegal instruction fired on the first write. The build now pins a portable AVX2 baseline; arm64 keeps NEON.
Federation
- Compatibility is decided on the major version. A 6.0 node refused a 6.1 peer outright, so every minor release broke federation until an operator set
compat_mode=permissiveon each peer. - The feed no longer silently returns nothing.
create_memorywritespermission_mode600 while the world-read gate required% 10 >= 4, so peers pulled successfully, reported{"pulled": 0}, and logged no error. - LAN peers are registrable. The SSRF guard was split rather than loosened: link-local, multicast, reserved and unspecified addresses are refused on every network regardless of configuration; RFC1918 and loopback are what the flag gates.
- Peer vectors we cannot verify are declined. Adoption requires both sides' embedding fingerprints to be known and agree; previously a node that could not resolve its own embedder accepted anything. Content still replicates; only the vector is declined and re-embedded locally.
Backends other than PostgreSQL
Each of these prevented startup or work on a supported backend:
- Oracle — deletion workers could not claim work (
ORA-02014); a migration replay made the service startable exactly once (ORA-01451). - Db2 — migration blocked by reorg-pending state (
SQL0668N), now reorganised and retried on that specific error; and the backend no longer depends onDB2_COMPATIBILITY_VECTOR=ORA(nativeFETCH FIRSTinstead of Oracle-compatibilityROWNUM). - MariaDB — two tables could not be created (foreign-key charset mismatch,
errno 150); federation peers could not be created at all (CAST(x AS JSON)is not implemented on MariaDB); federation sync raisedAttributeErrorbecause the MySQL family never defined theaudit_chainproperty the guard reads.
Security
- Startup refuses an unauthenticated bind on a reachable interface. Override with
MNEMOS_ALLOW_UNAUTHENTICATED_NETWORK_BIND=1when a trusted network really is intended. - MCP no longer serves authorization decisions from a stale principal cache after an ACL change.
- The secret-detection denylist is stored as digests, not plaintext.
- The GRAEAE consultation audit chain now verifies — writers, verifier and fetch previously disagreed about what was hashed, so every row ever written was rejected.
Performance and correctness
- Bulk create batches embeddings and commits once; webhook delivery batches inserts and publishes post-commit.
- NATS: circuit-breaker failures reset on success, concurrency leases renew while a call is in flight, visibility epoch moved to JetStream KV.
- Migrations are replayable — three statements raised "already exists" against a real database, and a failed statement aborts the surrounding transaction, silently skipping everything after it.
- Architecture is enforced: all import-linter contracts pass.
- Container images build on native runners per architecture instead of under emulation.
Operator notes
- Embeddings. A model name is not a fingerprint. Engine, quantisation and pooling all move the vector: two nodes reporting the same model at the same width measured 0.778 cosine apart because one used mean pooling on a CLS model. Changing quantisation on the same model moved vectors by 0.0064. Keep one artifact, pinned by hash, across a fleet.
- Upgrading on Oracle. Take a backup first. 6.1.0 and 6.1.1 start once and cannot restart; go straight to 6.1.7.
MNEMOS_EMBED_BACKEND=llamacppon a CPU without AVX512. Affected by the image defect above on 6.1.0–6.1.2; 6.1.3 and later are fine.
Full detail, including the defects found and how each was verified, is in CHANGELOG.md.