IOS-051 · Задача · Переводчик · web
Ленивая загрузка словарей: без неё сотня языков положит сборку
К работе
P0 · горит
ведёт: translate
эпик: IOS-006
Суть
Условие owner-а: поддержать наши 100+ языков и НЕ уронить проект, оптимизировав загрузку такого массива. Сейчас словари подключены СТАТИЧЕСКИМИ импортами: четыре файла = 5,1 МБ. Средний словарь 325 КБ. Сто языков статикой — это около 33 МБ в бандл сервера, тысяча — под 300 МБ. У нас уже был OOM сборки от жадного импорта каталогов переводов, повторять его нельзя.
НУЖНА ЗАГРУЗКА ПО ТРЕБОВАНИЮ: словарь читается ТОЛЬКО когда пришёл документ на этом языке, и кэшируется в памяти процесса на время жизни. Ни один словарь не должен попадать в статический граф импортов.
Как воспроизвести
grep -n "import .*baseline/" src/lib/translation/contrastiveTerms.ts → четыре статических импорта.
Чем закрывается (приёмка)
1) В src/lib/translation НЕТ ни одного статического импорта baseline/<язык>.json (кроме manifest.json). 2) Сборка проходит с сотней словарей и не растёт по времени и памяти заметно относительно нынешней. 3) Первый запрос по языку читает словарь, второй берёт из кэша — доказать числами. 4) Отсутствующий словарь по-прежнему даёт честный режим «только имена», а не падение.
Связи
- заблокирован (обратная) → IOS-052 — Привести словари ко всем языкам меню (100+) по рекомендации исследования · сотню словарей нельзя подключать статикой — сперва ленивая загрузка
- связан (обратная) → IOS-050 — 12 из 16 словарей НЕ ПОДКЛЮЧЕНЫ к коду — лежат на диске мёртвым грузом · один механизм закрывает и разрыв проводки, и масштаб
Лента
2026-07-30T02:23:11.756Z · CODEX-вахтёрLIVE BLOCKER: Pi runtime is /usr/bin/node 20.19.5, so 748cc3c4 process.getBuiltinModule would make lazy baseline return missing. Separate artifact defect: absolute pnpm workspace symlinks broke trigram-utils; current release repaired release-relative, permanent packaging fix f25ad6be70 is pushed and 31/31 GREEN. Translate is implementing a server-only Node20 lazy reader. Do not release IOS-052 until new serving SHA + live available proof.
2026-07-30T02:30:44.779Z · CODEX-вахтёрFIX LANDED: ddca3f70d8 adds universal Node20 CJS mainModule.require fallback after Node22 getBuiltinModule, preserving lazy/cache for every server entrypoint without client Node imports; includes permanent worker packaging f25ad6be70. Focused loader 2/2 and artifact contract 31/31 GREEN. Full ARM64 production build/package is running; IOS-052 remains held until serving SHA + live available proof.
2026-07-30T02:47:20.409Z · CODEX-вахтёрLIVE SHA ddca3f70d8 is serving; main active and /api/health OK. Worker bundle loads, bounded exit gate PASS, timer enabled/active. Canonical deploy final gate remains RED because /api/cron/source-indexing/health returns 503 after 27 OpenAI insufficient_quota batches. IOS-052 remains held pending coordinator decision: restore quota, or explicitly accept permanent fail-closed/503 and release link 2.
2026-07-30T02:50:53.752Z · CODEX-вахтёрNEW CHAIN DEFECT FIXED: IOS-052 exact IDs were incompatible with live loader/validator (ar-eg collapsed to ar; ptbr/ptpt/zhhant/ar-eg rejected; detected pt had no staged artifact). Follow-up 36286f6ee3 preserves exact menu IDs, maps BCP-47 spellings and pt→ptbr fallback. 13/13 tests GREEN; full 81-artifact staging manifest validates and resolver proof is GREEN. Not deployed while canonical worker-health gate remains RED.
2026-07-30T03:07:30.743Z · вахтёр-кодексВПЕРВЫЕ СЛОМАЛАСЬ УПАКОВКА: production build протащил в standalone только manifest и 0/81 словарей, поэтому live дал бы backgroundStatus=missing. Исправлено fail-closed commit 1dd37dda6e в release-ветке: ARM64 artifact 81/81, 22,368,798 bytes, все SHA GREEN; из cwd standalone ru реально загрузил 10000 entries.
Воркер
ЖДЁТ ДОЛГО
translate
M4 · gpt-5.6-luna medium
движение в панели: 1 мин назад
не продвигается: 1 ч 6 мин
gpt-5.6-luna medium · ~/Projects/worktrees/translate-glossary-20260727 · Mai…
Подключиться и смотреть/перехватить руками. Колесо мыши листает; клавишами — Ctrl-b затем [, выход из прокрутки q. Отсоединиться — Ctrl-b затем d:
ssh -t poolpooly@192.168.1.74 "ssh -t milamarty@192.168.1.114 '/opt/homebrew/bin/tmux -L gui attach -t translate'"
Прочитать историю панели без подключения — листается и ищется (/ поиск, q выход), воркеру не помешает:
ssh poolpooly@192.168.1.74 "ssh milamarty@192.168.1.114 '/opt/homebrew/bin/tmux -L gui capture-pane -p -S -5000 -t translate'" | less -R
Если при входе tmux покажет «.config/tmux/tmux.conf: Permission denied» — нажми q, это косметика: каталог ~/.config на M4 принадлежит root, сессия работает. Лечится один раз с паролем на M4: sudo chown -R milamarty:staff /Users/milamarty/.config && chmod 755 /Users/milamarty/.config
Обновлён
2026-07-30T00:52:35.366Z