# Наивный QA: AGIL Calls / Guardify

**Дата:** 13.11.2026, 18:00–18:30 МСК  
**Стенд:** https://calls.guardify.ru/  
**Браузер:** headless Chrome (puppeteer-core), 1440×900 и 390×844, светлая/тёмная тема, fake camera/mic.  
**Роль:** первый раз вижу продукт; исходный код и документацию не читал.

> Это взгляд не разработчика, а человека, которому дали ссылку и сказали «попробуй». Я нажимал всё, что выглядело кнопкой, и записывал, что ожидал увидеть до клика и что получил после. Админ-ключ нигде в отчёте и файлах не сохранён; тестовые комнаты создавал только свои и удалил после проверки.

---

## 1. Главное

**Что это, как я понял:** AGIL Calls — это white-label/встраиваемый сервис видеозвонков для корпоративных продуктов. Его можно встроить кнопкой/iframe в чужой сайт, а через админ-панель настроить комнаты, роли, безопасность, аудит, записи и внешний вид. Guardify — демонстрация того, как тот же виджет выглядит под брендом заказчика. Это не «Zoom для всех», а инфраструктура для компаний и интеграторов.

**Три поверхности:**

1. Публичный лендинг + виджет: создать комнату, войти, посмотреть, как встроить.
2. Панель (`/dashboard/`): тенант, комнаты, безопасность, аудит, доступы, интеграции, база знаний, записи, настройки.
3. Редактор (`/editor/`): визуальная настройка темы/лейаута/фич и сохранение конфига в тенант.

**Три критичных блокера:**

- при нажатии «Открыть в новой вкладке» в звонке появляется ложная ошибка «Всплывающее окно заблокировано» и в тосте печатается **полный JWT-токен**;
- после создания комнаты с паролем модалка показывает бейдж «Пароль», но **не показывает сам пароль**, а сервер хранит только scrypt-хэш — пароль не восстановить;
- на мобильном dashboard кнопки управления комнатой находятся **за правым краем экрана** (x ≈ 819–979 при ширине 390), без внятного горизонтального скролла.

**Самое большое несоответствие ожиданию:** продукт продаётся как «готовые защищённые видеозвонки для сотрудников», но интерфейс почти везде ведёт себя как **пульт разработчика-интегратора**: SDK-код, `scrypt`, `TTL`, `roleId`, `baseRole`, `HMAC`, `CSP`, `postMessage`, `RAG`, `LLM`, `mesh`, `iframe`. Обычный сотрудник не понимает половину подписей, а интегратор — не понимает, где заканчивается демо и начинается продакшен.

---

## 2. Что я думал, что это такое, и как должны работать основные сценарии

### 2.1. Мой сценарий «как должно быть»

1. Захожу на лендинг, вижу два понятных пути: **создать комнату** или **войти в существующую**.
2. Ввожу организацию, комнату, имя, пароль (если есть), нажимаю одну главную кнопку.
3. Проверяю камеру/микрофон на экране подключения, вхожу.
4. В звонке вижу участников, могу включить/выключить микрофон и камеру, открыть чат, записать, включить субтитры.
5. Админ в панели создаёт комнату и отправляет ссылку; видит, кто в звонке, может закрыть комнату, посмотреть записи и события.
6. Дизайнер в редакторе меняет цвет/логотип и сразу видит результат в предпросмотре, потом сохраняет.

### 2.2. Что происходит на самом деле

- Лендинг действительно даёт форму создания/входа, но рядом лежит большой чёрный блок «Звонок» без пустого состояния, а основные действия называются «Открыть виджет» и «Открыть во встроенном окне» — разницу между ними я понял не сразу.
- В звонке есть вообще всё: чат, заметки, транскрипт, ассистент, реакции, фон, PiP, полноэкранный режим, новая вкладка, сворачивание. Но половина кнопок — иконки без подписей, а часть панелей открывается с пустым экраном и без объяснения, что делать.
- Панель выглядит как серьёзная админка, но 70% текста — техническая документация. Я не понимал, что можно безопасно нажать, а что изменит тенант.
- Редактор — это не «визуальный редактор» в бытовом смысле, а три колонки: дерево настроек, живой iframe и JSON-конфиг. Сохранение спрятано в отдельной прокрутке справа.

---

## 3. Как я проверял и чего не делал

- Прошёл лендинг, Guardify-демо, экран входа, звонок, все панели звонка, сворачивание/восстановление, полный экран, новую вкладку, PiP, демонстрацию экрана, светлую/тёмную тему, 390 и 1440.
- В панели: вход, обзор, комнаты (создание, поиск, приглашение, копирование ссылки, закрытие, удаление), безопасность, аудит, доступы, интеграции, база знаний, записи, настройки, помощник «Аги».
- В редакторе: все 16 разделов левого меню, превью, смена темы, сохранение (до формы), мобильная ширина.
- Не нажимал «Сохранить политику», «Сохранить настройки», «Сохранить брендинг», «Сохранить в тенант», «Выдать токен», «Сохранить endpoint», чтобы не менять конфиг стенда. Оценивал эти controls по форме, тексту и поведению соседних элементов.
- Создавал только свои комнаты (`QA naive действия`, `QA проверка пароля`, `QA проверка вкладки`, `QA проверка закрытия`), после проверки удалил. 12 seed-комнат не трогал.

### Ограничения и важное наблюдение о стенде

- Камера/микрофон в headless-браузере фейковые, поэтому «Запрашиваем доступ к камере…» и зелёный тестовый прямоугольник — это не оценка реального видео, а поведение UI до/после получения медиа.
- PiP и полноэкранный режим зависят от браузера/окружения; я отмечаю только то, что видел, и не выдаю это за гарантированный баг Chrome.
- Во время сессии, примерно в 18:12, панель один раз ответила **HTTP 502**, сервер перезапустился, uptime сбросился, количество комнат изменилось (12 → 0 → 3 → 15). После этого поменялись некоторые подписи (например, `Demo` → `Демо-звонок`, `Настройки и Embed` → `Настройки и встраивание`). Поэтому на скриншотах разные данные и иногда разные формулировки. Это не я менял данные; это поведение стенда. Если перезапуск не был намеренным деплоем — это отдельный P0 по надёжности.

---

## 4. P0 — блокирует реальное использование

### P0-1. Полный JWT-токен выводится в тост, ломает вёрстку и врёт об ошибке

**Что я ожидал:** нажимаю «Открыть в новой вкладке» — открывается вторая вкладка с этим же звонком, в текущей вкладке ничего не меняется.  
**Что получил:** вкладка действительно открылась, но в текущем звонке появился оранжевый тост во всю ширину:

> «Всплывающее окно заблокировано. Скопируйте ссылку: https://calls.guardify.ru/embed.html?...&token=…»

Токен — длинная неразрывная строка, она не переносится, вылезает за оба края экрана и обрезается. При этом всплывающее окно **не было заблокировано** — новая вкладка открылась. То же самое повторилось после нажатия «Демонстрация экрана» в свёрнутом окне.

**Воспроизведение:**

1. Войти в любую комнату под именем.
2. В нижней панели нажать иконку «Открыть в новой вкладке» (квадрат со стрелкой, 11-я слева).
3. Через 1–2 секунды посмотреть на верхнюю часть страницы.

**Скриншоты:** [current_newtab_after_1440.png](qa/naive/screens/current_newtab_after_1440.png) (токен скрыт при публикации), [callclean_before_share_1440.png](qa/naive/screens/callclean_before_share_1440.png), [callclean_share_clean_1440.png](qa/naive/screens/callclean_share_clean_1440.png), [callmode_screenshare_after_1440.png](qa/naive/screens/callmode_screenshare_after_1440.png).

**Почему P0:** это утечка учётных данных в UI (пусть и короткоживущего токена), ложное сообщение об ошибке и грубое разрушение вёрстки. Пользователь может скопировать/переслать эту строку, не понимая, что это секрет. Даже если токен живёт час, в этот час комната доступна тому, кто увидел ссылку.

**Что должно быть:** никаких URL/токенов в тостах. При блокировке popup — нейтральное «Разрешите всплывающие окна и попробуйте ещё раз» с кнопкой «Повторить», без ссылки. Открытие новой вкладки не должно показывать ошибку, если оно удалось.

