IOS-050 · Дефект · Переводчик · web
12 из 16 словарей НЕ ПОДКЛЮЧЕНЫ к коду — лежат на диске мёртвым грузом
Закрыт
P0 · горит
ведёт: —
эпик: IOS-006
Суть
Проверил ПРОВОДКУ, а не наличие файлов, и нашёл разрыв. В src/lib/translation/contrastiveTerms.ts объект BASELINES собран из ЧЕТЫРЁХ статических импортов: en, tr, vi, fi. Больше нигде словари не загружаются, динамических импортов нет вообще. Значит ru, uk, de, fr, es, it, pl, pt, cs, nl, sv, ja лежат в релизе и перечислены в манифесте, но код к ним не обращается: BASELINES[language] возвращает undefined, срабатывает ранний выход, и путь уходит в режим «только имена из NER».
То есть весь вечерний труд по русскому и украинскому — включая пересборку с однобуквенными словами — на поведение НЕ ВЛИЯЕТ, пока проводки нет. Это ровно наш канон «задеплоено ≠ работает»: я проверил файлы в релизе и не проверил, что код их читает.
Как воспроизвести
grep -n "BASELINES" src/lib/translation/contrastiveTerms.ts → в объекте только en, tr, vi, fi. grep -rn "await import" src/lib/translation/ → пусто.
Чем закрывается (приёмка)
Живая проверка на проде: подготовка глоссария по РУССКОМУ документу возвращает backgroundStatus available (а не missing) и в кандидатах есть НАРИЦАТЕЛЬНЫЕ термины, а не только имена. То же по украинскому.
Доказательства
Найдено координатором 01:40 сверкой кода после посадки 16 словарей.
Связи
- связан → IOS-051 — Ленивая загрузка словарей: без неё сотня языков положит сборку · один механизм закрывает и разрыв проводки, и масштаб
Лента
2026-07-30T01:02:20.144Z · backup-opusВАЖНОЕ УТОЧНЕНИЕ ДЛЯ ПЛАНА OWNER-А: разрыв проводки НЕ влияет на его первую книгу. Она англоязычная, а английский словарь подключён статически (en: ENGLISH в BASELINES) и работает. Ждать ленивой загрузки для перевода английской книги на украинский НЕ нужно: цель uk открыта всегда, извлечение терминов идёт по английскому исходнику. Разрыв бьёт только по документам НА русском, украинском, немецком и остальных двенадцати языках.
2026-07-30T01:29:18.779Z · CODEX02:29 НУЖНО ДЕЙСТВИЕ КООРДИНАТОРА: посадить готовый IOS-051 и сообщить новый serving SHA; без него live-proof lazy baseline на русской/украинской книгах IOS-050 заблокирован, IOS-053 по заданному порядку не начинается.
2026-07-30T03:34:26.423Z · вахтёр-кодексServing SHA для lazy loader уже ddca3f70d8; линия получила no-secret live ru/uk contract. IOS-052 остаётся удержан только решением по canonical OpenAI 429 quota/fail-closed.
2026-07-30T11:45:46.913Z · watchkeeperНОВЫЙ ПЕРЕХОД: translate blocked→waiting_long. Линия ждёт внешний serving SHA для IOS-050; нужен URL workflow или итоговый SHA, runner из этой среды недоступен.
2026-07-30T18:32:58.216Z · backup-opusОтвет на вопрос owner-а «какие языки покрывают и подключили ли их»: словари есть для 16 языков — английский, русский, украинский, финский, турецкий, вьетнамский, немецкий, французский, испанский, итальянский, польский, португальский, чешский, нидерландский, шведский, японский. Статических импортов больше ноль, загрузка ленивая. НО на проде они не находились из-за пути — исправлено вручную, см. новый тикет. Живого доказательства по русскому документу пока НЕТ, поэтому тикет остаётся открытым.
2026-08-01T19:03:03.525Z · backup-opusЖИВОЕ ДОКАЗАТЕЛЬСТВО. Прод v4-c16d9b0. Словарей 81, лежат рядом с сервером (упаковка prepare-standalone.cjs), в граф сборки не попадают. Выдача по требованию проверена на проде: /api/translation/baseline/{uk,ru,ja,ar,hi} отдаёт JSON с источником и версией. Костыль с shared/ разжалован в страховку — если упаковка сломается, посадка это КРИЧИТ, а не молча чинит. pt разделён на ptbr/ptpt, лицензии в baseline/licenses (7 файлов) и NOTICE.md. 2026-08-01T20:48:26.300Z · backup-opusЯЗЫКИ ОТКРЫТЫ. Прод v4-cc8349f. Меню рисовало 102 языка, а /api/translation/capabilities отдавал TRANSLATE_TARGET_LANGUAGES — 15 штук, список написан под меню писателя; всё остальное диалог помечал «Недоступно у Stage 1». Португальский там был pt, а меню знает ptbr/ptpt — серыми были ОБА при живых словарях. Источник правды теперь один: список меню, отфильтрованный воротами. Живая проверка под QA-учёткой: РАЗРЕШЕНО 102, ptbr/ptpt/ie на месте. Отдельно: имя целевого языка для модели бралось из таблицы на 13 строк, дальше в промпт уходил сам код (translating English into ptbr) — добавлен разбор через Intl.DisplayNames. И пункт Gaeilge заведён под кодом ie (интерлингве) — модели теперь уходит Irish.
2026-08-03T11:41:53.463Z · dict-packDICTPACK.patch: исходная формулировка тикета устарела для canon-72bccfe: статических BASELINES/import словарей нет, manifest содержит 102 artifacts, локальная сверка показала 102 JSON на диске, у каждого есть license/attribution/entries. Дополнительно закрыт найденный разрыв проводки 102-набора: runtime loader теперь ищет lib/translation/baseline рядом с этим архивом, API baseline принимает 2-6 буквы и hyphen IDs, pt/pt-BR→ptbr, pt-PT→ptpt, zh-Hant→zhhant, ar-EG→ar-eg. Loader-only проверка через tsx: pt=ptbr, ptpt=ptpt, zhhant=zhhant, arEg=ar-eg. Patch: /Users/milamarty/Downloads/DICTPACK.patch SHA256 103b8aa3689cd0c5b401f72f1d1548992f91c399cd4bd637d8cfcf9bb3532f66. НЕ деплоил.
2026-08-03T12:20:52.739Z · вахтёрВоркер translate — dead: тишина в панели 912 мин (порог 20). Тикет не двигается.
2026-08-03T12:25:56.401Z · вахтёрВоркер translate — dead: тишина в панели 917 мин (порог 20). Тикет не двигается.
2026-08-03T12:31:00.198Z · вахтёрВоркер translate — dead: тишина в панели 922 мин (порог 20). Тикет не двигается.
2026-08-03T12:36:02.270Z · вахтёрВоркер translate — dead: тишина в панели 927 мин (порог 20). Тикет не двигается.
2026-08-03T12:41:04.777Z · вахтёрВоркер translate — dead: тишина в панели 932 мин (порог 20). Тикет не двигается.
2026-08-03T12:46:06.952Z · вахтёрВоркер translate — dead: тишина в панели 937 мин (порог 20). Тикет не двигается.
2026-08-03T12:51:09.224Z · вахтёрВоркер translate — dead: тишина в панели 942 мин (порог 20). Тикет не двигается.
2026-08-03T12:56:11.146Z · вахтёрВоркер translate — dead: тишина в панели 947 мин (порог 20). Тикет не двигается.
2026-08-03T13:01:13.794Z · вахтёрВоркер translate — dead: тишина в панели 952 мин (порог 20). Тикет не двигается.
2026-08-03T13:06:16.037Z · вахтёрВоркер translate — gone: тишина в панели 958 мин (порог 20). Тикет не двигается.
2026-08-03T13:11:18.952Z · вахтёрВоркер translate — gone: тишина в панели 963 мин (порог 20). Тикет не двигается.
2026-08-03T13:16:20.716Z · вахтёрВоркер translate — gone: тишина в панели 968 мин (порог 20). Тикет не двигается.
2026-08-03T13:21:22.317Z · вахтёрВоркер translate — gone: тишина в панели 973 мин (порог 20). Тикет не двигается.
2026-08-03T13:26:24.137Z · вахтёрВоркер translate — gone: тишина в панели 978 мин (порог 20). Тикет не двигается.
2026-08-03T13:31:26.927Z · вахтёрВоркер translate — gone: тишина в панели 983 мин (порог 20). Тикет не двигается.
2026-08-03T13:36:29.147Z · вахтёрВоркер translate — gone: тишина в панели 988 мин (порог 20). Тикет не двигается.
2026-08-03T13:41:31.129Z · вахтёрВоркер translate — gone: тишина в панели 993 мин (порог 20). Тикет не двигается.
2026-08-03T13:46:32.874Z · вахтёрВоркер translate — gone: тишина в панели 998 мин (порог 20). Тикет не двигается.
2026-08-03T13:51:34.582Z · вахтёрВоркер translate — gone: тишина в панели 1003 мин (порог 20). Тикет не двигается.
2026-08-03T13:56:36.798Z · вахтёрВоркер translate — gone: тишина в панели 1008 мин (порог 20). Тикет не двигается.
2026-08-03T14:01:40.514Z · вахтёрВоркер translate — gone: тишина в панели 1013 мин (порог 20). Тикет не двигается.
2026-08-03T14:06:42.809Z · вахтёрВоркер translate — gone: тишина в панели 1018 мин (порог 20). Тикет не двигается.
2026-08-03T14:11:45.725Z · вахтёрВоркер translate — gone: тишина в панели 1023 мин (порог 20). Тикет не двигается.
2026-08-03T14:16:48.166Z · вахтёрВоркер translate — gone: тишина в панели 1028 мин (порог 20). Тикет не двигается.
2026-08-03T14:21:50.282Z · вахтёрВоркер translate — gone: тишина в панели 1033 мин (порог 20). Тикет не двигается.
2026-08-03T14:26:54.143Z · вахтёрВоркер translate — gone: тишина в панели 1038 мин (порог 20). Тикет не двигается.
2026-08-03T14:31:56.893Z · вахтёрВоркер translate — gone: тишина в панели 1043 мин (порог 20). Тикет не двигается.
2026-08-03T14:36:58.787Z · вахтёрВоркер translate — gone: тишина в панели 1048 мин (порог 20). Тикет не двигается.
2026-08-03T14:42:00.816Z · вахтёрВоркер translate — gone: тишина в панели 1053 мин (порог 20). Тикет не двигается.
2026-08-03T14:47:05.437Z · вахтёрВоркер translate — gone: тишина в панели 1058 мин (порог 20). Тикет не двигается.
2026-08-03T14:52:07.623Z · вахтёрВоркер translate — gone: тишина в панели 1063 мин (порог 20). Тикет не двигается.
2026-08-03T14:57:14.761Z · вахтёрВоркер translate — gone: тишина в панели 1069 мин (порог 20). Тикет не двигается.
2026-08-03T15:02:24.578Z · вахтёрВоркер translate — gone: тишина в панели 1074 мин (порог 20). Тикет не двигается.
2026-08-03T15:07:30.768Z · вахтёрВоркер translate — gone: тишина в панели 1079 мин (порог 20). Тикет не двигается.
2026-08-03T15:12:35.704Z · вахтёрВоркер translate — gone: тишина в панели 1084 мин (порог 20). Тикет не двигается.
2026-08-03T15:17:40.369Z · вахтёрВоркер translate — gone: тишина в панели 1089 мин (порог 20). Тикет не двигается.
2026-08-03T15:22:47.426Z · вахтёрВоркер translate — gone: тишина в панели 1094 мин (порог 20). Тикет не двигается.
2026-08-03T15:27:50.523Z · вахтёрВоркер translate — gone: тишина в панели 1099 мин (порог 20). Тикет не двигается.
2026-08-03T15:32:54.512Z · вахтёрВоркер translate — gone: тишина в панели 1104 мин (порог 20). Тикет не двигается.
2026-08-03T15:37:57.026Z · вахтёрВоркер translate — gone: тишина в панели 1109 мин (порог 20). Тикет не двигается.
2026-08-03T15:42:59.609Z · вахтёрВоркер translate — gone: тишина в панели 1114 мин (порог 20). Тикет не двигается.
2026-08-03T15:48:01.821Z · вахтёрВоркер translate — gone: тишина в панели 1119 мин (порог 20). Тикет не двигается.
2026-08-03T15:53:04.623Z · вахтёрВоркер translate — gone: тишина в панели 1124 мин (порог 20). Тикет не двигается.
2026-08-03T15:58:07.392Z · вахтёрВоркер translate — gone: тишина в панели 1129 мин (порог 20). Тикет не двигается.
2026-08-03T16:03:10.590Z · вахтёрВоркер translate — gone: тишина в панели 1134 мин (порог 20). Тикет не двигается.
2026-08-03T16:08:12.955Z · вахтёрВоркер translate — gone: тишина в панели 1139 мин (порог 20). Тикет не двигается.
Воркер
не привязан — привязать:
curl -X POST https://bugs.wool2.online/api/ios/assign -H 'content-type: application/json' \
-d '{"issueId":"IOS-050","session":"<имя tmux-сессии>","host":"m4"}'
Обновлён
2026-08-05T00:57:55.061Z