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 now determines whether nexo update writes the MCP restart‑required marker, skipping it for byte‑identical releases.
Full changelog
Summary
Before this release every nexo update that bumped version.json wrote mcp-restart-required.json and forced every connected MCP client (Claude Code, Codex, Claude Desktop) to drop its session and reconnect — even when the release was byte-identical to the running code at the Python level (cf. v7.10.1, a README-only release that still triggered a forced restart for everyone).
v7.11.0 introduces a runtime fingerprint: a sha256 digest over every .py file under src/ that the live MCP server can import (excluding scripts/, tests/, migrations/, crons/, __pycache__/, node_modules/, .git/). nexo update only writes the restart marker when that fingerprint actually changes between the pre-update and post-update trees.
- README-only / blog-only / changelog-only releases now skip the marker entirely.
nexo updatereportsMCP source unchanged (no .py byte changed) — no restart needed. - Real code changes still write the marker. Same restart UX as before.
- Conservative fallback honored (learning #186): when either fingerprint can't be computed, behave like the legacy version-string check.
- Explicit opt-in escape hatch:
"force_restart": trueinversion.jsonfor releases whose behavior change can't be detected from.pybytes (e.g. wire format of a config file read viajson.load).
The running server caches its own fingerprint at startup (prime_process_fingerprint() next to the existing prime_process_version()), so the in-process check (resolve_restart_required) is content-aware too. mcp-restart-required.json schema bumped to v2 with optional from_fingerprint / to_fingerprint; v1 reader stays backwards-compatible. nexo mcp-status --json now exposes installed_fingerprint, process_fingerprint, fingerprint_match.
Full design + behavior matrix in docs/runtime-fingerprint.md.
What changed
src/runtime_versioning.py— new helperscompute_mcp_runtime_fingerprint,installed_runtime_fingerprint,prime_process_fingerprint,installed_force_restart_flag. Module-levelPROCESS_FINGERPRINTcache. Refactoredresolve_restart_required,clear_restart_required_marker,build_mcp_status,RestartRequiredMiddleware._ack_current_client_if_restartedto prefer fingerprint and fall back to version when fingerprint is unavailable.src/server.py— callsprime_process_fingerprint()next toprime_process_version().src/plugins/update.py— both git and packaged update paths capture pre/post fingerprints and only write the restart marker whenversion_changed and (mcp_code_changed or force_restart).- Tests:
tests/test_runtime_fingerprint.py(14 tests), 4 new tests intests/test_packaged_update_runtime.py. Existing marker stubs widened to accept new kwargs. - Docs:
docs/runtime-fingerprint.md,CHANGELOG.mdv7.11.0 entry, gh-pages surfaces (README.md,llms.txt,index.html,blog/index.html+blog/nexo-7-11-0/,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→ 47 passed locally. - [x]
scripts/sync_release_artifacts.pysynced.claude-plugin/plugin.json,clawhub-skill/SKILL.md,openclaw-plugin/src/mcp-bridge.ts,openclaw-plugin/package.jsonto 7.11.0. - [x]
scripts/verify_release_readiness.py --ci— changelog OK, public surfaces OK, duplicate hygiene OK. - [ ] CI must pass on Linux runners. Two pre-existing test failures (
tests/parity/test_python_driver.py::test_parity_python[R13-pre-edit-no-guard]andtests/test_doctor.py::TestRuntimeChecks::test_launchagent_integrity_fix_normalizes_special_launchagent_env) reproduce on a cleanmaincheckout with no changes — they're local-environment TCC/permission issues, not introduced by this PR. Verified by stashing this PR's diff and running each test againstmaindirectly. - [ ] After merge: tag
v7.11.0,npm publishfromnexo-brainroot andopenclaw-plugin/, push gh-pages. - [ ] Post-publish smoke:
nexo updateon a sandbox install — expect "MCP source unchanged" line on the next doc-only release, restart required on the next code-changing release.
🤖 Generated with Claude Code
What's Changed
- Release 7.11.0: runtime fingerprint gates restart-required marker by @wazionapps in https://github.com/wazionapps/nexo/pull/307
Full Changelog: https://github.com/wazionapps/nexo/compare/v7.10.1...v7.11.0
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]