Ручной тест, этап 1 — первый запуск ученического приложения
Первый запуск задаёт один вопрос: «Где работает этот компьютер?» — «В классе» или «Самостоятельно» (D-121). От ответа расходятся два пути, и проверять надо оба.
Ветки A и B (самостоятельный режим) проходятся без учительского приложения. Ветки C и D требуют его. Ветка E — смена режима задним числом.
Пометка НОВОЕ — поведение появилось 30.08 и человеком ещё не проверялось.
Подготовка
cd mvp/student-app && npm run dev
Сброс к первому запуску — приложение закрыть, потом:
rm ~/Library/Application\ Support/student-app/rubrick.db
Файл db.key.enc рядом не трогать — это ключ шифрования, без него новая база не откроется. Сброс нужен перед каждой веткой A–D: вопрос про режим задают один раз за жизнь базы.
Учительское приложение (для веток C и D), в отдельном терминале:
cd mvp/teacher-app && npm run dev:electron
Ветка A — самостоятельный режим, без учителя
Домашний сценарий. Учительское приложение не нужно и не должно быть запущено.
| № | Что сделать | Что должно быть |
|---|---|---|
| A1 | Запустить на чистой базе | НОВОЕ Экран «Где работает этот компьютер?» с двумя карточками. Углы прямые, лишних подписей нет |
| A2 | Нажать «Самостоятельно» | Экран «Выбери свою карточку». Есть «Локальная группа» и кнопка «Добавить ученика» |
| A3 | Закрыть и запустить снова | НОВОЕ Вопрос не задают второй раз — сразу выбор карточки |
| A4 | «Добавить ученика» → «Сохранить» с пустыми полями | «Напиши имя и фамилию…», карточка не создаётся |
| A5 | Имя из одних пробелов | То же сообщение (раньше форма молчала) |
| A6 | Имя + PIN из 2 цифр → «Сохранить» | НОВОЕ «PIN — это ровно четыре цифры…». Главная проверка Д-6: раньше короткий PIN молча выбрасывался и карточка создавалась без защиты |
| A7 | Дописать PIN до 4 цифр | Карточка создана |
| A8 | Создать вторую карточку с тем же именем | НОВОЕ «Такая карточка уже есть. Твоя — выбери её; другого человека — сохрани ещё раз» |
| A9 | Нажать «Сохранить» ещё раз | Тёзка создаётся — это законно |
| A10 | Создать третью карточку без PIN | Создана; нужна для A12 |
| A11 | Выбрать карточку с PIN, ввести неверный | Точки краснеют, «Неверный PIN-код…» |
| A12 | Выбрать карточку без PIN | Экран робота сразу, PIN не спрашивают |
| A13 | На экране PIN нажать «Это не я — выбрать другую карточку» | НОВОЕ Возврат к выбору. Главная проверка Д-5: раньше выхода не было |
| A14 | Неверный PIN 5–6 раз подряд | Появляется задержка между попытками, но насмерть не блокирует |
Ветка B — работа без робота и без сети
Продолжение ветки A, база не сбрасывается. Проверяет, что автономное устройство самодостаточно.
| № | Что сделать | Что должно быть |
|---|---|---|
| B1 | Экран робота: посмотреть на две кнопки | Обе активны: «Найти робота» и «Виртуальный робот». Серых нет |
| B2 | «Найти робота» (робота рядом нет) | «Роботов не нашлось» + два шага. НОВОЕ Инструкция ровно одна — было пять |
| B3 | «Виртуальный робот» | Главный экран |
| B4 | Главная | Карточки «Продолжить урок» нет. НОВОЕ «0% выполнено» не должно быть нигде |
| B5 | «Курсы» | «Курсы появятся после синхронизации». НОВОЕ Секции «Датчики — Скоро» быть не должно |
| B6 | «Настройки» → «Синхронизация» | НОВОЕ Текст согласован с индикатором в шапке (Д-4) |
| B7 | «Настройки» → «Режим устройства» | НОВОЕ Написано «Самостоятельно» |
| B8 | Главная → «Новая программа» | Диалог с «Блоки» и «Python». НОВОЕ Слоганов быть не должно |
| B9 | «Блоки» → собрать: старт, вперёд 20 см, поворот | Python появляется справа |
| B10 | «Старт» | Программа идёт, телеметрия живая, кнопка становится «Стоп» |
| B11 | «Стоп» на длинной программе | Останавливается сразу |
| B12 | Уйти с экрана и вернуться | Программа на месте; в проектах один проект, не два |
| B13 | «Проверить работу» до запуска | Кнопка называет условие («Сначала запусти») и сама запускает |
Ветка C — классный режим, учитель ЕСТЬ
Главный школьный сценарий. Сбросить базу, поднять учительское приложение.
| № | Что сделать | Что должно быть |
|---|---|---|
| C1 | Учитель: создать класс и в нём 2–3 учеников; записать выданные PIN | PIN показывают один раз |
| C2 | Учитель: «Подключение» → открыть сопряжение | Виден отпечаток и срок |
| C3 | Ученик: чистая база → «В классе» | НОВОЕ Сразу экран поиска учителя, без требования сперва создать карточку |
| C4 | Дождаться находки | Учитель найден сам; при единственном кандидате сопряжение начинается автоматически |
| C5 | Учитель: подтвердить устройство | У ученика «Готово! Устройство сопряжено» + код |
| C6 | Сверить код с экраном учителя | Совпадают. НОВОЕ Обе стороны говорят «код», а не «отпечаток безопасности» |
| C7 | «Продолжить» | НОВОЕ Экран выбора карточки — не главная: ученик ещё не выбран |
| C8 | Посмотреть список | Приехали класс и ученики учителя. НОВОЕ Кнопки «Добавить ученика» быть не должно — ростер ведёт учитель |
| C9 | Выбрать себя, ввести PIN от C1 | Вход |
| C10 | «Курсы» | Если учитель опубликовал курс — он здесь; иначе «Учитель пока не опубликовал ни одного курса» |
| C11 | Настройки → Синхронизация | «Синхронизировано с приложением учителя» |
| C12 | Закрыть учительское приложение, у ученика открыть Настройки | Через несколько секунд «сопряжено, нет связи». Урок при этом не прерывается |
Ветка D — классный режим, учителя НЕТ
Что видит ребёнок, если ноутбук привезли в класс раньше, чем подняли учителя. Сбросить базу.
| № | Что сделать | Что должно быть |
|---|---|---|
| D1 | Чистая база → «В классе», учительское приложение не запущено | Поиск идёт, потом «нашлось: ничего» и форма ручного адреса. Внизу два выхода: «Подключиться позже» и «Работать самостоятельно» |
| D2 | Нажать «Подключиться позже» — уйти к выбору карточки, оставшись классным устройством | НОВОЕ Видна строка «Компьютер ещё не подключён к классу» и кнопка «Подключиться к учителю» |
| D3 | Проверить кнопку «Добавить ученика» | НОВОЕ Её нет: на неподключённом классном устройстве плодить дубли нечем |
| D4 | Нажать «Подключиться к учителю» | Снова экран поиска — путь не тупиковый |
| D5 | Поднять учительское приложение и повторить | Сопрягается, дальше как ветка C |
Ветка E — смена режима задним числом
Проверяет, что ответ на первый вопрос не приговор. База не сбрасывается — продолжение любой ветки.
| № | Что сделать | Что должно быть |
|---|---|---|
| E1 | Настройки → «Режим устройства» → «Сменить режим» | НОВОЕ Сначала показывают, что изменится, и только потом кнопку подтверждения |
| E2 | Подтвердить переход в классный | Уводит на экран сопряжения |
| E3 | «Отмена» на шаге подтверждения | Ничего не поменялось |
| E4 | Сменить обратно в самостоятельный | Профили и работы на месте — режим меняет только источник ростера |
Ветка F — повреждённая база НОВОЕ
Единственный сценарий, который подстраивается руками. Приложение закрыть.
printf 'мусор' > ~/Library/Application\ Support/student-app/rubrick.db
npm run dev
| Что должно быть |
|---|
| Диалог «Локальная база данных повреждена или недоступна» с двумя кнопками |
| «Закрыть» — приложение выходит (проверить и это) |
| Запустить снова, «Начать заново» — стартует с чистой базы и снова спрашивает про режим |
| Сообщение называет путь, куда отложен битый файл; файл там лежит и не удалён |
Проход глазами по текстам
Отдельным заходом, без кликов по функциям. Правило D-117: закрыть строку пальцем — если следующий клик не изменился, строка мертва.
Красные флаги: абзац там, где хватило бы фразы (потолок 90 символов, следит CI); успокоения («это не поломка», «придёт само»); подпись, пересказывающая кнопку рядом; одна мысль дважды на экране; скруглённые углы там, где брендбук требует прямых.
Найденное — присылай строкой и экраном, добавлю в чёрный список теста.
Журнал прогонов
Кто прогнал, когда, на чём и что вышло. Ветка без записи здесь считается непроверенной.
31.08.2026, ветка feat/scenarios-plan, macOS, dev-сборка
| Ветка | Итог |
|---|---|
| A — самостоятельный режим (A1–A14 + подготовка) | ✅ пройдена целиком, человеком |
| B — работа без робота и сети | не прогонялась |
| C — класс с учителем | не прогонялась |
| D — класс без учителя | не прогонялась |
| E — смена режима | не прогонялась |
| F — повреждённая база | не прогонялась |
Отдельно, автоматикой: живые сценарии на телефоне Pixel 9a — 9 из 9 (npm run test:live, подключение по adb forward); моторы и датчики модуля не проверялись, модуля нет.
Все четыре поведения, помеченные НОВОЕ в ветке A, проверены человеком впервые: отказ от недописанного PIN (Д-6), выход с экрана PIN (Д-5), однократность вопроса о режиме (D-121) и предупреждение о тёзке. Найденное по дороге и исправленное тем же днём: скруглённые углы у поля поиска и чипов групп, аватары не по размеру и не по центру, экран сопряжения без центрирования, разная высота поля и кнопки, тупик в ответе «В классе».
Что этап НЕ проверяет
- живого робота: моторы, датчики, телеметрию модуля (нужны телефон и модуль);
- перенос работ между ноутбуками (нужны два ноутбука и учитель);
- права, заморозку класса, раздачу обновлений — это следующий этап про учителя;
- личный режим устройства (D-119) и картинки в уроках (D-120) — ещё не реализованы, лежат спеками в
.assistant/specs/.