---

### P0-2. Пароль комнаты создаётся, но нигде не показывается; восстановить нельзя

**Что я ожидал:** создаю комнату с паролем, вижу сгенерированный пароль, могу скопировать его и передать участникам.  
**Что получил:** после создания модалка показывает жёлтый бейдж «Пароль», но самого пароля нет — ни поля, ни кнопки «Показать», ни «Скопировать». В копии написано: «Сервер хранит только scrypt-хэш; пароль не возвращается через API». То есть если я нажал «Сгенерировать» и не запомнил строку до отправки, комната навсегда останется с паролем, которого я не знаю.

**Воспроизведение:**

1. Войти в панель → «Комнаты» → «Создать комнату».
2. Ввести название, нажать «Сгенерировать» у поля пароля (или ввести свой).
3. Нажать «Создать комнату».
4. Посмотреть на модалку «Комната … создана»: есть бейдж «Пароль», но нет значения.

**Скриншоты:** [current_password_created_modal_1440.png](qa/naive/screens/current_password_created_modal_1440.png), [dash_room_created_invite_1440.png](qa/naive/screens/dash_room_created_invite_1440.png), [dash_room_create_modal_1440.png](qa/naive/screens/dash_room_create_modal_1440.png).

**Почему P0:** это не косметика, а потеря доступа к собственной комнате. Особенно обидно, что кнопка «Сгенерировать» явно предлагает довериться системе.

**Что должно быть:** после создания — одноразовый показ пароля крупно, с кнопками «Скопировать» и «Сгенерировать заново», плюс предупреждение «Пароль нельзя восстановить». Либо возможность задать новый пароль позже.

---

### P0-3. На мобильной панели действия комнат физически за экраном

**Что я ожидал:** на телефоне строка комнаты — это карточка, где есть понятное меню действий.  
**Что получил:** таблица остаётся таблицей. При ширине 390px видны только «КОМНАТА» и «ТИП»; все шесть кнопок действий находятся на x ≈ 819–979, то есть далеко за правым краем. Горизонтальный скролл внутри таблицы, если он и есть, никак не обозначен: ни полосы, ни подсказки, ни «потяните влево». Я бы решил, что действий в мобильной версии нет.

**Воспроизведение:**

1. Войти в панель.
2. Сузить окно до 390px.
3. Открыть «Комнаты».
4. Попробовать найти «Удалить», «Закрыть», «Приглашение» — их не видно.

**Скриншоты:** [mobile_dash_rooms_390.png](qa/naive/screens/mobile_dash_rooms_390.png), [mobile_dash_overview_390.png](qa/naive/screens/mobile_dash_overview_390.png).

**Почему P0:** на телефоне нельзя управлять комнатами — а мобильный сценарий для «отправить ссылку/закрыть комнату» вполне реален.

**Что должно быть:** на < 720px таблица превращается в карточки; действия — в видимое меню «…» внутри карточки, а не в 6 иконок за горизонтом.

---

## 5. P1 — путает, подрывает доверие, мешает работать

### 5.1. «Подключение…» не заканчивается никогда

В каждом звонке сверху висит оранжевый статус «Подключение…»: и через 5, и через 15 секунд, при «Участников: 1», работающем таймере, зелёной точке и работающих кнопках. В настройках при этом написано «Сервер: Подключено», «Качество: 100/100 · Хорошее соединение». Три индикатора говорят разное.

**Где:** [call_joined_1440.png](qa/naive/screens/call_joined_1440.png), [callpanel2_settings_1440.png](qa/naive/screens/callpanel2_settings_1440.png), [mobile_joined_390.png](qa/naive/screens/mobile_joined_390.png).  
**Ожидал:** «Подключено» через 1–2 секунды. **Получил:** вечное «Подключение…» и ощущение, что связь вот-вот упадёт.

### 5.2. Главный блок лендинга — пустая чёрная дыра 640px

На главной есть секция «Звонок» с чёрным прямоугольником высотой около 640px. Внутри — ничего: ни пустого состояния, ни объяснения «выберите комнату и нажмите „Открыть виджет“», ни скелетона. Просто чёрная область с кнопкой «Закрыть виджет» в углу. На мобильном она занимает почти пол-экрана.

**Скриншоты:** [pub_current_landing_1440.png](qa/naive/screens/pub_current_landing_1440.png), [pub_current_landing_390.png](qa/naive/screens/pub_current_landing_390.png).  
**Ожидал:** либо превью звонка, либо аккуратный empty state. **Получил:** ощущение сломанной страницы.

### 5.3. «Заметки» — это не заметки, а AI-комплаенс; «Ассистент» — не ассистент встречи

- Открываю «Заметки» — жду поле для ручных заметок или список заметок. Вижу «КОМПЛАЕНС 0», «Нарушений не найдено» и подпись внизу «Заметки появятся после распознавания речи и анализа». Ввода нет. Это не заметки, а автоматический комплаенс-отчёт.
- Открываю «Ассистент звонка» — жду чат/историю/вопросы по встрече. Вижу пустую панель с подсказками «включи запись», «открой чат», «где микрофон?». То есть это не помощник по содержанию звонка, а командный пульт. При этом кнопка называется «Спросить», а textarea — «Спросите…».
- «Транскрипт» не показывает, включён ли STT, кто говорит, есть ли запись; просто «Речь ещё не распознана» и иконка скачивания.

**Скриншоты:** [callpanel_notes_1440.png](qa/naive/screens/callpanel_notes_1440.png), [callpanel_transcript_1440.png](qa/naive/screens/callpanel_transcript_1440.png), [callpanel_assistant_1440.png](qa/naive/screens/callpanel_assistant_1440.png), [now_knowledge_1440.png](qa/naive/screens/now_knowledge_1440.png).

**Почему P1:** пользователь не понимает, где хранятся его заметки, кто их видит и можно ли что-то записать руками. Названия обещают одно, содержимое — другое.

### 5.4. Плавающий «Аги» перекрывает элементы на каждой странице

На dashboard в правом нижнем углу сидит кнопка-маскот «Аги» (88×94 на десктопе, 62×62 на мобильном). Она **не перекрывает пустое место**, а ложится на контент:

- на «Комнатах» закрывает строку и иконки действий;
- на «Доступах» — чекбокс «Пиннить конкретный список прав…» и часть формы выдачи токена;
- на «Настройках» — поле «Свой URL изображения»;
- на «Базе знаний» — текст пустого состояния;
- на «Интеграциях» — правую колонку ссылок;
- на мобильном — карточку «События безопасности» и нижние строки таблицы.

Когда панель ассистента открыта, **старая кнопка-маскот остаётся за панелью**: в правом нижнем углу виден обрезанный второй аватар.

**Скриншоты:** [light_rooms_view_1440.png](qa/naive/screens/light_rooms_view_1440.png), [act_access_initial_1440.png](qa/naive/screens/act_access_initial_1440.png), [now_settings_1440.png](qa/naive/screens/now_settings_1440.png), [mobile_dash_overview_390.png](qa/naive/screens/mobile_dash_overview_390.png), [dash_assistant_open_1440.png](qa/naive/screens/dash_assistant_open_1440.png).

**Что должно быть:** либо маскот живёт в reserved gutter и не перекрывает контент, либо сворачивается в точку при открытии панели, либо отключается на мобильном.

### 5.5. «Закрыть комнату» срабатывает сразу, без подтверждения; «Удалить» — с подтверждением

В строке комнаты две соседние иконки: замок («Закрыть комнату») и корзина («Удалить комнату»). Удаление спрашивает «Удалить комнату? … Действие необратимо» и показывает красную кнопку. Закрытие **не спрашивает ничего**: после клика сразу появляется тост «Комната закрыта», участники отключаются. При этом «закрыть» — тоже разрушительное действие: комната становится «Закрыта», вход блокируется.

**Воспроизведение:** комнаты → строка своей комнаты → иконка замка. Диалога нет, сразу «Комната закрыта».  
**Скриншоты:** [current_room_closed_no_confirm_1440.png](qa/naive/screens/current_room_closed_no_confirm_1440.png), [roomact_delete_confirm_1440.png](qa/naive/screens/roomact_delete_confirm_1440.png).  
**Почему P1:** необратимое действие без подтверждения + непоследовательность с удалением. Я бы ожидал хотя бы «Закрыть комнату? Участники будут отключены».

