📱 Доска iOS

всеканоны и докиворкеры↗ WEB↗ Легаси
IOS-048 · Дефект · Переводчик · web

Финал визарда перевода: сырой id вместо имени, нет ссылки, документ не появляется без перезагрузки

Закрыт P1 · важно ведёт: translate эпик: IOS-006
Суть
Перевод доходит до конца, но финал выглядит как отладочный вывод. Owner дословно: «получил такое сухое скупое сообщение — где написано новый документ cms6pnlfg005273pgyr5pcsx1 и всё, вышел из редактора, стал искать в левой панели этот сгенерированный и не нашёл, да и вообще не нашёл никаких новых документов пока не обновил страницу — и увидел уже потом файл 1052 — Ukrainian.md».

ЧЕТЫРЕ ДЕФЕКТА В ОДНОМ ЭКРАНЕ:
1. Показывается СЫРОЙ идентификатор из базы вместо имени документа: искать по нему в списке невозможно, там другое имя.
2. Нет ССЫЛКИ на созданный документ — пользователь выходит из визарда и ищет вручную.
3. Документ НЕ ПОЯВЛЯЕТСЯ в левой панели до перезагрузки страницы.
4. Ожидание ничем не занято: длинный перевод идёт молча, без прогресса и анимации.
Чем закрывается (приёмка)
Кадры: (1) финал показывает человеческое имя документа и работающую ссылку; (2) документ появляется в левой панели БЕЗ перезагрузки; (3) во время перевода виден прогресс с анимацией и подтверждение системным инфо-попапом проекта; (4) переведённый документ лежит в папке Generated, как остальные генерируемые документы.
Лента
2026-07-29T23:44:21.166Z · вахтёр-кодекс
00:44 idle translate поднят: IOS-048 назначен как следующий независимый P1; линия направлена на воспроизведение четырёх дефектов, web-правку и тесты, не ожидая архив IOS-038.
2026-07-29T23:59:05.785Z · backup-opus
Воркер закрыл все четыре пункта за 25 минут: имя и ссылка в финале, обновление левой панели через addSource без перезагрузки, папка Generated, анимированный прогресс с инфо-попапом, плюс контрактные тесты 3/3 и translation/i18n/pipeline 31/31. НО забрать не смог: дельта из его грязного дерева даёт 28 отклонённых блоков в 12 файлах, потому что его ветка разошлась с живым деревом — я за вечер посадил девять коммитов, которых его база не знает. Сводить 28 блоков руками в час ночи по деплойному дереву не стал: слишком легко сломать то, что уже работает. Живое дерево откатил в чистое состояние (HEAD 6d65f1ff, ноль изменений), выдал воркеру ПОЛНЫЙ архив этого состояния на 90 МБ и попросил пересобрать патч против него. Раньше я давал только src/lib/translation — этого было мало.
2026-07-30T07:15:55.331Z · CODEX-ВАХТА
Линия translate стояла на credential gate IOS-050 при открытом IOS-048; назначен no-credential refresh финала визарда против livetree-6d65f1ff с focused proof имени/ссылки/немедленного появления документа/прогресса, без deploy.
2026-07-30T07:23:40.914Z · CODEX-ВАХТА
ГОТОВО/В ОЧЕРЕДИ M1: live-refresh patch SHA cf55360d7ba744d75db73faf5fd982571c1664cf4d20d6ab92e9e5d20d124856; full live archive apply GREEN, focused 3/3, createCorpus(name,id) и addSource(source,{skipLimit}) сверены с реальными store signatures, changed-file typecheck новых ошибок не дал. Ждём .result.
2026-07-30T07:24:16.820Z · CODEX-ВАХТА
ОТКАЗ M1 на live HEAD e19d940: stale hunks в runs/[runId]/route.ts и DocumentTranslationDialog.tsx. КООРДИНАТОР: положите свежий FULL live-tree archive для HEAD e19d940; после этого CODEX сам пересоберёт и повторит заявку.
2026-08-02T19:06:04.571Z · eng-web
ENG web patch ready against /tmp/canon-4ef39b8.tar.gz; no deploy.
PATCH: /Users/milamarty/Downloads/ENG-077-048.patch
FIX: translation output now creates/uses the Generated corpus server-side and returns run.outputSource (id, name, content, corpusId, metadata). Polling route attaches the same outputSource, so async completion no longer leaves the client with only outputSourceId.
UI: DocumentTranslationDialog syncs the completed source into Zustand via createCorpus("Generated", corpusId) + addSource(..., { skipLimit: true }), shows outputSource.name instead of raw id, provides an Open document button/toast action, and uses setViewedDocument({ id, mode: "source" }) to open it. The translate button is disabled while status=translating and progress now has spinner + bar.
TESTS: npx tsx --test app/api/translation/__tests__/route.contract.test.ts => 6/6 pass. npx tsx --test components/translation/__tests__/DocumentTranslationDialog.i18n.test.ts => 3/3 pass (with temp /Users/milamarty/Projects/messages symlink because canon is src-only). patch --dry-run -p1 against a temp root with src/ => pass.
2026-08-02T19:37:59.436Z · backup-opus
Посажено v4-9ae28ca (eng-web): финал визарда — имя документа вместо id, ссылка на перевод, live-появление в списке без перезагрузки; тесты runs-роута в сборке. Owner: приглашение на пост-QA живьём при следующем переводе.
Воркер
не проверен translate M4 движение в панели: неизвестно
Подключиться и смотреть/перехватить руками. Колесо мыши листает; клавишами — 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-08-02T19:37:59.297Z