# Локализация интерфейса AGIL Calls

Глоссарий, правила и список правок для пользовательской текстовой части продукта:
панель (`apps/dashboard`), визуальный редактор (`apps/editor`), виджет
(`packages/widget`), демо-страницы (`apps/demo`), вводный маркетинговый раздел
`README.md`.

Цель — чтобы нетехнический администратор понимал экран с первого прочтения.
Технические термины остаются только там, где без них нельзя (API, MCP, WebRTC,
TURN, OpenAPI, SFU), и при первом употреблении объясняются простыми словами.

## 1. Принципы

1. Коротко и конкретно: одна мысль — одно предложение.
2. Никакого сленга и жаргона: «протыкать», «заливать», «косяк», «рулит»,
   «тачка», «дебажить», «лагает» — запрещены.
3. Русское слово вместо английского, если оно есть: «копировать», «скачать»,
   «отправить», «комната», «участник», «запись», «расшифровка», «права».
4. Английский термин допустим, если это имя стандарта/протокола/продукта:
   API, MCP, WebRTC, TURN, SFU, OpenAPI, JSON, JWT, SDK, iframe, curl.
   При первом употреблении — короткое пояснение в скобках или подсказка.
5. Кнопки — глагол в инфинитиве: «Создать», «Сохранить», «Скачать»,
   «Копировать», «Повторить». Не «ОК», не «Далее →» без глагола.
6. Обращение — «вы» со строчной буквы в середине предложения; «Вы» — только
   в начале предложения.
7. Буква «ё» обязательна: «включён», «ещё», «зачёт», «подключён».
8. Кавычки — «ёлочки», тире — длинное (—), многоточие — один символ (…).
   Без «!!», «?!», «...» и дублей знаков.
9. Ошибка и пустое состояние отвечают на два вопроса: что случилось и что
   сделать. Где можно — дают ссылку или кнопку действия.
10. Смысл юридических и охранных текстов (согласие на запись, пароли,
    geo-политика, аудит) не меняем — только уточняем формулировки.

## 2. Глоссарий

Дополнения второго прохода — в §9.2.