### 5.6. Шесть одинаковых серых иконок 28×28 вместо действий

В каждой строке комнаты шесть кнопок: копировать join, копировать embed, открыть в demo, приглашение, закрыть, удалить. Все — тонкие серые иконки одного размера, без текста. Отличить «скопировать ссылку» от «создать приглашение» можно только по tooltip или по памяти. На 1440 они ещё и мелкие; на мобильном вообще за экраном.

**Скриншоты:** [dash_rooms_1440.png](qa/naive/screens/dash_rooms_1440.png), [light_rooms_view_1440.png](qa/naive/screens/light_rooms_view_1440.png).  
**Ожидал:** меню «…» с подписями или хотя бы разные цвета/иконки. **Получил:** угадай-игру.

### 5.7. Продукт разговаривает на языке разработчика

Примеры, которые я встретил на обычных экранах:

- `scrypt-хэш`, `TTL после последнего выхода`, `media: mesh`, `per-room mediaMode`, `GET /v1/admin/scale`;
- `roleId`, `baseRole`, `userId (для overrides)`, `permissions claim`, `verified claim`, `HS256`, `JWKS URL`;
- `HMAC-SHA256`, `x-agil-signature`, `CSP frame-ancestors`, `postMessage`, `agilaction/agilconfig`;
- `RAG`, `LLM`, `HMAC-endpoint`, `builtin/external/hybrid`;
- `iframe`, `embed`, `OpenAPI`, `SDK`, `MCP`, `WebRTC`, `STT`;
- `auto`, `grid`, `spotlight`, `sidebar`, `corner`, `pip`, `bottom center` — прямо в выпадающих списках «визуального редактора».

Русский пользователь не обязан знать, что такое `baseRole` или `frame-ancestors`. Если аудитория — интеграторы, это нормально, но тогда и лендинг должен быть для интеграторов, без «для корпоративных клиентов» и «сотрудники созваниваются».

**Скриншоты:** [dash_room_create_modal_1440.png](qa/naive/screens/dash_room_create_modal_1440.png), [act_access_initial_1440.png](qa/naive/screens/act_access_initial_1440.png), [dash_integrations_1440.png](qa/naive/screens/dash_integrations_1440.png), [editor_Лейаут_1440.png](qa/naive/screens/editor_Лейаут_1440.png), [now_settings_1440.png](qa/naive/screens/now_settings_1440.png).

### 5.8. В редакторе не видно, где сохранять; левая ссылка «К настройкам» вообще за экраном

На десктопе страница редактора — это три независимые прокручиваемые колонки высотой 900px:

- левая: 1718px контента при видимых 487px;
- правая: 1562px контента при видимых 810px;
- JSON-поле: 11 026px контента внутри 208px.

При этом вся страница `body` — ровно 900px, внешнего скролла нет. Кнопка «Сохранить в тенант» находится ниже сгиба в правой колонке; её не видно, пока не начнёшь скроллить именно правую панель. Я потратил заметное время, чтобы понять, как сохранить изменения. Ссылка «К настройкам» в DOM находится на `y = -60` — то есть **над видимой областью**, её нет ни на одном скриншоте.

**Скриншоты:** [editor_initial_view_1440.png](qa/naive/screens/editor_initial_view_1440.png), [editor_right_save_1440.png](qa/naive/screens/editor_right_save_1440.png).  
**Ожидал:** заметную кнопку «Сохранить» в шапке или закреплённую панель. **Получил:** квест «найди скролл».

### 5.9. Переключение темы в редакторе делает превью нечитаемым

В предпросмотре редактора переключаю схему на «Светлая (light)». Фон iframe становится светлым, но текст внутри виджета остаётся белым: «Подключение к комнате», «Проверьте камеру…», «Ваше имя» почти исчезают, кнопка «Войти в звонок» становится тёмно-синей на синем. Это не просто «некрасиво» — это провал главной функции редактора: я меняю тему и не могу оценить результат, потому что результат нечитаем.

**Скриншоты:** [editor_theme_light_preview_1440.png](qa/naive/screens/editor_theme_light_preview_1440.png), [callpanel2_theme_after_1440.png](qa/naive/screens/callpanel2_theme_after_1440.png) (похожая проблема с именем участника на видео).

### 5.10. Мобильные панель и редактор — это десктоп, сжатый до 390px

- Dashboard: таблица комнат уезжает вправо; ассистент перекрывает карточки; заголовок «Обзор» дублируется; в шапке остаются только иконки темы и выхода, без названия организации.
- Редактор: `scrollHeight = 4923px`, 16 разделов меню идут одним столбцом, превью появляется только около `y ≈ 2700`, сохранение — около `y ≈ 4347`. Я не могу одновременно видеть настройку и результат. Это уже не «визуальный редактор».
- В звонке на 390px верхняя панель теряет имя комнаты, таймер и счётчик участников; остаются только бренд и «Подключение…». 14 кнопок управления переносятся в три ряда, «Выйти» уезжает в отдельный ряд.

**Скриншоты:** [mobile_dash_overview_390.png](qa/naive/screens/mobile_dash_overview_390.png), [mobile_dash_rooms_390.png](qa/naive/screens/mobile_dash_rooms_390.png), [editor_mobile_390.png](qa/naive/screens/editor_mobile_390.png), [mobile_joined_390.png](qa/naive/screens/mobile_joined_390.png), [mobile_chat_390.png](qa/naive/screens/mobile_chat_390.png).

### 5.11. «Проверить» в базе знаний — тихий no-op

На странице «Ассистент по базе знаний» заполнен вопрос, справа есть кнопка «Проверить». Нажимаю — ничего: ни загрузки, ни ошибки, ни изменения пустого состояния «Проверка ещё не запускалась». Через 12 секунд то же самое. При этом endpoint не задан — логично было бы сказать «Сначала укажите endpoint» или «Агент не настроен». Вместо этого кнопка выглядит живой, но не делает ничего.

**Скриншоты:** [now_knowledge_1440.png](qa/naive/screens/now_knowledge_1440.png), [now_knowledge_error_1440.png](qa/naive/screens/now_knowledge_error_1440.png).

### 5.12. Ответ «Аги» — сырой Markdown с обрезанным началом и ссылками на файлы

Я спросил «Что умеет AGIL Calls?». Ответ начался с середины (верхняя часть ушла под шапку панели), содержал `**Интеграции**`, `“**Масштабирование**”`, обратные кавычки и пути `/docs/api-guide.md`, `/docs/scaling.md`. Это не ответ для первого пользователя, а кусок технической документации. В шапке панели при этом был пустой серый круг вместо аватара. Подсказки-чипы «С чего начать? / Как выдать доступ участнику? / Что я заметил?» повторяются дважды.

**Скриншот:** [dash_assistant_reply_1440.png](qa/naive/screens/dash_assistant_reply_1440.png).

### 5.13. Свёрнутый звонок — не «bubble», а тесная мини-панель с дублем

После «Свернуть звонок» весь экран становится пустым, а в правом нижнем углу появляется окно ~379×319. Внутри — видео, две строки по 7–6 кнопок 40×40, плюс отдельная кнопка «Развернуть звонок» 34×34 в углу видео. «Развернуть звонок» есть **дважды**. Если из свёрнутого состояния нажать «На весь экран», видео остаётся маленьким, а вокруг — чёрная пустота.

**Скриншоты:** [callclean_minimized_1440.png](qa/naive/screens/callclean_minimized_1440.png), [callmode_fullscreen_1440.png](qa/naive/screens/callmode_fullscreen_1440.png).

### 5.14. «Свернуть окно» в Guardify не сворачивает, а «Начать звонок» клинит заголовок

На `guardify.html` кнопка «Свернуть окно» под виджетом не изменила вид: виджет остался на месте, кнопка осталась. После клика «Начать звонок» страница прокрутилась всего на 139px, и фиксированная шапка накрыла первую строку заголовка «Защищённые видеозвонки…» — верх обрезан. Это мелочь, но она усиливает ощущение «демо-заглушка».

