# Наивный QA: повторная проверка AGIL Calls (retest)

- **Дата:** 13.11.2026, ~20:08–20:55 MSK
- **Стенд:** https://calls.guardify.ru/ (последний деплой)
- **Метод:** только браузер. Headless Chrome (puppeteer-core из репозитория), фейковые камера/микрофон, desktop 1440×900 и mobile 390×844. Исходники и документацию репозитория не читал.
- **Ключи:** админский и платформенный ключи брал только в память (не сохранял в файлы/отчёты).
- **Скриншоты:** 99 шт. в `qa/naive-retest/screens/`.
- **Скрипты прогона:** `qa/naive-retest/*.cjs`.

---

## 1. Чек-лист: итог

| # | Проверка | Вердикт | Кратко |
|---|---|---|---|
| 1 | «Открыть в новой вкладке» при блокировке попапов | **PASS** (P3-полировка) | Тоста без JWT/ссылки, есть «Скопировать ссылку» и «Повторить», одна строка не растягивается. Кнопки в тосте сжаты. |
| 2 | Комната с паролем + мобильные комнаты + закрытие | **PASS** | Пароль показан 1 раз, копируется в буфер, предупреждение есть; на 390 все 6 действий комнаты внутри экрана; закрытие спрашивает подтверждение. |
| 3 | Guardify: контейнер, статус, вход, мобильный | **FAIL (P1)** | Контейнер/видео заполняют панель, статус не залипает, вход работает **если комната существует**; но дефолтная комната `guardify-demo` отсутствует → «Комната не найдена», войти нельзя. |
| 4 | Редактор: превью, save dock, темы, маскот | **PASS** | Превью создаёт реальные комнаты (POST /v1/rooms 200) и подключается; save dock виден; light/dark читаемы; Agil виден. |
| 5 | Маскот Agil в панели и редакторе | **PASS** (с оговоркой) | FAB скрывается, имя Agil, компактная шапка, роль по экрану, new/rename/search/delete-confirm, recall, markdown, Enter, «Показать полностью», mobile full-screen. Открытие старого чата отдельно не прокликивал. |
| 6 | Ассистент в звонке + меню видео | **PASS** (P2-баг) | Enter отправляет, Shift+Enter — перенос строки; рука поднимается/опускается; меню «Видео» содержит камеру/фон/blur/зеркало/качество/диагностику. Ответ на «опусти руку» неверный. |
| 7 | SaaS: платформенный ключ → организации | **FAIL (P1)** | Вход с платформенным ключом отклоняется 403 (`Platform key cannot access tenant-scoped endpoints`), экран «Организации» недостижим. Создать тестовую организацию/проверить тему не удалось. |
| 8 | Документация: список/превью/правка/загрузка/история/restore/default/reset | **PARTIAL (P2)** | Список, превью, загрузка, правка+сохранение, ссылки в панели, скачивание и raw-файл работают. «Сделать основным» — 404; история версий не хранит предыдущую версию; reset удаляет загруженный документ. |
| 9 | Общее: вёрстка, шрифты, контраст, мобильный | **PARTIAL (P2)** | Горизонтального скролла нет на основных экранах, CLS на тосте = 0. Мобильный редактор сломан; на Guardify подписи <12px; англоязычные технические тексты в ошибках. |

---

## 2. Новые дефекты

### P1 — блокирующие

#### P1-1. Платформенный ключ не пускает в панель, раздел «Организации» недоступен
- **Где:** `/dashboard/`, экран входа, чекбокс «Платформенный ключ».
- **Шаги:** открыть `/dashboard/` → ввести платформенный ключ → включить «Платформенный ключ (управление организациями)» → «Проверить подключение».
- **Факт:** остаёмся на форме, ошибка «Запрос отклонён… Код: forbidden (HTTP 403). Platform key cannot access tenant-scoped endpoints». В запросах: `GET /v1/admin/overview` → 403; `/v1/platform/*` и `/v1/admin/organizations` → 404.
- **Ожидание:** вход и экран «Организации» (создание организации, ключ один раз, embed/demo, тема).
- **Скриншот:** `../qa/naive-retest/screens/07a-platform-login.png`
- **Следствие:** полностью не проверяемы пункты SaaS (создание тестовой организации, «ключ показан один раз», тема без mixed light/dark, возврат назад).