| Не писать | Писать | Комментарий |
|---|---|---|
| тенант, tenant | организация | «Тенант» остаётся только в технической подписи рядом с идентификатором: «Организация (tenant): demo». |
| провайдер, provider | внешний сервис | В названии раздела редактора — «Внешние сервисы». Значения `builtin`/`external`/`disabled` показываем как «встроенный / внешний / отключён». |
| фолбэк, fallback | резервный режим | Поле `fallback` — «Поведение при сбое». Значение `fail` — «сообщить об ошибке». |
| фича, feature flag | функция | Раздел редактора «Функции», а не «Фичи». |
| оверрайд, override | персональные права | «Персональные права пользователя», кнопка «Добавить пользователя». |
| role defaults | права роли по умолчанию | Пояснять одной строкой, без английского. |
| denied / deniedFeatures | запрещённые функции | «Глобально запрещённые функции». |
| strict mode | строгий режим | «Строгий режим: доступ только по явно выданным правам». |
| вебхук, webhook | вебхук (уведомление на ваш сервер) | При первом употреблении — пояснение; дальше можно «вебхук». |
| масштабирование, scale | масштабирование | «Настройки масштабирования», не «Scale». |
| лейаут, layout | расположение элементов | В редакторе раздел «Расположение»; в тексте — «расположение элементов». |
| In-call | во время звонка | «Ассистент звонка» / «ассистент во время звонка». |
| комплаенс, compliance | соответствие правилам | «Проверка соответствия правилам»; находки — «замечания». |
| findings | замечания | «Замечания проверки», не «находки/findings». |
| транскрипт | расшифровка | «Расшифровка звонка (текст речи)». Поле API `transcript` не переименовываем. |
| DRAFT, draft | черновик | Статус редактора — «Черновик». |
| Release | версия / публикация | По смыслу: «Версия конфигурации» или «Публикация». |
| Knowledge-агент | Ассистент по базе знаний | В навигации — «Ассистент знаний», в заголовке — полностью. |
| AI, AI-агент | ИИ, ИИ-агент | «ИИ (искусственный интеллект)» при первом употреблении. DeepSeek не переводим. |
| STT | распознавание речи (STT) | При первом употреблении — расшифровка. |
| TURN | TURN (сервер для звонков через сложные сети) | Один раз пояснить, дальше «TURN». |
| STUN | STUN (сервер, который помогает установить соединение) | Один раз пояснить. |
| SFU | SFU (сервер, который пересылает видео участникам) | Один раз пояснить. |
| WebRTC | WebRTC (технология видеозвонков в браузере) | Один раз пояснить. |
| MCP | MCP (протокол подключения ИИ-инструментов) | Один раз пояснить. |
| OpenAPI JSON | Спецификация OpenAPI (JSON) | Подсказка: «машиночитаемое описание API для Swagger/Postman». |
| API Explorer | Документация API | Ссылка на `/docs`; «Explorer» — жаргон. |
| SDK | SDK (набор для разработчиков) | Один раз пояснить. |
| iframe | iframe (встроенное окно) | Один раз пояснить. |
| embed | встраивание | «Код для встраивания», «Ссылка для встраивания». |
| endpoint | адрес сервиса | Техническое `endpoint` — в скобках. |
| env-переменная | переменная окружения | `apiKeyEnv` — «имя переменной окружения с ключом». |
| JWT | JWT-токен | «Токен доступа (JWT)». |
| HMAC | подпись HMAC | «Запросы подписываются HMAC». |
| scrypt | scrypt | «scrypt — алгоритм хеширования паролей». |
| CDN | CDN (сеть доставки файлов) | Один раз пояснить. |
| P2P, mesh | напрямую (P2P) | Режим связи: «прямой (mesh)». |
| broadcast | трансляция (broadcast) | «Режим трансляции (вебинар)». |
| uptime | время работы | «Время работы сервера». |
| lockout | блокировка после неудачных попыток | Без «lockout» в основном тексте. |
| liveness | проверка подлинности | Так же, как в виджете. |
| integrity | подлинность | «Проверка подлинности медиа». |
| snippet, сниппет | код для вставки | «Скопировать код». |
| joinUrl / embedUrl | ссылка для входа / ссылка для встраивания | Технические имена — в подсказке. |
| curl | команда curl | «Скопировать команду curl». |
| KPI | показатель | «Показатели за 24 часа». |
| geo | гео | «Гео-политика», «Гео-блокировка» — допустимо. |
| host / moderator / guest | организатор / модератор / гость | Значения API не меняем, в скобках можно оставить `host`. |
| speaker | говорящий, выступающий | «Фокус на говорящем». |
| breakout rooms | отдельные комнаты | «Отдельные комнаты для групп (breakout)». |
| whiteboard | доска | «Доска для рисования». |
| annotations | пометки | «Пометки на экране». |
| SIP | SIP-телефония | «Дозвон по SIP». |
| IdP, SSO | единый вход (SSO) | «Вход через корпоративную систему (SSO)». |
| claims | поля токена (claims) | «Поля токена, из которых берётся имя и роль». |
| same-origin | тот же источник (same-origin) | «Разрешить только запросы с того же сайта». |
| PII | персональные данные | «Персональные данные (PII)» — один раз. |
| regex | регулярное выражение | «Регулярное выражение (regex)» — один раз. |
| ICE | ICE (установка соединения) | В диагностике — «ICE (соединение)». |
| simulcast, SVC | несколько качеств потока | «Несколько качеств потока (simulcast/SVC)». |
| media egress | сервер записи медиа | «Сервер, который записывает звонок». |
| single-node | один сервер (single-node) | «Пока работает один сервер». |
| sticky sessions | привязка сессии к серверу | Без «sticky». |
| LB strategy | стратегия балансировки | «Как распределяются запросы между серверами». |
| node | сервер (узел) | «Узел» допустим в разделе масштабирования. |
| TURN pool | пул TURN-серверов | «Список TURN-серверов». |
| SIEM, DLP | системы безопасности компании | «SIEM/DLP (системы безопасности компании)» — один раз. |

## 3. Единые названия разделов

| Раздел | Навигация | Заголовок страницы |
|---|---|---|
| overview | Обзор | Обзор |
| rooms | Комнаты | Комнаты |
| security | Безопасность | Безопасность |
| audit | Аудит | Аудит |
| access | Доступы | Доступы |
| integrations | Интеграции | Интеграции |
| knowledge | Ассистент знаний | Ассистент по базе знаний |
| recordings | Записи | Записи |
| settings | Настройки | Настройки и встраивание |
| provider slots | — | Внешние сервисы |
| scale | — | Масштабирование |
| layout | Расположение | Расположение |
| fallback | Резервный режим | Резервный режим |
| in-call assistant | — | Ассистент звонка |

В редакторе названия разделов совпадают с пунктами левого меню; полное название
показывается во всплывающей подсказке, если пункт обрезан по ширине. Раздел базы
знаний в редакторе называется «База знаний» (коротко для меню), на панели —
«Ассистент знаний» / «Ассистент по базе знаний».

## 4. Решения и спорные места

Принято в этом проходе:

1. **«Тенант» → «организация»** во всём интерфейсе; в API-справочнике и JSON
   остаётся `tenant`. Требует подтверждения, что «организация» — принятый термин
   в тарифах и договорах.
2. **«AI» → «ИИ»**, «AI-агент» → «ИИ-агент». Названия моделей (DeepSeek) не
   трогали.
3. **«Knowledge-агент» → «Ассистент по базе знаний»** (в навигации — «Ассистент
   знаний»). В подзаголовке экрана осталась техническая сноска «В API этот
   раздел называется Knowledge-агент» — по ней QA находит экран.
4. **«Транскрипт» → «Расшифровка»**, вкладка комнаты тоже. Поле API `transcript`
   и файлы `.txt` не менялись.