**Скриншоты:** [pub_guardify_1440.png](qa/naive/screens/pub_guardify_1440.png), [pub_guardify_start_1440.png](qa/naive/screens/pub_guardify_start_1440.png), [pub_guardify_minimized_1440.png](qa/naive/screens/pub_guardify_minimized_1440.png).

---

## 6. P2 — заметные несоответствия и визуальный шум

### 6.1. Словарь поехал: одно и то же называется по-разному

| Понятие | Варианты в интерфейсе |
|---|---|
| Арендатор | `тенант`, `организация`, `tenant`, `tenantId` |
| Пробный/публичный | `Demo`, `Демо`, `демо`, `demo`, `Демо-звонок` |
| ИИ | `AI`, `ИИ`, `AI-агент`, `ИИ-агент` |
| База знаний | `Knowledge-агент`, `Ассистент по базе знаний` |
| Встраивание | `Embed`, `встраивание`, `встроенное окно`, `iframe` |
| Роли | `host`, `guest`, `moderator`, `Ведущий`, `Гость`, `Модератор`, `Организатор` |
| API-документация | `API docs`, `Документация API`, `API guide`, `Руководство интегратора`, `API.md`, `Справочник API` |
| Уровни аудита | `warn`, `critical`, `info` и русские подписи в скобках |
| Тема | `Схема темы`, `Тема`, `Шаблон темы`, `auto` |

Это не просто стилистика: в одном селекте роли — `guest`, в карточке — «Гость», в тосте — «Организатор». В одном месте «Настройки и Embed», в другом «Настройки и встраивание». После перезагрузки часть подписей менялась с английских на русские — я сначала решил, что попал в другую версию.

**Скриншоты:** [act_access_initial_1440.png](qa/naive/screens/act_access_initial_1440.png), [now_settings_1440.png](qa/naive/screens/now_settings_1440.png), [light_overview_view_1440.png](qa/naive/screens/light_overview_view_1440.png), [pub_current_landing_1440.png](qa/naive/screens/pub_current_landing_1440.png).

### 6.2. Таблицы «рваные»: строки разной высоты из-за UUID и переносов

В «Аудитах» сообщения переносятся на 2–3 строки, UUID комнаты — на две; строки скачут по высоте. В «Записях» UUID комнаты всегда занимает две строки, поэтому каждая строка таблицы высокая, а колонка «Транскрипт» — сплошные «НЕТ» в крошечных капсулах. В «Комнатах» имя + UUID + `seed-chat · group-9` — три строки разного кегля. Глазу не за что зацепиться.

**Скриншоты:** [dash_audit_1440.png](qa/naive/screens/dash_audit_1440.png), [dash_recordings_1440.png](qa/naive/screens/dash_recordings_1440.png), [dash_rooms_1440.png](qa/naive/screens/dash_rooms_1440.png).

### 6.3. Огромные простыни и пустые зоны

- «Безопасность» — 4076px: левая колонка заканчивается примерно на 2350px, правая продолжается до 4000px; слева огромная пустота.
- «Интеграции» — 4577px.
- «Настройки» — 3400px.
- «Аудит» — 3563px, 50 строк на страницу.
- «Доступы» — 3888px, матрица из 43 функций.

Это не «подробно», это «я не знаю, где закончится страница». Нет оглавления, sticky-навигации, collapse-секций.

**Скриншоты:** [dash_security_1440.png](qa/naive/screens/dash_security_1440.png), [dash_integrations_1440.png](qa/naive/screens/dash_integrations_1440.png), [dash_settings_1440.png](qa/naive/screens/dash_settings_1440.png), [dash_access_1440.png](qa/naive/screens/dash_access_1440.png).

### 6.4. Мобильный лендинг: шапка на 230px и три уровня навигации

На 390px шапка занимает почти треть первого экрана:

1. логотип;
2. зелёный статус сервера;
3. «Тема» + селект;
4. «Шаблон темы» + селект (подпись переносится на две строки);
5. две строки ссылок: «Демо в стиле Guardify / Редактор темы / Панель» и «Документация API / Спецификация OpenAPI».

Нет бургера, нет приоритета. Пользователь ещё не увидел продукт, а уже пролистал пол-экрана служебных ссылок.

**Скриншот:** [pub_current_landing_390.png](qa/naive/screens/pub_current_landing_390.png).

### 6.5. Верхняя панель звонка дублирует название комнаты и бренд

Слева: логотип `AGIL Calls`, справа от него крупно `qa-naive-323375`, а под брендом — ещё раз `qa-naive-323375` мелким. Плюс `mesh`, `Участников: 1`, `Подключение…`, зелёная точка, аватар, заметки, транскрипт, кнопка `AGIL Calls` (у неё `aria-label="Audit"`, но текст «AGIL Calls»), копирование, тема. Всё в одну строку, без группировки. Кнопка `AGIL Calls` выглядит как бренд, а не как действие; я не понял, что она делает, и при клике визуально ничего не произошло.

**Скриншот:** [call_joined_1440.png](qa/naive/screens/call_joined_1440.png).

### 6.6. Нижняя панель не центрируется относительно видео при открытой боковой панели

Когда открыта панель участников/чата (370px), видео сжимается до 1070px и центрируется в остатке, но панель управления остаётся отцентрирована по всему окну 1440px. В результате кнопки «Настройки» и «Выйти» оказываются под правой панелью, а визуальный центр управления не совпадает с центром видео.

**Скриншот:** [callpanel_participants_1440.png](qa/naive/screens/callpanel_participants_1440.png).

### 6.7. Светлая тема звонка убивает читаемость имени на видео

После переключения темы на светлую нижняя плашка с именем участника остаётся чёрным текстом на зелёном видео; на реальном светлом видео это будет так же плохо. Тема меняется без меню и без подтверждения, просто по клику на иконку, а подпись/подсказка не говорит, какая схема сейчас.

**Скриншоты:** [callpanel2_theme_after_1440.png](qa/naive/screens/callpanel2_theme_after_1440.png), [callpanel2_copy_toast_1440.png](qa/naive/screens/callpanel2_copy_toast_1440.png).

### 6.8. Сквозные мелкие несостыковки

- Кнопки разных высот в одном интерфейсе: 28 (иконки комнат), 30 (тема/обновить), 34 (сохранить), 38 (основные), 42 (лендинг), 48 (звонок). В мини-окне — 40 и 34 одновременно.
- Дублируются заголовки: «Обзор» в шапке и «Обзор» в контенте; «Комнаты» дважды; «Ассистент по базе знаний» дважды.
- Дублируются тосты: после создания комнаты в DOM одновременно «Комната … создана» и второй такой же; после закрытия — «Комната … создана» + «Комната закрыта», они висят друг над другом и перекрывают таблицу.
- «Сообщение...» с тремя точками, «Подключение…» с символом многоточия, «Загрузка...» — разные стандарты.
- «1:1» в синем пилюле, «группа» — строчными в сером; «Группа» в других местах с заглавной.
- Пилюля «гость» высотой ~20px, бейдж роли «host» ~24px, бейдж «Пароль» ~24px — все в одном визуальном слое, но разные.
- Эмодзи-реакции — нативные, 20px, с разной оптической массой; рядом с 16px-иконками выглядят как стикеры из другого приложения.
- В шапке лендинга «Тема» и «Шаблон темы» стоят рядом, но это разные сущности; в мобильной версии подпись «Шаблон темы» переносится на две строки, а селект уезжает вниз.
- Иконка «Выйти» в звонке шире остальных (59×48 против 48×48), из-за чего ряд выглядит рваным.

**Скриншоты:** [current_room_closed_no_confirm_1440.png](qa/naive/screens/current_room_closed_no_confirm_1440.png), [mobile_joined_390.png](qa/naive/screens/mobile_joined_390.png), [pub_current_landing_390.png](qa/naive/screens/pub_current_landing_390.png).

---

## 7. P3 — полировка, которую видно, если приглядеться

