NEXO 7.9.1 — first semantic-router site migration batch
Published 2026-04-23. Patch release over v7.9.0.
v7.9.0 shipped the semantic router, semantic reasoner, and CLI contract. v7.9.1 turns that foundation on for the first safe conversational group: six Brain decisions now use the router as the central semantic authority instead of calling the enforcement classifier directly.
What moved
The migrated callers are session_end_intent.py, r14_correction_learning.py, r16_declared_done.py, r17_promise_debt.py, autonomy_mandate.py, and guard_verbal_ack.py. Each caller now invokes semantic_router.route(...) with an explicit decision_kind and semantic labels:
session_end_intentuses("session_end", "continue_session").r14_correctionuses("negative_feedback", "ordinary_request").r16_declared_doneuses("declared_done", "not_done").r17_promise_debtuses("promise", "no_promise").autonomy_mandateuses("autonomy_mandate", "not_mandate").guard_verbal_ackuses("explicit_ack", "not_ack").
Why this patch matters
The first implementation attempt exposed a real failure mode: generic ("yes", "no") labels and prompt-template classification could make unrelated correction text look like a session-end request. v7.9.1 fixes that before release. Router and reasoner local paths now classify the live context first and only fall back to the static prompt when context is empty; the migrated callers use domain-specific labels so the classifier sees the decision it is actually making.
Compatibility
Existing injected-classifier seams remain intact. If a caller receives a test classifier or specialized harness classifier, it still uses that injected object exactly as before. Production paths route through semantic_router; tests and narrow harnesses do not need to boot the router unless they are explicitly testing the integration.
Verification
The targeted release suite covers the router, reasoner, migration contracts, and all six caller groups: 105 tests passing. The migration test file asserts the exact decision_kind, labels, and context sent by every migrated caller so future refactors cannot silently bypass the router or collapse back to generic labels.