5. **«Комплаенс» → «Соответствие правилам»**, «findings» → «замечания».
6. **Guardify, декоративная плашка.** Было `E2E POLICY · AUDIT ON`, стало
   «АУДИТ ВКЛЮЧЁН»: убрано утверждение о сквозном шифровании, которого продукт
   не гарантирует. Нужно подтверждение, что это допустимо для демо-страницы.
7. **QA-заблокированные строки.** «Настройки агента» (заголовок карточки базы
   знаний) оставлен, чтобы не ломать `qa/ai/browser-dashboard-ai.mjs`; после
   обновления QA его стоит переименовать в «Настройки ассистента».
8. **Коды событий аудита** (`room.created — комната создана`, `lockout — …`)
   оставлены как значения API: по ним фильтруют журнал и сверяются с
   документацией. Русское пояснение стоит рядом.
9. **Технические имена в подсказках** (`tenantId`, `userId`, `roleId`,
   `session.chat.ui`, `config.features`, `x-api-key`) сохранены: по ним
   администратор сопоставляет интерфейс с конфигурацией и API.
10. **Значения перечислений** (`builtin/external/disabled`, `strict`,
    `mesh/sfu`, `host/moderator/guest`) не переименованы; русская подпись стоит
    рядом. Чтобы перевести сами пункты списков в редакторе, нужна доработка
    `renderSchema`/`selectField` — это изменение логики, не текста.
11. **Пресеты темы** Light/Dark/Corporate/Night/Minimal в редакторе оставлены
    названиями продуктовых тем (и их ищет QA регуляркой).
12. **Английский словарь виджета** (`en`) не менялся: правки только в русской
    локали.
13. **Юридические тексты** (согласие на запись, 152-ФЗ, пароли, geo-политика,
    ответственность за базу знаний) сохранены по смыслу.

Открытые вопросы для продукта:

1. «Организация» vs «тенант» в договорах и тарифах.
2. Показывать ли технические ключи (`session.chat.ui`, `features.*`) прямо в
   подписях или убрать их за «Подробнее».
3. Нужен ли отдельный термин для «внешнего сервиса» в тарифах (сейчас в UI —
   «внешний сервис», в API — `provider`).
4. Обновлять ли QA-скрипты под новые названия вкладок и кнопок (см. §6) или
   вернуть старые строки.

## 5. Изменённые строки по файлам

Всего изменено около **870** строковых значений: панель ≈420, редактор ≈310,
виджет 44, демо ≈59, README 37. Подробные таблицы «было → стало» по панели и
редактору — в `qa/linguist/changes-dashboard.md` и
`qa/linguist/changes-editor.md`.

### 5.1 Панель (`apps/dashboard`), 22 файла, ≈420 строк

| Файл | Примеры правок |
|---|---|
| `src/ui/layout.ts` | «Панель разработчика» → «Панель управления»; «Knowledge-агент» → «Ассистент знаний»; «Настройки и Embed» → «Настройки»; футер: «Документация API», «Спецификация OpenAPI», «Руководство интегратора», «Справочник API», «Аудит безопасности», «Демо-звонок» |
| `src/ui/mascot.ts` | «Страж конфига» → «Проверка настроек»; «Ревьюер безопасности» → «Проверка безопасности»; «Онбординг» → «Первые шаги»; убраны случайные иероглифы «Я本地 помощник» |
| `src/ui/guard.ts` | «конфигурация тенанта» → «настройки организации»; «Найдено findings» → «Замечания проверки» |
| `src/ui/audit-entry.ts` | русские названия событий аудита, lockout объяснён |
| `src/ui/table.ts` | «Пока пусто» → «Данных пока нет» |
| `src/main.ts` | заголовки маршрутов, «uptime» → «время работы», «Тенант» → «Организация» |
| `src/errors.ts` | «не принадлежит тенанту» → «выдан для другой организации»; «Эндпоинт» → «Адрес сервиса (endpoint)» |
| `src/features.ts` | «AI-комплаенс» → «Проверка соответствия правилам (ИИ)»; «AI и знания» → «ИИ и знания»; «Сессионные комнаты» → «Отдельные комнаты (breakout)» |
| `src/screens/overview.ts` | «Uptime», «Комнат в памяти», «Тенантов» → «Время работы», «Комнат на сервере», «Организаций»; «фичи и лейаут» → «функции и расположение элементов» |
| `src/screens/login.ts` | «Панель разработчика» → «Панель управления»; ошибки с действием; убран дубль подсказки про API-ключ |
| `src/screens/rooms.ts` | «Копировать join-ссылку» → «Копировать ссылку для входа»; счётчик «Показано N из M» |
| `src/screens/recordings.ts` | «Транскрипт» → «Расшифровка»; «в конфиге тенанта» → «в настройках организации» |
| `src/screens/knowledge.ts` | «Endpoint настроен» → «Адрес сервиса задан»; «provider/model/confidence» → «Сервис/Модель/Уверенность» |
| `src/screens/audit.ts` | «журнал событий тенанта» → «журнал событий организации»; уровни «Критично (critical)» и т. п. |
| `src/screens/dialogs.ts` | «Join-ссылка» / «Embed-ссылка» → «Ссылка для входа» / «Ссылка для встраивания»; «media: mesh» → «Режим связи: прямой (mesh)» |
| `src/screens/security.ts` | «AI-агент» → «ИИ-агент»; «Медиа-целостность (anti-deepfake)» → «Подлинность медиа (защита от дипфейков)»; «Порог риска» |
| `src/screens/access.ts` | «роль × фича, режим strict» → «права роли, строгий режим»; «Пиннить» → «Зафиксировать»; «baseRole» → «Базовая роль (baseRole)» |
| `src/screens/settings.ts` | «Настройки и Embed» → «Настройки и встраивание»; «Генератор embed-сниппета» → «Код для встраивания»; «Публичные endpoints» → «Публичные адреса» |
| `src/screens/room.ts` | вкладки «Расшифровка» и «Соответствие правилам»; «findings» → «замечания»; «Топики» → «Темы» |
| `src/screens/integrations.ts` | «Провайдеры» → «Внешние сервисы»; перевод ограничений масштабирования с сервера; русские подписи вместо `single-node`, `round-robin`, `fallback` |
| `index.html` | title и description — «Панель управления» |
| `src/links.ts` | комментарий «Открыть demo» → «Открыть демо» (текст не показывается) |

