This release adds 2 notable features for engineering teams evaluating rollout.
✓ No known CVEs patched in this version
Topics
+14 more
Summary
AI summaryRuntime fingerprint computation is now cached, reducing cold startup cost from ~40 ms to ~3.7 ms.
Full changelog
Summary
v7.11.0 introduced the runtime fingerprint that gates mcp-restart-required.json by hashing every .py file under src/ the live MCP can import. The hash is computed twice on every tool path (server startup via prime_process_fingerprint() + every resolve_restart_required via installed_runtime_fingerprint()). On a 263-file tree that costs ~40ms cold and is paid by every MCP startup — Claude Code, Codex, headless followup-runner, deep-sleep, every cron job. Daily cumulative: 10-20s of rehashing bytes that didn't change.
v7.11.1 caches the fingerprint at ~/.nexo/runtime/operations/fingerprint-cache.json with a cheap signature key — (src_dir, file_count, size_total, max_mtime) over the same set of .py files. When the on-disk signature still matches, the cached digest is returned without re-reading any byte.
Local benchmark on the live src/: cold ~39.9ms → warm ~3.7ms (≈11× speedup).
Cache miss is always safe: corrupt JSON, signature drift, missing file → fall through to the full hash and rewrite the cache atomically. New keyword-only parameter compute_mcp_runtime_fingerprint(src_dir, *, use_cache=False) — default stays False so plugins/update.py always sees ground truth around git pull / npm update. Hot callers opt in.
Behavior of the restart gate itself is identical to v7.11.0. Doc-only releases still skip the marker; real .py changes still write it. Middleware contract, nexo mcp-status JSON shape, force_restart escape hatch, conservative fallback (#186) — all preserved.
What changed
src/runtime_versioning.py— new helpersfingerprint_cache_path(),_runtime_tree_signature(),_read_fingerprint_cache(),_write_fingerprint_cache().compute_mcp_runtime_fingerprintgains a keyword-onlyuse_cache=Falseparameter.installed_runtime_fingerprint()andprime_process_fingerprint()opt into the cache.- Tests:
tests/test_runtime_fingerprint.py— 6 new tests (cache hit skips reads, cache miss on file change, cache miss on src_dir change, corrupt cache self-repair, default off for update flow, prime warms cache). Total fingerprint tests: 20. - Docs:
CHANGELOG.mdv7.11.1 entry, gh-pages surfaces (README.md,llms.txt,index.html,blog/index.html+blog/nexo-7-11-1/,changelog/index.html,sitemap.xml), version bumps viascripts/sync_release_artifacts.py.
Test plan
- [x]
pytest tests/test_runtime_fingerprint.py tests/test_packaged_update_runtime.py tests/test_runtime_update_contract.py tests/test_continuity_runtime.py→ 53 passed locally. - [x] Local benchmark: 40ms cold → 3.7ms warm (≈11×).
- [x]
scripts/sync_release_artifacts.pysynced 7.11.1 to plugin / skill / openclaw bridge. - [x]
scripts/verify_release_readiness.py --ci— changelog, public surfaces, duplicate hygiene, sync OK. The pre-existingtest_doctor.py::test_launchagent_integrity_fix_normalizes_special_launchagent_envfailure reproduces onmainclean (TCC noise on local macOS), not introduced by this PR. - [ ] CI must pass on Linux runners.
- [ ] After merge: tag
v7.11.1,npm publishfrom root +openclaw-plugin/, push gh-pages. - [ ] Smoke:
nexo mcp-status --jsonafter restart showsfingerprint_match: trueon warm calls. Re-running compute on the same tree should be near-instant.
🤖 Generated with Claude Code
What's Changed
- Release 7.11.1: fingerprint cache by mtime/size signature by @wazionapps in https://github.com/wazionapps/nexo/pull/308
Full Changelog: https://github.com/wazionapps/nexo/compare/v7.11.0...v7.11.1
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
About wazionapps/nexo
Cognitive memory for AI agents with Atkinson-Shiffrin memory model (STM/LTM/sensory register), semantic RAG, Ebbinghaus decay, trust scoring, and 76+ MCP tools.
Related context
Beta — feedback welcome: [email protected]