Skip to content

v0.1.26-hotfix-lookup-chain-crash

Choose a tag to compare

@GooDAnDReaDY GooDAnDReaDY released this 31 Aug 10:47
· 55 commits to main since this release

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, что роняло timeLabelSessionNodeItem → весь слот 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 statusDSH_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.