Repository navigation
fix(router): v1.2.45 load_hook hot-reload by dep mtime + model_router mirror v6.2 [t_9d220da7] - #68
Open
maximalang wants to merge 1 commit into
Open
maximalang wants to merge 1 commit into
maximalang wants to merge 1 commit into
Conversation
… mirror v6.2 [t_9d220da7] Slice 1 - hot-reload: router_bridge.load_hook cache signature now covers sibling dep mtimes (_HOOK_DEPS=(model_router,)); on invalidation deps imported from the hook's own dir are evicted from sys.modules before re-exec, so a table-only promotion (ROUTES v6.2, t_8e388c6e) reaches long-running processes without hook edit or restart (09.10: enforce mode pinned by the stale v4 table until host restart). Foreign same-name modules untouched; missing dep degrades as before. Twin dispatch-side change: hermes-agent branch fix/router-hook-hot-reload (d56dad782a5 on overlay-backup bf5e243c0ef; patch applies to the live trunk tree). Slice 2 - mirror: scripts/model_router.py v4 -> v6.2, byte-for-byte with live profiles/company/scripts/model_router.py (sha256 LF-form 10d4d593.., CRLF worktree c8864f03..); ROUTER_LIVE_SHA updated; ROUTER_ACTIVE.json untouched (runtime reads the profile scripts dir). Tests: level 2b hot-reload cases (model_router swap between two decide() in one process changes rules_sha; cache hit on unchanged deps; foreign module survives eviction); zai-first-rail and comment-prefix assertions made table-version-agnostic. Full suite 916 passed x2 (plain + worker-env), uv lock --check / compileall / drift-check / --version green.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Что
fleet-ops t_9d220da7, два независимых среза в одном атомарном diff:
Срез 1 — hot-reload таблицы правил.
router_bridge.load_hookкэшировал exec hook'а по mtime только самого hook-файла, а таблица правил живёт в соседнемmodel_router.pyи попадает в процесс через top-levelimport model_router→sys.modules. Инцидент 09.10: промоушен ROUTES v6.2 (t_8e388c6e) при живом enforce — долгоживущие процессы продолжали пинить по v4-таблице до рестарта хоста. Теперь сигнатура кэша = mtime hook'а + mtime каждого sibling-dep (_HOOK_DEPS); при инвалидации dep-модули, импортированные ИЗ КАТАЛОГА hook'а, вытесняются изsys.modulesдо re-exec — свежий exec связывает свежие байты (контрактsys.path.insert(HERE)сохранён). Чужой одноимённый модуль не вытесняется; отсутствующий dep деградирует как раньше (best-effort, канон 7).Близнец на стороне диспатч-wiring (
hermes_cli/kanban_db_dispatch.py::_load_router_module): веткаfix/router-hook-hot-reloadв hermes-agent checkout, коммит d56dad782a5 наcompany/overlay-backup-20261009(bf5e243c0ef); патч ложится и на live-дерево (git apply --checkOK). Публикация hermes-agent — за owner/QA по конвенции оверлея.Срез 2 — зеркало.
scripts/model_router.pyv4 → v6.2, байт-в-байт с liveprofiles/company/scripts/model_router.py: worktree-файл (CRLF, autocrlf=true) sha256c8864f0380fe942d33603e2c1c4107ebbef35678bb3cde7dbf58c51d90ba9247; закоммиченный blob — LF-форма, sha256 LF10d4d59333e2cd57260601633a2ff52023fe296abe32c1835b4fafaf24b19607.ROUTER_LIVE_SHAобновлена на LF-форму (тест хэширует_norm).scripts/ROUTER_ACTIVE.jsonсознательно не тронут — runtime читает каталог scripts профиля.Тесты
tests/test_v1236_router_hook.pyуровень 2b: замена ТОЛЬКО model_router.py между двумяdecide()в одном процессе меняетrules_shaрешения; cache hit без изменений; foreign-модуль переживает eviction.zai/первой рельсой классаcode(status-file тест теперь вычисляет ожидание из таблицы), префикс enforce-комментария следуетROUTER_VERSIONдинамически.pytest tests/ -q→ 916 passed ×2 (plain +HERMES_KANBAN_TASK=t_ci_simulated);uv lock --checkOK;compileall src tests scripts integrationsOK;fleet-policy --root . drift-check→ ok:true;--version→ 1.2.45;check_version_uniqueness.py→ collision:false (1.2.43 занят файлом PR#65=1.2.44, поэтому 1.2.45).Пины
1.2.36 → 1.2.45 во всех 7 точках (pyproject, оба plugin.yaml,
__init__, uv.lock, hardening-тест, CHANGELOG).