- В панели «Комнаты» заголовки колонок (`КОМНАТА`, `УЧАСТНИКИ`, `ПАРОЛЬ`, `ЗАМОК`, `АКТИВНОСТЬ`) набраны капсом 11px, а данные — 13–14px; из-за разного трекинга колонки визуально «пляшут».
- В «Записях» колонка «Действия» прижата к правому краю, иконки скачивания/удаления меньше, чем отступы вокруг них; на 1440 они выглядят случайно брошенными.
- В «Аудитах» колонка «Сообщение» — самая широкая, но текст в ней всё равно ломается на 3 строки; UUID в «Комнате» не сокращается.
- В «Доступах» чекбоксы матрицы 16px, подписи 11px, между строками 38px — на 43 строки это тяжёлая простыня; чекбоксы в колонках `HOST/MODERATOR/GUEST` не выровнены по одной оси с заголовками.
- В редакторе активный пункт «Бренд» подсвечен голубым, а «Тема» — тоже голубым, хотя обе кнопки в одном меню; активное состояние считывается только по фону.
- В редакторе подпись «Масштабирован...» обрезана на 147px; «In-call ассистент» — единственный пункт с английским `In-call` среди русских.
- В шапке редактора ссылки `Документация API`, `Спецификация OpenAPI`, `Руководство интегратора`, `Справочник API` занимают больше половины ширины; рядом с ними «черновик · 18:18» и «организация: demo» — три разных статуса без группировки.
- В iframe-превью настроек высота 260px: заголовок «Подключение к комнате» и поле имени обрезаются, кнопки входа не видно. «Проверить iframe» показывает не полноценный виджет, а верхнюю треть.
- В модалке создания комнаты поле «Пароль» шириной 116px и кнопка «Сгенерировать» 132px стоят вплотную, а соседнее поле «Максимум участников» — 254px; сетка выглядит перекошенной.
- В модалке создания комнаты заранее подставлено «Тестовая комната» — если нажать «Создать» не думая, появится ещё одна комната-клон.
- На странице «Настройки» два почти одинаковых действия: «Сохранить и проверить» в блоке подключения и «Проверить подключение» в правом верхнем углу.
- «Тема» и «Язык» в настройках звонка: заголовок «Язык», под ним ещё раз «Язык»; «Тема» — ещё один селект.
- «Сила размытия» — слайдер активен, даже когда выбран фон «Выключен».
- В звонке «Закрепить» — иконка 28×28, появляется только при наведении, без подписи; не понятно, что закрепляется — плитка, панель или участник.
- «AGIL Calls» в верхней панели звонка — кнопка с `aria-label="Audit"`, но текст «AGIL Calls». Смысл не считывается.

---

## 8. Постраничные заметки: что я думал и что получил

### 8.1. Лендинг `/`

**Думал:** это витрина: заголовок, кнопка «Запустить звонок», форма и живой виджет.  
**Получил:** заголовок и форма есть, но «Запустить звонок» — не кнопка, а заголовок карточки. Главный CTA — «Открыть виджет», хотя рядом есть «Создать комнату» и «Открыть во встроенном окне». Я не понял, что первично.

**Что понравилось:** тёмная палитра, крупная типографика, аккуратные поля, понятная подсказка про анонимное создание на dev-сервере.  
**Что раздражает:** чёрный пустой «Звонок» на 640px; код в «Как встроить» обрезается по горизонтали; «Тенант» заменился на «Организацию», но в коде всё равно `tenantId`; на мобильном шапка на 230px.

**Где бы сдался:** если бы пришёл как сотрудник — на пустом чёрном блоке. Если бы пришёл как интегратор — на непонятной разнице «Открыть виджет» / «Открыть во встроенном окне».

### 8.2. Guardify `/guardify.html`

**Думал:** это пример «как будет выглядеть ваш бренд».  
**Получил:** действительно красивый брендированный экран: фиолетовый, Inter, моноширинный логотип, аккуратные карточки. Но на странице **два независимых входа в звонок**: один внутри «Защищённого звонка» (имя → «Войти в звонок»), второй — в блоке «Создать или войти в звонок» (сервер, комната, имя → «Создать комнату»/«Войти в звонок»). Какой из них настоящий? Куда денется токен? Почему в первом нет поля пароля, а во втором есть?

**Что понравилось:** визуально самый премиальный экран продукта; хорошая идея с «островом» управления и скрытым чатом.  
**Что раздражает:** «Запрашиваем доступ к камере…» висит вечно; «Свернуть окно» не сворачивает; «Начать звонок» прокручивает под шапку; тексты про «scrypt», «join/chat/security», «STT» — для кого это?

### 8.3. Экран входа `/embed.html?room=…`

**Думал:** проверю камеру, введу имя, войду.  
**Получил:** карточка по центру на пустом тёмном фоне. Слева — превью 450×229, в нём «Запрашиваем доступ к камере…» и перечёркнутая камера; снизу две круглые кнопки микрофона/камеры. Справа — имя, «Войти в звонок», «Только слушать», URL, горячие клавиши. Для комнаты с паролем после первой попытки появляется поле «Пароль комнаты» и сообщение «Комната защищена паролем» — это работает.

**Что понравилось:** парольный сценарий, «Только слушать», горячие клавиши.  
**Что раздражает:** «Запрашиваем доступ…» не меняется на «камера недоступна»/«разрешите доступ»; нет ссылки «повторить»; на мобильном блок с горячими клавишами бесполезен и занимает место; URL комнаты переносится посреди UUID.

**Скриншоты:** [call_prejoin_1440.png](qa/naive/screens/call_prejoin_1440.png), [mobile_prejoin_390.png](qa/naive/screens/mobile_prejoin_390.png), [password_no_password_1440.png](qa/naive/screens/password_no_password_1440.png).

### 8.4. Звонок, десктоп

**Думал:** увижу сетку участников и понятную панель управления.  
**Получил:** одно большое видео 928×522 по центру, огромные чёрные поля вокруг, панель из 14 иконок внизу. Верхняя панель перегружена. «Подключение…» не проходит. При открытии боковой панели видео сжимается, но нижняя панель остаётся по центру страницы.

**Что понравилось:** видео крупное, скругления, тёмная тема, аккуратные панели, понятные иконки микрофона/камеры, «Только слушать» на входе.  
**Что раздражает:** 14 иконок без подписей; «mesh»; дубль имени комнаты; вечное «Подключение…»; «AGIL Calls» как кнопка; отсутствие индикатора «вы в эфире»/«запись идёт» — только маленькие точки.

**Скриншоты:** [call_joined_1440.png](qa/naive/screens/call_joined_1440.png), [callclean_initial_1440.png](qa/naive/screens/callclean_initial_1440.png).

### 8.5. Панели звонка

- **Чат.** Пустое состояние «Сообщений пока нет. Напишите первым!» — хорошее. Поле ввода, скрепка, отправка. Панель 370px, пустоты много, но это нормально для чата. Активная кнопка чата подсвечена.
- **Участники.** Список из одного человека, аватар «QН», имя «(Вы)», роль «гость». Нет кнопки «пригласить», нет действий с участником (даже для хоста), нет сортировки.
- **Заметки.** См. 5.3. Огромная пустая панель, внизу мелкий текст.
- **Транскрипт.** Огромная пустая панель, внизу «Речь ещё не распознана», сверху иконка скачивания. Непонятно, включён ли STT и почему он молчит.
- **Настройки.** Устройства, фон, язык, тема, диагностика. Полезно, но «Качество 100/100» рядом с «Подключение…» и «Битрейт 0 kbps» — противоречиво. «Сила размытия» активна при выключенном фоне. «Язык» повторяется.
- **Ассистент.** См. 5.3. Пустая панель, подсказки внизу, нет истории.
- **Реакции.** Всплывающая белая капсула с 6 эмодзи над панелью. Работает, но эмодзи разного размера/стиля, нет подписи, попап не закрывается после выбора.
- **Копировать ссылку.** Тост «Скопировано» появляется сверху справа, не мешает. Хорошо.

**Скриншоты:** [callpanel2_chat_1440.png](qa/naive/screens/callpanel2_chat_1440.png), [callpanel_participants_1440.png](qa/naive/screens/callpanel_participants_1440.png), [callpanel_notes_1440.png](qa/naive/screens/callpanel_notes_1440.png), [callpanel_transcript_1440.png](qa/naive/screens/callpanel_transcript_1440.png), [callpanel2_settings_1440.png](qa/naive/screens/callpanel2_settings_1440.png), [callpanel_assistant_1440.png](qa/naive/screens/callpanel_assistant_1440.png), [callpanel2_reactions_1440.png](qa/naive/screens/callpanel2_reactions_1440.png).