### 5.2 Редактор (`apps/editor`), 24 файла, ≈310 строк

| Файл | Примеры правок |
|---|---|
| `index.html` | «API docs» → «Документация API»; «OpenAPI JSON» → «Спецификация OpenAPI»; «tenant: demo» → «организация: demo»; «preview» → «Предпросмотр» |
| `src/main.ts` | «configVersion» → «Версия конфигурации»; «localStorage» → «в этом браузере»; подсказки к пунктам меню |
| `src/inspector.ts` | «Сохранить в тенант» → «Сохранить в организации»; «Копировать сниппет» → «Копировать код»; «JSON конфига» → «JSON конфигурации» |
| `src/preview.ts` | «preview offline — JSON/export work» → «Предпросмотр недоступен — JSON и экспорт работают»; русские названия возможностей |
| `src/fields.ts`, `src/api.ts`, `src/dom.ts` | ошибки и aria-подписи с действием |
| `src/sections/access.ts` | «role defaults → user override» → «права роли по умолчанию → персональные права»; «в разделе «Фичи»» → «в разделе «Функции»» |
| `src/sections/ai.ts` | «AI-агент» → «ИИ-агент»; «Правила комплаенса» → «Правила проверки соответствия»; «Severity» → «Важность» |
| `src/sections/brand.ts` | «Пресеты темы» → «Готовые темы»; «Текст футера» → «Подпись внизу» |
| `src/sections/fallback.ts` | «Fallback» → «Резервный режим»; «RTT» → «Задержка RTT»; «Backoff» → «Пауза между попытками» |
| `src/sections/features.ts` | «Фичи» → «Функции»; «Ядро MVP» → «Основные функции (базовый набор)» |
| `src/sections/in-call.ts` | «In-call ассистент» → «Ассистент звонка»; «LLM + локальный fallback» → «нейросеть с локальным резервным режимом» |
| `src/sections/integrations.ts` | «Claim: userId» → «Поле с идентификатором пользователя (claim)»; «Ретраи» → «Повторы» |
| `src/sections/knowledge.ts` | «Knowledge-агент» → «База знаний»; «Endpoint компании» → «Адрес сервиса компании» |
| `src/sections/layout.ts` | «Лейаут» → «Расположение»; «Chrome встраивания» → «Оформление встраивания (chrome)» |
| `src/sections/media.ts` | «Simulcast» → «Несколько слоёв качества (simulcast)»; «Jitter buffer» → «Буфер дрожания задержки» |
| `src/sections/providers.ts` | «Внешние сервисы»; «Fallback при ошибке» → «Поведение при сбое»; «Options (JSON)» → «Дополнительные параметры (JSON)» |
| `src/sections/room.ts` | «ID беседы» → «Идентификатор беседы»; «direct (1:1)» → «Личный звонок (direct, 1:1)» |
| `src/sections/scaling.ts` | «Health path» → «Путь проверки работоспособности»; «Sticky-сессии» → «Закрепление участника за узлом»; перевод значений стратегий |
| `src/sections/security.ts` | «Lockout» → «Блокировка после неудачных попыток»; «Медиа-интегрити» → «Подлинность медиа» |
| `src/sections/session.ts` | «Транскрипт» → «Расшифровка»; «Локали» → «Языки» |
| `src/sections/theme.ts` | «Focus ring» → «Кольцо фокуса»; «Backdrop blur» → «Размытие подложки» |

### 5.3 Виджет (`packages/widget/src/i18n.ts`), 44 строки

Дополнительно переведены 6 внутренних сообщений об ошибках, которые могли
попасть на экран входа: `call/media.ts` («Не удалось получить звук с микрофона»,
«Не удалось получить видео с камеры»), `call/signaling-client.ts`
(«Соединение закрыто до подтверждения сервером», «Попытки переподключения
исчерпаны», «Сервер не ответил вовремя») и `api.ts` («Ошибка сети»).