#### P1-2. На Guardify дефолтная комната отсутствует — войти в показанный звонок нельзя
- **Где:** `/guardify.html`, герой-блок «Защищённый звонок».
- **Шаги:** открыть `/guardify.html` → ввести имя → «Войти в звонок».
- **Факт:** «Комната не найдена. Возможно, она удалена или ссылка устарела», затем «Не удалось подключиться». Комнаты `guardify-demo` нет в списке комнат (`/v1/admin/rooms`).
- **Ожидание:** дефолтная демо-комната существует, вход в один клик.
- **Скриншот:** `../qa/naive-retest/screens/03a-guardify-joined.png`
- **Дополнительно:** за сессию сервер перезапускался (uptime падал до 40 с), счётчик комнат менялся 19 → 5 → 6; похоже, комнаты не переживают рестарт. Вход через создание комнаты в нижней форме работает, но сама «витрина» Guardify сломана.

### P2 — серьёзные

#### P2-1. «Сделать основным» в документации отдаёт 404
- **Где:** Панель → Документация → любой документ → «Сделать основным» → подтверждение.
- **Факт:** тост «Объект не найден на сервере. Код: not_found (HTTP 404). No route for POST /v1/admin/docs/default», бейдж «основной» не меняется (после reload — снова api-guide.md).
- **Ожидание:** документ становится основным, бейдж и дефолт при открытии меняются.
- **Скриншот:** `../qa/naive-retest/screens/08e4-after-confirm.png`

#### P2-2. История версий документа не позволяет восстановить предыдущую версию
- **Где:** Документация → загруженный документ → «Редактировать» → «Сохранить» → «История версий».
- **Факт:** после сохранения (PUT 200, «Документ сохранён») в истории одна запись «текущая», «Версий: 1», кнопки restore нет. Размер в шапке/карточке остаётся старым (448/529 Б), хотя в истории 637 Б.
- **Ожидание:** минимум 2 версии, восстановление предыдущей, актуальный размер.
- **Скриншот:** `../qa/naive-retest/screens/08i-doc-history.png`, `08h-doc-saved.png`

#### P2-3. Ассистент в звонке: «опусти руку» подтверждает поднятие руки
- **Где:** звонок → «Команды ассистента».
- **Шаги:** ввести «подними руку» (Enter) → затем «опусти руку» (Enter).
- **Факт:** рука действительно опускается (кнопка снова «Поднять руку»), но ответ ассистента: «Поднимаю руку. raise_hand». Плюс поверх звонка остаётся коучмарк «Подсказка. Шаг 1/1» с затемнением всего интерфейса; он не закрывается сам и мешает следующим командам.
- **Ожидание:** «Опускаю руку / lower_hand»; подсказка не блокирует звонок после каждой команды.
- **Скриншоты:** `../qa/naive-retest/screens/06e-assistant-lower-hand.png`, `06d-assistant-raise-hand.png`

#### P2-4. Мобильный редактор (390) разваливается
- **Где:** `/editor/` при 390×844.
- **Факт:** шапка обрезана («AGIL» без конца), пункты «Руководство интегратора» и «Справочник API» уходят за экран (right 522 и 639 px), видна только колонка навигации, а закреплённый блок «Сохранить изменения» перекрывает пункт «Бренд»/«К настройкам». Основная форма не читается.
- **Ожидание:** рабочая одноколоночная вёрстка без обрезки и перекрытий.
- **Скриншот:** `../qa/naive-retest/screens/09-mobile-editor.png`