### 8.6. Звонок, 390px

**Думал:** мобильная версия — это тот же звонок, но компактнее.  
**Получил:** верхняя панель обрезана до логотипа и «Подключение…»; имени комнаты, таймера и числа участников нет. Видео 374×210 в центре, вокруг пустота. 14 кнопок в три ряда: 7 + 6 + одна «Выйти» по центру. Панель чата открывается на весь экран, но поле ввода внизу может попасть под клавиатуру; кнопка «Выйти» оказывается ровно на одной линии с полем чата, что визуально страшно.

**Скриншоты:** [mobile_joined_390.png](qa/naive/screens/mobile_joined_390.png), [mobile_chat_390.png](qa/naive/screens/mobile_chat_390.png).

### 8.7. Вход в панель

**Думал:** введу адрес сервера и API-ключ, нажму «Проверить подключение».  
**Получил:** аккуратную карточку по центру, тёмный фон, понятные поля, предупреждение «Ключ не попадает в логи». Хороший экран. Но заголовок «AGIL Calls · Панель разработчика» дублируется с подзаголовком; внизу «Demo / Редактор темы / API docs» — три ссылки без объяснения; «API: https://calls.guardify.ru» — техническая строка.

**Скриншот:** [dashboard_login_1440.png](qa/naive/screens/dashboard_login_1440.png).

### 8.8. Обзор

**Думал:** увижу состояние своего тенанта: комнаты, людей, записи.  
**Получил:** 4 KPI-карточки, таблица последних комнат, распределение по странам, «Быстрый старт», «Сервер». Информативно, но:

- KPI «Активные комнаты» = 3, «Всего создано: 3» — а в таблице 3 строки; нормально, но непонятно, что считается «активной» (открытая или с участниками);
- «Участники 0» и «Записи 13» — разные единицы, но одинаковые карточки;
- «События безопасности · 24ч» — 2, без расшифровки, что это;
- «Распределение по странам» — полосы без подписей значений? Значения есть, но полосы одинаковой длины при разных числах (41, 9, 4) — визуально не масштабируются;
- «Быстрый старт» — 6 плиток, из них 2 ведут на внешние docs;
- «Сервер» — техническая карточка с uptime и подсистемами, полезная разработчику, но не бизнес-пользователю.

**Скриншот:** [light_overview_view_1440.png](qa/naive/screens/light_overview_view_1440.png).

### 8.9. Комнаты

**Думал:** таблица комнат с понятными действиями.  
**Получил:** таблицу с 12+ строками, фильтрами, счетчиком, кнопкой создания. Действия — 6 безымянных иконок. Создание комнаты — большая модалка с техническими полями. После создания — модалка с ссылками, но без пароля (см. P0-2). «Закрыть комнату» без подтверждения. Тосты не исчезают и накладываются на таблицу.

**Скриншоты:** [dash_rooms_1440.png](qa/naive/screens/dash_rooms_1440.png), [dash_room_create_modal_1440.png](qa/naive/screens/dash_room_create_modal_1440.png), [roomact_invite_1440.png](qa/naive/screens/roomact_invite_1440.png), [current_room_closed_no_confirm_1440.png](qa/naive/screens/current_room_closed_no_confirm_1440.png).

### 8.10. Безопасность

**Думал:** набор галочек «включить/выключить» для безопасности.  
**Получил:** пять больших секций с десятками чекбоксов, «гео-политика», «liveness-challenge», «анти-deepfake», «AI-ассистент», «права сессии». Справа — живой аудит-лог на 4000px. Всё это на одном экране, без оглавления и без «сохранить/отменить» внизу (кнопка наверху). Опасно: не понятно, что применяется сразу, а что по кнопке. Я не рискнул менять чекбоксы.

**Скриншоты:** [dash_security_1440.png](qa/naive/screens/dash_security_1440.png), [light_security_view_1440.png](qa/naive/screens/light_security_view_1440.png).

### 8.11. Аудит

**Думал:** журнал событий с фильтрами.  
**Получил:** 50 строк, фильтры «Тип события / Уровень / Комната / Страница», «Экспорт JSON». Работает, но:

- строки разной высоты;
- UUID комнаты и участника занимают по 2 строки;
- «Страница» — это select «50 на странице», а не номер страницы; рядом «Показано 1–50 из 1000 · страница 1 · Вперёд». Семантика смешана;
- фильтр «Уровень» сработал, но я не увидел явного «применено»; после «Вперёд» получил 0 строк и не понял, это конец или фильтр;
- «Экспорт JSON» — кнопка без подтверждения, сразу скачивание.

**Скриншоты:** [act_audit_initial_1440.png](qa/naive/screens/act_audit_initial_1440.png), [act_audit_next_1440.png](qa/naive/screens/act_audit_next_1440.png), [dash_audit_1440.png](qa/naive/screens/dash_audit_1440.png).

### 8.12. Доступы

**Думал:** матрица «роль × функция» с понятными правами.  
**Получил:** карточки ролей с бейджами `host`, `guest`, `moderator`; пилюли функций; матрицу на 43 строки; справа форму выдачи токена. Кнопка «Изменить права» прокручивает страницу вверх/вниз к матрице, из-за чего правая форма уезжает за экран. «Сохранить политику» — вверху. «Выдать токен» — отдельный процесс, который выглядит как форма, но требует `userId` и `roleId`. Ошибки в названиях: карточка «Ведущий» = `host`, «Организатор» = `host` в тосте. Маскот перекрывает чекбокс.

**Скриншоты:** [act_access_initial_1440.png](qa/naive/screens/act_access_initial_1440.png), [act_access_edit_rights_1440.png](qa/naive/screens/act_access_edit_rights_1440.png).

### 8.13. Интеграции

**Думал:** подключение внешних сервисов (SSO, вебхуки).  
**Получил:** форму «Identity и origins» с `token/HS256`, `JWKS URL`, `Mappинг claims`, `userId claim`, `name claim`, `role claim`, `permissions claim`, `verified claim`, `postMessage`. Ниже — провайдеры, ограничения масштабирования (кластер, SFU, webinar, streaming, TURN), вебхуки, аудит доставок и список docs. Это страница для архитектора, а не для администратора. «MVP: mode=token» — прямое признание, что OIDC не готово.

**Скриншоты:** [now_integrations_1440.png](qa/naive/screens/now_integrations_1440.png), [dash_integrations_1440.png](qa/naive/screens/dash_integrations_1440.png).

### 8.14. Ассистент по базе знаний

**Думал:** подключу базу знаний и проверю ответ.  
**Получил:** форму с endpoint, env-переменной, таймаутом, `systemPrompt`, `denyMessage`, ролями и чекбоксами. Справа — вопрос, роль, `userId`, `roomId`, кнопка «Проверить». Нажатие ничего не делает (см. 5.11). Пустое состояние перекрыто маскотом. «RAG» и «knowledgeAgent» — техническая лексика. При этом сама идея хорошая: цитаты, границы ответственности, отказ для роли.

**Скриншоты:** [now_knowledge_1440.png](qa/naive/screens/now_knowledge_1440.png), [dash_knowledge_1440.png](qa/naive/screens/dash_knowledge_1440.png).

### 8.15. Записи

**Думал:** список записей с плеером и транскриптом.  
**Получил:** таблицу 12 записей, фильтр по ID комнаты, KPI, кнопки скачивания/удаления. Плеера нет — только скачать. «Транскрипт» — колонка «НЕТ» в каждой строке, без возможности включить. UUID комнаты в 2 строки, строки высокие. «Суммарная длительность 7 мин 42 с» — полезно; «Общий размер 18 КБ» — подозрительно мало, но это тестовые данные.

**Скриншот:** [dash_recordings_1440.png](qa/naive/screens/dash_recordings_1440.png).

### 8.16. Настройки и встраивание