Смежные правки панели помощника и заметок приведены к глоссарию:
`notesTitle` — «ИИ-анализ звонка», `notesEmpty` — без «комплаенса» и «AI»,
`assistantOpen` — «Команды ассистента», `assistantInCallTitle` — «Ассистент
звонка: команды»; добавлены `transcriptDisabled`, `transcriptOff`,
`copyFailed`, `popupBlockedHint`.

| Ключ | Было | Стало |
|---|---|---|
| `serverOfflineHint` | Проверьте адрес сервера и что он запущен. Можно осмотреть интерфейс в демо-режиме. | Проверьте адрес сервера и убедитесь, что он запущен. Можно осмотреть интерфейс в демо-режиме. |
| `unauthorized` | Нет доступа к комнате: проверьте ссылку или токен | Нет доступа к комнате. Проверьте ссылку или токен. |
| `roomFull` | В комнате уже максимум участников | В комнате нет свободных мест |
| `leave` | Выйти | Покинуть звонок |
| `transcript` | Транскрипт | Расшифровка |
| `shortcutsHint` | Горячие клавиши: m — микрофон, v — камера, c — чат, b — блюр | Горячие клавиши: m — микрофон, v — камера, c — чат, b — размытие фона |
| `chatEmpty` | Сообщений пока нет. Напишите первым! | Сообщений пока нет. Напишите первым. |
| `chatFileTooBig` | Файл больше допустимого размера | Файл больше допустимого размера. Выберите файл меньше. |
| `chatUnsupportedType` | Этот тип файлов не разрешён | Этот тип файлов не поддерживается. Прикрепите другой файл. |
| `chatSendError` | Сообщение не отправлено | Сообщение не отправлено. Попробуйте ещё раз. |
| `chatOfflineQueued` | Сообщение будет отправлено после восстановления связи | Сообщение отправится, когда связь восстановится. |
| `suspicious` | Подозрительная подлинность | Подлинность под сомнением |
| `connectionFair` | Среднее соединение | Нормальное соединение |
| `connectionCritical` | Критическое соединение | Связь почти потеряна |
| `notesSourceExternal` | AI-агент | ИИ-агент |
| `notesSourceHybrid` | AI-агент + локальные правила | ИИ-агент + локальные правила |
| `complianceTitle` | Комплаенс | Соответствие правилам |
| `complianceSeverityInfo` | инфо | информация |
| `transcriptTitle` | Транскрипт | Расшифровка |
| `transcriptExport` | Экспорт .txt | Скачать .txt |
| `transcriptUnavailable` | Распознавание речи недоступно в этом браузере | Распознавание речи недоступно в этом браузере. Откройте звонок в Chrome или Edge. |
| `statsJitter` | Джиттер | Джиттер (скачки задержки) |
| `statsBitrate` | Битрейт | Скорость потока |
| `statsIce` | ICE | ICE (соединение) |
| `statsIceRestarts` | ICE-restart | Перезапуски ICE |
| `statsBlur` | Блюр | Размытие фона |
| `statsDegraded` | Деградация | Ухудшение связи |
| `statsPeers` | Пиров | Собеседники |
| `blurCdnUnavailable` | Сегментация недоступна (CDN): включён упрощённый режим размытия | Не удалось загрузить модель размытия (CDN). Включено простое размытие. |
| `integritySuspicious` | Возможная подмена медиа | Возможна подмена видео или звука |
| `integrityUnknown` | Подлинность неизвестна | Подлинность не проверена |
| `filesStoreUnavailable` | Сервер не принимает файлы | Сервер не принимает файлы. Попробуйте позже. |
| `networkFair` | Среднее соединение | Нормальное соединение |
| `leaveConfirm` | Вы уверены, что хотите выйти? | Выйти из звонка? |
| `reconnectFailed` | Не удалось восстановить соединение. Попробуйте перезайти. | Не удалось восстановить соединение. Попробуйте войти снова. |
| `assistantExternalFailed` | Агент компании недоступен, попробуйте позже | Ассистент компании недоступен. Попробуйте позже. |
| `assistantBusy` | Ассистент думает… | Ассистент ищет ответ… |
| `mediaModeTitle` | Режим медиа | Режим связи |
| `mediaModeMesh` | mesh (P2P) | прямой (mesh, P2P) |
| `mediaModeSfu` | sfu | через сервер (SFU) |
| `mediaModeBroadcast` | broadcast (вебинар) | трансляция (вебинар) |
| `controlsStyleIsland` | Остров | Плавающая панель |
| `viewerHintMuted` | Только организаторы могут включать микрофон и камеру | Включать микрофон и камеру могут только организаторы |
| `livenessUnavailable` | Проверка подлинности недоступна (не загрузилась модель) | Проверка подлинности недоступна: не загрузилась модель |

### 5.4 Демо (`apps/demo`), 5 файлов, ≈59 строк