#### P2-5. Создание комнаты на Guardify не показывает звонок
- **Где:** `/guardify.html`, форма «Создать или войти в звонок» → «Создать комнату».
- **Факт:** комната создаётся и звонок подключается, но страница остаётся прокрученной к форме; звонок выше экрана (video top = −397), пользователь видит только «Комната создана: …».
- **Ожидание:** автоскролл к звонку или переход в звонок.
- **Скриншот:** `../qa/naive-retest/screens/03c-guardify-created-joined.png`

### P3 — мелкие

| ID | Где | Проблема | Скриншот |
|---|---|---|---|
| P3-1 | Тосты виджета | Кнопки «Скопировать ссылку»/«Повторить» сжаты в колонку 88 px: текст переносится на 2 строки, высоты кнопок 42/24 px — выглядит неаккуратно (функционально работает). | `01f-popup-blocked-toast.png` |
| P3-2 | Guardify | Служебные подписи 10.9–11.5 px: «ПЛАТФОРМА ЗАЩИЩЁННЫХ КОММУНИКАЦИЙ», «СЕРВЕР ДОСТУПЕН», «АУДИТ ВКЛЮЧЁН». | `03a-guardify-joined.png` |
| P3-3 | Документация → reset | Для загруженного документа «Сбросить к исходному» удаляет его, хотя диалог обещает «Встроенный файл вернётся». | `08j-reset-confirm.png`, `08k-reset-done.png` |
| P3-4 | Документация (390) | Вкладка «Загрузить» обрезана правым краем. | `09-mobile-docs-preview.png` |
| P3-5 | Комнаты (390) | Плавающий FAB Agil перекрывает название второй карточки комнаты. | `02h-mobile-rooms.png` |
| P3-6 | Ошибки | В русские сообщения просачиваются английские внутренние тексты: `Platform key cannot access tenant-scoped endpoints`, `No route for POST /v1/admin/docs/default`. | `07a-platform-login.png`, `08e4-after-confirm.png` |
| P3-7 | Виджет | При неудачном входе общая ошибка «Ошибка виджета. Технические подробности — в консоли браузера» вместо понятной причины. | `01c2-after-first-join.png` |
| P3-8 | Agil | Чипы примеров вставляют текст в поле без пробела; если после чипа печатать, сообщения склеиваются («Как пригласить участника?А что мы обсуждали?»). | `05c-agil-recall.png` |

---

## 3. Что проверено и работает (детали)

- **#1:** перехвачен `window.open` → null. Тост: «Браузер заблокировал новое окно. Разрешите всплывающие окна для calls.guardify.ru» + «Скопировать ссылку» + «Повторить». В тексте нет `eyJ…`, нет URL, ширина тоста 340 px, переносов «одной гигантской строки» нет.
- **#2:** создана комната с паролем `QaNaive!2026`: пароль в модалке 1 раз, бейдж «показан один раз», предупреждение про scrypt, кнопка копирования → в буфере ровно пароль, тост «Скопировано в буфер обмена». «Закрыть комнату» → диалог «Закрыть комнату? … Отмена / Закрыть комнату». На 390 карточка комнаты: все 6 кнопок (копировать вход/embed, демо, приглашение, закрыть, удалить) в пределах 390.
- **#3:** контейнер звонка 1128 px в панели 1240 px, видео заполняет (object-fit: cover), статус «Подключено», участник 1, «Подключение…» не залипает. На 390 scrollWidth = 390, видео 352×340. Вход работает для созданной комнаты.
- **#4:** в редакторе два POST /v1/rooms 200, iframe `/embed.html?room=…&token=…`, «Подключено», 1 участник; светлая/тёмная темы читаемы (белая и тёмная поверхность, контрастный текст); «Сохранить изменения»/«Сохранить в организации» на месте; Agil FAB справа снизу.
- **#5:** FAB `display` 0 при открытой панели; заголовок «Agil», сабтайтл «Первые шаги · подобрана по разделу»; на экране «Безопасность» роль `security-reviewer`; в редакторе — «Проверка настроек · раздел „Бренд“»; история: поиск, переименование (диалог, сохранение), удаление с подтверждением «Удалить чат?»; «что мы обсуждали?» возвращает пересказ текущего диалога; markdown (`h1/h2/strong/ul/code`) рендерится; Enter отправляет; «Показать полностью» разворачивает ответ 274 → 861 px; mobile 390 — панель на всю ширину.
- **#6:** в звонке Shift+Enter даёт `\n` и не отправляет; Enter отправляет; «подними руку» → кнопка «Опустить руку», «опусти руку» → «Поднять руку»; меню «Видео»: камера, «Без эффекта», «Размытие фона», «Фон», «Зеркально отражать своё видео», «Качество видео», «Диагностика видео».
- **#8:** список 47 документов, поиск, превью; загрузка своего `.md` (файл + имя + заголовок) → 48-й документ, markdown отрендерен; правка → PUT 200, «Документ сохранён»; ссылка `[Роли и права](roles.md)` открывается внутри панели (`#/docs?name=roles.md`), а не как raw `.md`; «Скачать .md» скачивает файл; «Открыть файл» открывает `/docs/<name>.md` с исходным текстом в новой вкладке.
- **#9:** горизонтального скролла нет на `/`, `/guardify.html`, `/embed.html`, `/dashboard/*`, `/editor/` (кроме обрезанных элементов редактора, см. P2-4); CLS при появлении тоста = 0; растянутых картинок не найдено.

