v0.1.26-hotfix-lookup-chain-crash
v0.1.26 — hotfix: lookup chain crash on DSH 0.1.2
Зачем выпускаем
Issue #93: на DSH 0.1.2-alpha.2 список бесед в боковой панели исчезал полностью. Причина — плагин подменял runtime.translate и звал this.lookup(ns, key) с двумя доводами, а в 0.1.2 lookup(ns, key, chain) требует третий довод (цепочку языков) и перебирает её. chain === undefined бросал chain is not iterable, что роняло timeLabel → SessionNodeItem → весь слот sidebar.workspaces. Наружу это выглядело как «интерфейс сломался» без единого упоминания русского языка.
Что добавлено/исправлено
- Wrapper теперь спрашивает арность метода (
lookup.length >= 3) и передаёт цепочку только там, где ядро её ждёт. - Цепочку берёт из
runtime.fallbackChain(active)(приватный, но доступен в собранном бандле), иначе минимальная[active]. - Старые двухдоводные ядра продолжают работать (лишний довод безвреден).
- Новый тест
test/test_lookup_chain.mjs— 4 теста на 2-arg и 3-arg lookup.
Почему
Плагин лезет во внутренности ядра — подменяет метод и зовёт приватный lookup. Это работает ровно до следующего обновления ядра, и обновление уже произошло. Правка делает вызов устойчивым к арности метода, не ломая старые ядра.
Влияние на пользователя
Список бесед снова отрисовывается на DSH 0.1.2. Русские формы числительных («1 беседа», «2 беседы», «5 бесед») работают как раньше.
Совместимость, миграции и ограничения
- Совместим с ядрами, где
lookupпринимает 2 или 3 довода. fallbackChainприватный — если ядро его переименует, откат на[active]сохраняет работоспособность.- Плагин по-прежнему подменяет внутренний метод ядра; это хрупко до следующего обновления ядра. Отдельная задача — найти объявленный способ дать языку свои формы числительных.
Связанные issues/PR
- Issue #93
- PR #94 (фикс), PR #95 (релиз)
Версия/commit
Проверки
node --check lib/client.js— OK.node --test test/*.mjs— 31/31 pass.- Test server (192.168.1.123): установлен 0.1.26 из
.tgz, плагин в boot-entries, журнал безchain is not iterable/slot entry crashed,dsh-test-plugin status→DSH_TEST_OK. После проверки плагин и артефакт удалены.
Deploy/rollback notes
- Production:
dsh plugin --profile web add @goodandready/dsh-russian-lang@0.1.26, затемsystemctl restart dsh-web. - Rollback:
dsh plugin --profile web add @goodandready/dsh-russian-lang@0.1.25.