| Файл | Примеры правок |
|---|---|
| `index.html` | «Тенант» → «Организация»; «Пресет» → «Шаблон темы»; «WebRTC-mesh… блюр фона» → «Видеозвонки… размытие фона»; «Темы без хардкода» → «Темы без правки кода»; «Открыть joinUrl/embedUrl» → «Открыть ссылку для входа/встраивания» |
| `guardify.html` | «Default demo» → «Основное демо»; «SECURE COMMUNICATION PLATFORM» → «ПЛАТФОРМА ЗАЩИЩЁННЫХ КОММУНИКАЦИЙ»; «E2E POLICY · AUDIT ON» → «АУДИТ ВКЛЮЧЁН»; «scrypt-хэши» → «хэши scrypt»; «Запись и STT» → «Запись и распознавание речи» |
| `src/main.ts` | «Сервер онлайн» → «Сервер доступен»; «сниппет» → «код»; «смонтирован» → «открыт»; ошибки с действием |
| `src/guardify.ts` | «Остров управления» → «Панель управления»; «Сервер онлайн» → «Сервер доступен»; «буфер обмена недоступен» с действием |
| `src/embed.ts` | «Не указан параметр room» → «Не указана комната» |

### 5.5 README.md, 37 строк

Вводный маркетинговый раздел и таблица документации: «AI-агент» → «ИИ-агент»,
«блюр» → «размытие», «фуллскрин» → «полный экран», «транскрипт» → «расшифровка»,
«фичи» → «функции», «лейаут» → «расположение элементов», «провайдеры» →
«внешние сервисы», «fallback» → «резервный режим», «панель разработчика» →
«панель управления». Технические контракты, API-справочники и остальные файлы
`docs/` не переписывались.

## 6. QA-скрипты, которые нужно обновить

Это не тесты поведения, а QA-сценарии с точными строками; после переименования
они будут искать старые подписи:

1. `qa/ai/browser-dashboard-ai.mjs` — вкладки «Транскрипт» → «Расшифровка»,
   «Compliance» → «Соответствие правилам»; «Выдержки из транскрипта» →
   «Выдержки из расшифровки»; «Топики» → «Темы»; «Endpoint настроен/не задан» →
   «Адрес сервиса задан/не задан».
2. `qa/functional/06-browser-dashboard.mjs` (DASH-09/11),
   `qa/functional/13-dashboard-seeded.mjs`, `qa/visual/run-dashboard.mjs`
   (ROOM_TABS), `qa/visual/audit-surfaces.mjs` — те же вкладки комнаты.
3. `qa/editor/tools/editor-audit.mjs` — «Сохранить в тенант» → «Сохранить в
   организации», «Копировать сниппет» → «Копировать код», `/сниппет/` → `/код/`.
4. `qa/functional/07-browser-editor.mjs` — клик по кнопке сохранения.
5. `qa/visual/run-editor.mjs` — массив `SECTIONS` со старыми названиями
   разделов («Фичи», «Лейаут», «Fallback», «In-call ассистент» и т. п.).
6. `qa/ai/browser-widget-assistant.mjs` — проверка `/Ассистент звонка/` пока
   проходит: заголовок виджета не менялся.

## 7. Проверки

| Проверка | Результат |
|---|---|
| `npm run typecheck -w @agil/dashboard` | успешно |
| `npm run typecheck -w @agil/editor` | успешно |
| `npm run typecheck -w @agil/calls-widget` | успешно |
| `npm run typecheck -w @agil/calls-sdk` | успешно |
| `npm run typecheck -w @agil/demo` | успешно |
| `npm run build -w @agil/calls-widget` | успешно |
| `npm run build -w @agil/editor` | успешно |
| `npm run build -w @agil/dashboard` | успешно |
| `npm run build -w @agil/calls-sdk` | успешно |
| `npm run build -w @agil/demo` | успешно |
| `npm test -w @agil/protocol` | 67 тестов, 0 ошибок |

Скриншоты после правок — `qa/linguist/dashboard-*.png`, `editor-main.png`,
`demo-main.png`, `widget-join.png`, `guardify.png` (headless Chrome, локальный
сервер, ключ `dev-key`).

Второй проход (§9) снимался без скриншотов: сборки могли переразвернуться во
время работы. Проверка — typecheck и сборка пяти пакетов плюс текстовый скан
`node qa/linguist-2/scan.mjs apps/dashboard/src packages/widget/src apps/editor/src
apps/demo/src apps/editor/index.html apps/demo/index.html apps/demo/embed.html
apps/demo/guardify.html` (результат — `qa/linguist-2/strings.txt`).

## 8. Рекомендации

1. Вынести все строки панели и редактора в словари, как уже сделано в виджете
   (`packages/widget/src/i18n.ts`): сейчас тексты разбросаны по экранам, и
   любая правка требует поиска по коду.
2. Добавить в CI проверку на жаргон и англицизмы по списку из этого файла
   (`qa/linguist/scan-strings.mjs` — заготовка).
3. Для технических полей показывать человеческое название, а техническое имя —
   в подсказке (`title`) или мелким текстом, как сделано в матрице доступов.