**Думал:** одно место, где настроить бренд, embed и проверить iframe.  
**Получил:** очень длинную страницу с 4 большими блоками: подключение, генератор embed, брендинг/маскот, публичные endpoints/OpenAPI/MCP, iframe-превью, сброс. Всё техническое. «Проверить iframe» вставляет iframe 704×260 — в нём видна только верхняя часть экрана входа, кнопки входа нет; при этом тост говорит «iframe загрузился». «Проверить подключение» и «Сохранить и проверить» дублируются. «Аги можно переодеть» — милая идея, но анимации `wave/celebrate/angry/thumbsup/thinking/alert` и `branding.mascotEnabled` — снова API.

**Скриншоты:** [now_settings_1440.png](qa/naive/screens/now_settings_1440.png), [now_settings_iframe_1440.png](qa/naive/screens/now_settings_iframe_1440.png), [light_settings_view_1440.png](qa/naive/screens/light_settings_view_1440.png).

### 8.17. Помощник «Аги»

**Думал:** это AI-помощник по панели, можно спросить «как выдать доступ?».  
**Получил:** панель 424px справа, выбор роли ассистента, чат, подсказки, ссылки на docs. Открывается поверх контента. Ответ пришёл сырым Markdown, с обрезанным началом и путями к файлам. Подсказки повторяются. Аватар в шапке иногда пустой. Внизу панели — три ссылки, которые могут не влезть. При этом сам тон «Привет! Я Аги. Помогу с панелью, правами и безопасностью» — приятный, это плюс.

**Скриншоты:** [dash_assistant_open_1440.png](qa/naive/screens/dash_assistant_open_1440.png), [dash_assistant_reply_1440.png](qa/naive/screens/dash_assistant_reply_1440.png).

### 8.18. Редактор

**Думал:** визуальный редактор темы: меняю цвет/лейаут, вижу превью, сохраняю.  
**Получил:** три колонки. Слева 16 разделов и длинная форма с техническими параметрами (`primary`, `primaryHover`, `onPrimary`, `focusRing`, `speakingRing`, `branding.mascotEnabled`). В центре iframe с настоящим экраном входа, справа JSON-конфиг и форма сохранения. Превью подключено, но в нём вечное «Запрашиваем доступ к камере…». При смене схемы на светлую текст в превью становится белым на белом (см. 5.9). Сохранение спрятано в правой прокрутке (см. 5.8). «К настройкам» за экраном.

**Что понравилось:** живое превью, мгновенная реакция на тему, JSON-конфиг, presets, понятные названия разделов (кроме `In-call`), аккуратная тёмная сетка.  
**Что раздражает:** это не визуальный редактор, а IDE для конфига; разделы `Лейаут`, `Провайдеры`, `Масштабирование` выглядят как чужие; подписи вроде «36 цветовых токенов, типографика, радиусы, плотность и движение» — маркетинг, а не помощь.

**Скриншоты:** [editor_initial_view_1440.png](qa/naive/screens/editor_initial_view_1440.png), [editor_Бренд_1440.png](qa/naive/screens/editor_Бренд_1440.png), [editor_Тема_1440.png](qa/naive/screens/editor_Тема_1440.png), [editor_Лейаут_1440.png](qa/naive/screens/editor_Лейаут_1440.png), [editor_In_call_ассистент_1440.png](qa/naive/screens/editor_In_call_ассистент_1440.png), [editor_right_save_1440.png](qa/naive/screens/editor_right_save_1440.png), [editor_theme_light_preview_1440.png](qa/naive/screens/editor_theme_light_preview_1440.png), [editor_mobile_390.png](qa/naive/screens/editor_mobile_390.png).

### 8.19. Мобильная панель и мобильный редактор

- Панель: sidebar прячется за бургер, это плюс. Но таблицы не адаптированы; KPI-карточки складываются в длинную ленту; маскот перекрывает карточки; в шапке нет названия организации.
- Редактор: 4923px, превью в середине, сохранение в конце. Для «визуального редактора» на телефоне это нерабочий сценарий: невозможно одновременно видеть форму и результат.

**Скриншоты:** [mobile_dash_menu_390.png](qa/naive/screens/mobile_dash_menu_390.png), [mobile_dash_create_modal_390.png](qa/naive/screens/mobile_dash_create_modal_390.png), [editor_mobile_full_390.png](qa/naive/screens/editor_mobile_full_390.png).

---

## 9. Где интерфейс не донёс модель

1. **«Готовый продукт» vs «конструктор».** Лендинг говорит «для корпоративных клиентов» и «сотрудники созваниваются», а панель и редактор требуют знать API, токены, claims, mediaMode и CSP. Я не понимал, кто я: сотрудник, админ или интегратор.
2. **«Заметки» vs «комплаенс».** Название обещает блокнот, содержимое — AI-анализ нарушений. Нет ручного ввода и нет объяснения, что заметки создаёт ИИ.
3. **«Ассистент» vs «командный пульт».** Подсказки «включи запись / открой чат / где микрофон?» — это команды управления, а не помощь по содержанию звонка. Кнопка «Спросить» и поле «Спросите…» усиливают ложное ожидание чата.
4. **«Открыть виджет» vs «Открыть во встроенном окне».** Разница не объяснена; обе кнопки ведут к звонку, но одна открывает виджет на странице, другая — iframe. Для новичка это одно и то же.
5. **«Комната» и «Организация».** На лендинге поле «Организация» = `demo`, в коде — `tenantId`, в панели — «Тенант DEMO», в редакторе — «Идентификатор организации (tenantId)». Это три названия одной сущности.
6. **«Пароль» без пароля.** Бейдж «Пароль» сообщает, что пароль есть, но не даёт его. Модель «я создал защищённую комнату» рушится.
7. **«Закрыть комнату» как обратимое действие.** Иконка замка выглядит как «заблокировать вход», а по факту комната закрывается и участники отключаются, без подтверждения.
8. **«Свернуть звонок» vs «bubble».** Ожидаешь маленький плавающий пузырь, получаешь окно 379×319 с двумя рядами иконок и пустым фоном.
9. **«Тема» в звонке.** Ожидаешь выбор «светлая/тёмная/как в системе», получаешь циклическое переключение по иконке без меню; в светлой теме часть текста нечитаема.
10. **«Сохранить» в редакторе.** Ожидаешь кнопку в шапке, а она в отдельной правой прокрутке под JSON; я бы не нашёл её без прицельного поиска.
11. **«Проверить» в базе знаний.** Кнопка выглядит активной, но не запускает проверку и не объясняет, чего не хватает.
12. **«Demo» на лендинге.** Слово `Demo` в заголовке и `demo` в поле организации; не понятно, это тестовый тенант или название компании.

---

## 10. Что ощущается «премиально», а что «дёшево»

### Где я бы сдался

- **На лендинге** — на пустом чёрном блоке «Звонок»: непонятно, сломалось ли что-то или так задумано.
- **На мобильных «Комнатах»** — потому что кнопок управления нет в видимой области, а подсказки о горизонтальном скролле нет.
- **В редакторе** — после десяти минут поиска «Сохранить» в отдельной правой прокрутке; я бы решил, что изменения не сохраняются.
- **В «Базе знаний»** — после «Проверить», которая ничего не делает и ничего не объясняет.
- **В звонке** — если бы «Подключение…» висело на реальной встрече дольше пары секунд; я бы вышел и перезашёл.

**Премиально:**

- тёмная палитра, крупная типографика, аккуратные карточки и скругления;
- Guardify-демо: фиолетовый бренд, Inter, моноширинный логотип, продуманная композиция;
- экран входа в панель: спокойный, чистый, с нормальным сообщением об ошибке;
- модалка создания комнаты и приглашения: понятная иерархия, хорошие отступы, читаемые кнопки;
- мягкие цветные акценты KPI-карточек и «остров» управления в звонке;
- идея «Аги» и кастомизируемого маскота — тёплая, человеческая.

**Дёшево:**

- пустой чёрный блок «Звонок» на лендинге;
- полный JWT в оранжевом тосте;
- 6 серых иконок 28×28 и «угадай, что нажмёшь»;
- вечное «Подключение…» и противоречивые статусы;
- «scrypt», «TTL», «mediaMode», «HMAC», «CSP» на экранах для бизнеса;
- наложение маскота на элементы управления;
- тосты, которые висят несколько секунд, накладываются друг на друга и наезжают на таблицу;
- мобильная таблица, уехавшая вправо;
- редактор, где превью и сохранение не видны одновременно;
- обрезанные подписи «Ассистент по базе зн…», «Настройки и встраиван…», «Масштабирован…»;
- сырой Markdown в ответе ИИ и пустой серый круг вместо аватара.