---

## 4. Общее впечатление first-time user

Десктопный сценарий «создать комнату → войти → управлять» ощущается цельным: красивая тёмная тема, понятные формы, пароль и приглашения сделаны аккуратно, ассистент Agil заметно выделяется и реально помогает. Но два «витринных» входа сломаны: Guardify не пускает в показанный звонок, а платформенный ключ вообще не логинится в SaaS-раздел. Плюс документация теряет «основной документ» и историю версий, а мобильный редактор выглядит недоделанным. Как первый пользователь я бы решил, что продукт интересный, но не готов к показу клиенту.

---

## 5. Уборка тестовых данных

- Опубликованные/сидовые комнаты не удалял.
- Свой документ `qa-naive-doc-203151.md` загрузил и удалил через «Сбросить к исходному» (это же стало дефектом P3-3).
- Свои комнаты (`QA naive …`, `qa-main-*`, `qa-guardify-*`, `qa-gm-*`) создавал только для тестов; на финальной проверке их уже не было (сервер перезапускался, счётчик комнат падал).
- Тестовую организацию создать не удалось из-за P1-1; платформенный ключ нигде не сохранён.

---

## 6. Индекс ключевых скриншотов

| Файл | Что показывает |
|---|---|
| `01f-popup-blocked-toast.png` | Тост при заблокированном попапе |
| `02d-room-created-ok.png` | Пароль показан один раз + предупреждение |
| `02f-close-room-confirm.png` | Подтверждение закрытия комнаты |
| `02h-mobile-rooms.png` | Мобильные комнаты, все действия |
| `03a-guardify-joined.png` | «Комната не найдена» на Guardify |
| `03c-guardify-created-joined.png` | Звонок создан, но остался выше экрана |
| `04c-editor-preview-light.png`, `04c-editor-preview-dark.png` | Превью редактора в двух темах |
| `05a-agil-dashboard-open.png` | Agil в панели |
| `05f-agil-history.png` | История чатов |
| `05j-agil-mobile-fullscreen.png` | Agil на 390 |
| `06a-video-settings-menu.png` | Меню настроек видео |
| `06d-assistant-raise-hand.png`, `06e-assistant-lower-hand.png` | Команды с рукой |
| `07a-platform-login.png` | 403 при входе платформенным ключом |
| `08d-doc-internal-link.png` | Ссылка открылась в панели |
| `08e4-after-confirm.png` | 404 «Сделать основным» |
| `08i-doc-history.png` | Одна версия, нет restore |
| `09-mobile-editor.png` | Сломанный мобильный редактор |