4. Не дублировать английские значения в селектах без перевода: `strict` →
   «Строгий режим (strict)»; в редакторе для этого нужна доработка
   `renderSchema`/`selectField`.
5. Обновить QA-скрипты из §6 вместе с приёмкой, чтобы вернуть зелёные прогоны.
6. Решить вопросы из §4 до публикации: «организация» в договорах, технические
   ключи в подписях, плашка Guardify.

## 9. Второй проход (13.11.2026)

После релиза помощника Agil, экрана «Документация», SaaS-«Организаций»,
типографики дизайн-системы, помощника в редакторе и видео-меню виджета часть
правок первого прохода откатилась: новый код писался от более старой ветки.
Второй проход вернул глоссарий и дочистил новые экраны. Объём — около **135**
строк в **17** файлах; разметка, тест-ids, маршруты и поля API не менялись.

### 9.1 Что нарушалось чаще всего

- **Название модели вместо причины.** «DeepSeek недоступен» ничего не говорит
  администратору и читается как авария. Пишем: «Внешний ИИ недоступен —
  отвечаю встроенными подсказками».
- **«Локальные подсказки»** (и «локальный режим») → **«встроенные подсказки»**:
  тот же смысл, но понятно без контекста.
- **«Роль по экрану»** → «подобрана по разделу», «роль вручную» → «выбрана
  вручную». «Экран» и «роль по нему» — внутренний жаргон.
- **«Память — это фрагменты прошлых чатов…»** → «Помню прошлые чаты в этом
  браузере и нахожу в них нужную тему. Если совпадений нет, ничего не
  придумываю».
- **Старый словарь вернулся в новых файлах**: «тенант» (редактор), «custom-документ»,
  «embed», «конфиг», «wizard», «пресет», «маскот», «кастомная роль»,
  «бэкенд», «деплой», «админка», «битрейт».

### 9.2 Глоссарий: дополнения

| Не писать | Писать | Комментарий |
|---|---|---|
| маскот, mascot | ассистент Agil (в тексте — помощник) | Имя продукта — Agil, не «Аги». Заголовки: «Ассистент Agil и оформление», «Ассистент Agil: настройки». |
| DeepSeek недоступен | Внешний ИИ недоступен — отвечаю встроенными подсказками | Название модели остаётся только в технических документах. |
| локальные подсказки, локальный режим | встроенные подсказки | Режим без внешнего ИИ; на бейдже — «встроенные подсказки». |
| роль по экрану | подобрана по разделу | Роль помощника выбирается по разделу панели. |
| память (чатов) | прошлые чаты | Без слова «память» в основном тексте. |
| custom-документ, custom-doc | свой документ | «Файл станет своим документом». |
| embed, embed URL | встраивание, ссылка для встраивания | «Скопировать ссылку для встраивания». |
| конфиг | конфигурация | «Сохранить конфигурацию», «Открыть конфигурацию». |
| wizard | создание | Заголовок «Создание организации». |
| пресет | шаблон настроек | «Обычный старт», «Строгая безопасность», «Только звонки». |
| кастомная роль | своя роль | Блок «Свои роли», кнопка «Добавить роль». |
| бэкенд, деплой | сервер, обновление сервера | «Появится после обновления сервера». |
| админка | панель управления | В описании контекста звонка. |
| OK / ОШИБКА (проверка TURN) | работает / не отвечает | Статус рядом с латентностью. |
| битрейт | скорость потока | В виджете уже «Скорость потока». |
| — | Сегодня, Вчера | История чатов: «Сегодня, 14:20», «Вчера, 09:05», дальше «12.11, 14:20». |

### 9.3 Изменённые файлы и области

| Файл | Строк | Что исправлено |
|---|---|---|
| `apps/dashboard/src/ui/mascot.ts` | 16 | Режим ИИ, роль помощника, память, приветствие, баннер «внешний ИИ недоступен», «Ассистент Agil» в заголовках, даты в истории чатов |
| `apps/dashboard/src/screens/docs.ts` | 17 | «Тенант» → «Организация», custom-документ → свой документ, технические коды 404/writable=false → человеческие пояснения, «Символов/Версий: N» |
| `apps/dashboard/src/screens/organizations.ts` | 19 | «embed», «конфиг», «Wizard», «Пресет», «Premium-функции», английские подписи цветов, «backend», вместо «N организаций» — «Всего организаций: N» |
| `apps/dashboard/src/screens/settings.ts` | 9 | «маскот» → «ассистент Agil», «бэкенд» → «сервер», кнопка «Сохранить помощника», карточка «Ассистент Agil и оформление» |
| `apps/dashboard/src/screens/integrations.ts` | 5 | «При сбое (fallback)» → «Поведение при сбое», технические подзаголовки карточек, «Работает/Не отвечает», «Событий: N» |
| `apps/dashboard/src/screens/access.ts` | 3 | «кастомная роль» → «своя роль», «цвет бейджа» → «цвет метки», «Участников: N» |
| `apps/dashboard/src/screens/overview.ts` | 1 | «ИИ: локальные подсказки» → «ИИ: встроенные подсказки» |
| `apps/dashboard/src/screens/dialogs.ts` | 1 | «админка» → «панель управления» |
| `apps/dashboard/src/links.ts` | 4 | Названия документов: «внешние сервисы», «несколько серверов», «Планы и задачи» |
| `apps/editor/src/inspector.ts` | 5 | «Сохранить в тенант» → «Сохранить в организации», подсказка панели сохранения |
| `apps/editor/src/mascot.ts` | 20 | Ответы помощника: E2EE, liveness, explorer, guard, invite-ссылка, credentialEnv, capacity, «тенант»; бейдж «встроенный ответ», подвал документации, подписи для скринридера, даты |
| `apps/editor/src/preview.ts` | 15 | Статусы и журнал предпросмотра без `preview:` и `iframe`, «Демо-режим предпросмотра» |
| `apps/editor/src/sections/media.ts` | 3 | «битрейт» → «скорость потока» |
| `packages/widget/src/i18n.ts` | 5 | Согласие на геолокацию, демо-режим, видео-меню («Диагностика видео», «Зеркально отражать своё видео»), «Похоже на VPN» |
| `apps/demo/src/main.ts` | 2 | Плейсхолдер `<токен входа от сервера>`, ошибка виджета без дампа JSON |
| `apps/demo/src/guardify.ts` | 1 | Плейсхолдер `<токен входа от сервера Guardify>` |
| `README.md` | 9 | LLM/endpoint, «панель разработчика», «сниппеты», «knowledge-agent», строка про маскота |