---

## 11. Что исправить в первую очередь

1. **Убрать URL/токены из тостов.** Никогда не печатать `token=...` в UI. При блокировке popup — нейтральный текст и «Повторить».
2. **Показывать пароль один раз после создания.** Кнопки «Скопировать», «Сгенерировать заново», предупреждение о невосстановимости.
3. **Мобильные комнаты — карточками.** Все действия в видимом меню «…», не за экраном.
4. **Подтверждение для «Закрыть комнату».** Как у удаления: «Участники будут отключены. Закрыть?» + отмена.
5. **Починить статус подключения.** Один источник правды: «Подключение…» → «Подключено» / «Ошибка»; не показывать «100/100» при «Подключение…».
6. **Развести «Заметки», «Транскрипт», «Ассистент».** Переименовать «Заметки» в «Комплаенс»/«AI-заметки», дать ручные заметки, показать статус STT и кнопку «Включить».
7. **Убрать маскот с контента.** Reserved gutter или скрытие на мобильном; при открытой панели — не дублировать кнопку.
8. **Сделать сохранение редактора очевидным.** Sticky-кнопка «Сохранить» в шапке, индикатор несохранённых изменений, один скролл на колонку с видимым scrollbar.
9. **Исправить светлую тему превью.** Проверить контраст всех текстов на светлом фоне; не выпускать тему, где белый текст на белом.
10. **Единый глоссарий и язык.** «Организация» вместо «тенант», «ИИ» вместо «AI», «Ассистент по базе знаний» вместо `Knowledge-агент`; технические термины — только в advanced-режиме.
11. **Пустое состояние звонка.** Вместо чёрного прямоугольника — иллюстрация, текст «Комната не выбрана», кнопка «Выбрать комнату» и ссылка «Как это работает».
12. **Убрать дубли тостов и заголовков.** Один тост на действие, автоскрытие, не перекрывать таблицу.

---

## 12. Приложение: избранные скриншоты

Все файлы лежат в `qa/naive/screens/`; всего 139 изображений (включая дубли и промежуточные состояния).

| Что проверял | Файл |
|---|---|
| Лендинг, десктоп | [pub_current_landing_1440.png](qa/naive/screens/pub_current_landing_1440.png) |
| Лендинг, 390 | [pub_current_landing_390.png](qa/naive/screens/pub_current_landing_390.png) |
| Guardify, десктоп | [pub_guardify_1440.png](qa/naive/screens/pub_guardify_1440.png) |
| Guardify, 390 | [guardify_390.png](qa/naive/screens/guardify_390.png) |
| Вход в звонок | [call_prejoin_1440.png](qa/naive/screens/call_prejoin_1440.png) |
| Вход с паролем | [password_no_password_1440.png](qa/naive/screens/password_no_password_1440.png) |
| Звонок | [call_joined_1440.png](qa/naive/screens/call_joined_1440.png) |
| Чат | [callpanel2_chat_1440.png](qa/naive/screens/callpanel2_chat_1440.png) |
| Участники | [callpanel_participants_1440.png](qa/naive/screens/callpanel_participants_1440.png) |
| Заметки | [callpanel_notes_1440.png](qa/naive/screens/callpanel_notes_1440.png) |
| Транскрипт | [callpanel_transcript_1440.png](qa/naive/screens/callpanel_transcript_1440.png) |
| Настройки звонка | [callpanel2_settings_1440.png](qa/naive/screens/callpanel2_settings_1440.png) |
| Ассистент звонка | [callpanel_assistant_1440.png](qa/naive/screens/callpanel_assistant_1440.png) |
| Светлая тема звонка | [callpanel2_theme_after_1440.png](qa/naive/screens/callpanel2_theme_after_1440.png) |
| Свёрнутый звонок | [callclean_minimized_1440.png](qa/naive/screens/callclean_minimized_1440.png) |
| Звонок, 390 | [mobile_joined_390.png](qa/naive/screens/mobile_joined_390.png) |
| Чат, 390 | [mobile_chat_390.png](qa/naive/screens/mobile_chat_390.png) |
| Вход в панель | [dashboard_login_1440.png](qa/naive/screens/dashboard_login_1440.png) |
| Обзор | [light_overview_view_1440.png](qa/naive/screens/light_overview_view_1440.png) |
| Комнаты | [dash_rooms_1440.png](qa/naive/screens/dash_rooms_1440.png) |
| Создание комнаты | [dash_room_create_modal_1440.png](qa/naive/screens/dash_room_create_modal_1440.png) |
| Пароль не показан | [current_password_created_modal_1440.png](qa/naive/screens/current_password_created_modal_1440.png) |
| Приглашение | [roomact_invite_1440.png](qa/naive/screens/roomact_invite_1440.png) |
| Закрытие без подтверждения | [current_room_closed_no_confirm_1440.png](qa/naive/screens/current_room_closed_no_confirm_1440.png) |
| Удаление с подтверждением | [roomact_delete_confirm_1440.png](qa/naive/screens/roomact_delete_confirm_1440.png) |
| Безопасность | [dash_security_1440.png](qa/naive/screens/dash_security_1440.png) |
| Аудит | [dash_audit_1440.png](qa/naive/screens/dash_audit_1440.png) |
| Доступы | [act_access_initial_1440.png](qa/naive/screens/act_access_initial_1440.png) |
| Интеграции | [now_integrations_1440.png](qa/naive/screens/now_integrations_1440.png) |
| База знаний | [now_knowledge_1440.png](qa/naive/screens/now_knowledge_1440.png) |
| Записи | [dash_recordings_1440.png](qa/naive/screens/dash_recordings_1440.png) |
| Настройки | [now_settings_1440.png](qa/naive/screens/now_settings_1440.png) |
| Iframe-превью | [now_settings_iframe_1440.png](qa/naive/screens/now_settings_iframe_1440.png) |
| Аги | [dash_assistant_reply_1440.png](qa/naive/screens/dash_assistant_reply_1440.png) |
| Редактор | [editor_initial_view_1440.png](qa/naive/screens/editor_initial_view_1440.png) |
| Редактор, ИИ-агент | [editor_ИИ_агент_1440.png](qa/naive/screens/editor_ИИ_агент_1440.png) |
| Редактор, сохранение | [editor_right_save_1440.png](qa/naive/screens/editor_right_save_1440.png) |
| Редактор, светлое превью | [editor_theme_light_preview_1440.png](qa/naive/screens/editor_theme_light_preview_1440.png) |
| Редактор, 390 | [editor_mobile_390.png](qa/naive/screens/editor_mobile_390.png) |
| Мобильная панель | [mobile_dash_overview_390.png](qa/naive/screens/mobile_dash_overview_390.png) |
| Мобильные комнаты | [mobile_dash_rooms_390.png](qa/naive/screens/mobile_dash_rooms_390.png) |
| Мобильное меню | [mobile_dash_menu_390.png](qa/naive/screens/mobile_dash_menu_390.png) |

---

## 13. Ограничения отчёта

- Оценка визуала и текста субъективна; я сознательно смотрю как новичок, а не как дизайнер.
- В headless-браузере я не слышал звук, не проверял реальное качество WebRTC и не видел системный диалог выбора экрана; сценарии с камерой/PiP/fullscreen могут отличаться в обычном Chrome.
- Некоторые кнопки, меняющие конфиг тенанта, я не нажимал (см. раздел 3), чтобы не оставить стенд в изменённом состоянии.
- Во время сессии стенд перезапускался (502), поэтому количество комнат, записей и некоторые подписи на скриншотах отличаются. Это ограничение среды, а не моя правка данных.
- Все тестовые комнаты, которые я создавал, удалены; seed-комнаты не изменялись и не удалялись.

**Итог:** визуально продукт местами выглядит дорого, и у него есть хорошая основа — комнаты, роли, темы, брендинг, аккуратный вход. Но в текущем виде первый пользователь не понимает, что перед ним; мобильная панель не даёт управлять комнатами; а два P0 (токен в тосте и невосстановимый пароль) подрывают доверие быстрее, чем любой визуальный дефект.