### 9.4 Что осталось непонятным (5 худших)

| Место | Что не так | Предложение |
|---|---|---|
| `apps/dashboard/src/screens/settings.ts:405` | «chat/layout/resume передаются в код как подсказки» — три идентификатора подряд в середине предложения | «Тему задаёт сервер. Код для встраивания получает только подсказки по чату, расположению и сохранению звонка; полная конфигурация приходит с сервера». |
| `apps/dashboard/src/screens/integrations.ts:1637` | CSP `frame-ancestors`, `X-Frame-Options`, `DevTools → Network → Docs` — три технических слоя в одном совете | Оставить «Запрет встраивания настраивается заголовками безопасности сервера», а пути — в `docs/api.md`. |
| `apps/dashboard/src/screens/room.ts:224` | `session.chat.ui = 'hidden'` прямо в пояснении | «Внешний чат: участники переписываются в своём мессенджере, здесь история доступна только для контроля». |
| `apps/editor/src/sections/in-call.ts:155` | Перечень целей `mic, camera, screen, chat, files…` в подсказке | Вынести список в `docs/` или свернуть в «…и другие кнопки интерфейса». |
| `apps/editor/src/sections/providers.ts:303–304` | JSON-контракт `{capability, action, requestId, tenantId, roomId, payload}` и `x-agil-signature` в основном тексте | Оставить одну строку смысла, контракт — в `docs/extensibility.md`. |

### 9.5 QA-селекторы, которые нужно обновить

Это не тесты поведения, а QA-сценарии с точными строками; код и тест-ids не
трогали.

1. `qa/functional/07-browser-editor.mjs` и `qa/editor/tools/editor-audit.mjs`
   ищут кнопку «Сохранить в тенант» — теперь «Сохранить в организации»
   (тест-id `save-tenant` и `save-tenant-dock` не менялись).
2. `qa/visual/audit-mascot.mjs`, `qa/visual/audit-mascot-extra.mjs` ищут карточку
   «Маскот-помощник и брендинг» — теперь она называется «Ассистент Agil и
   оформление».
3. `qa/ux-mascot/qa-v2.mjs` проверяет `/Память/` и подпись роли — обновить
   регулярное выражение на «прошлые чаты».
4. `qa/visual/cache/audit-mascot*.json`, `qa/dashboard/qa-mascot-*.json` —
   снимки со старыми строками, их нужно перегенерировать.

Английский словарь виджета (`en`) не менялся, кроме возвращённого `locationVpn`.
Юридические тексты (согласие на запись, 152-ФЗ, пароли, гео-политика) не
переписывались. Название модели DeepSeek осталось в `docs/dashboard-assistant.md`
и в коде маршрута — это техническая документация, не интерфейс.

### 9.6 Вопросы к продукту

1. Оставлять ли в подсказках технические пути (`/v1/admin/docs`, `PATCH`) или
   убрать их за «Подробнее»? Сейчас это главный источник непонятных строк.
2. «Расширенные функции» вместо «Premium-функции» — согласовать с тарифами:
   если тариф называется Premium, вернём «Premium» как имя тарифа.
3. Нужен ли явный экран «Память помощника» с очисткой? Сейчас память — это
   прошлые чаты в браузере, и пользователь этого не ожидает.
4. Два похожих термина: «встроенные подсказки» (помощник) и «встроенные
   правила проверки» (анализ). Оставляем так или вводим один термин?
5. «Ассистент Agil» в заголовках и «помощник» в тексте — оставляем так или
   переводим всё на «Ассистент Agil»? Сейчас это осознанная пара: имя в
   заголовке, роль в объяснении.
