# Проверка первой версии — 24 сентября 2026 ## Выполнено - Решение .NET 10 собирается без ошибок и предупреждений. - Пять тестов Application проходят: независимое копирование подходов, сохранение нагрузок при объединении/разделении и перемещении, запрет потери подходов при разном их количестве, добавление круга, проверка отрицательного веса и схемы видеоссылки. - Docker-образ собирается; публикация отдельно проверяет наличие скрипта Blazor. - Два контейнера запускаются в общей сети; PostgreSQL проходит healthcheck, миграция применяется, первый тренер создаётся из окружения. - В Chrome проверены вход, создание клиента и программы, ручное добавление упражнения, разные веса 40/45/50 и 12/14/16 по подходам, сохранение и повторное открытие. - Проверены объединение/разделение сета, изменение порядка, перетаскивание, библиотека и отмена удаления блока. - Проверена независимая копия программы: изменение её веса не затрагивает оригинал. - Проверены две вкладки: устаревшая версия не перезаписывает более новую. - Неавторизованный запрос PDF перенаправляется на вход. - PDF скачан из приложения и отрендерен: кириллица, значки камеры, веса и шесть кликабельных ссылок присутствуют. - Отдельная длинная тренировка экспортирована на шесть страниц: все 18 упражнений и 54 ссылки сохранены; переносы страниц просмотрены. ## Границы проверки Проверка проведена локально в Docker на macOS и в настольном Chrome. Публичный TLS-прокси, нагрузка нескольких тренеров и мобильный интерфейс не проверялись. Данные проверки явно помечены как демонстрационные. Результаты и скрипты ручной браузерной проверки находятся в игнорируемом `artifacts/qa`; это не данные реальных клиентов. ## Общие параметры упражнений — 25 сентября 2026 - Убраны индивидуальные подходы и сеты. Добавлены общие повторения, текстовый вес, разминка, примечание, ручной процент, отдых в минутах и ручное время тренировки. - 8 тестов: независимое копирование полей, валидация, порядок блоков, общий отдых с паузой после последнего подхода. - Перед миграцией создана локальная резервная копия в игнорируемом каталоге backups. Миграция проверена на отдельной копии PostgreSQL: 19 упражнений из 15 блоков перенесены в одиночные блоки; проверены порядок, названия, ссылки, камера, число подходов, первые вес/повторения и перевод секунд в минуты. - Браузерные проверки выполнялись на отдельном временном экземпляре приложения и копии БД: ввод новых полей, сохранение и перезагрузка, независимая копия блока, текстовый вес, дробный отдых, итоги 6 и 10,5 минуты, отсутствие управления сетами, экспорт HTTP 200. - PDF проверен по тексту и структуре без рендеринга страниц: альбомная ориентация, новые колонки, кликабельные аннотации, встроенные камеры, итог отдыха и ручное время. Длинный PDF: все 18 упражнений на 3 страницах, повтор заголовков, текст в границах страниц. - По просьбе пользователя скриншоты и визуальная проверка PDF не выполнялись. ## Единая PDF-таблица недели — 25 сентября 2026 - Каждая неделя экспортируется одной таблицей с общими заголовками и последовательными тренировками; после каждой тренировки свой итог. - Проверена структура документа: одна таблица на неделю, только две общие строки заголовка повторяются при переносе. - Тестовый PDF: две короткие тренировки на одной странице без повторения заголовков между ними; длинная тренировка на следующих страницах, пустая тренировка, отдельные итоги и кликабельные ссылки. Проверены альбомная ориентация, повтор общих заголовков и границы текста. - Проверки без скриншотов и рендеринга страниц. ## Группы библиотеки и поиск — 25 сентября 2026 - 11 тестов проходят, включая точные/начальные совпадения, поиск по нескольким словам, регистр, «ё/е» и отсутствие результатов. - Миграция ExerciseGroups соответствует модели EF Core. На отдельной копии PostgreSQL проверен переход старых упражнений к nullable GroupId без удаления исходных записей. - На отдельном тестовом экземпляре проверены создание и переименование групп, независимое копирование упражнения между группами, drag and drop в группу и «Без группы», сохранение после перезагрузки. - Проверены отмена удаления группы, удаление группы с упражнениями, сохранение независимой копии в другой группе и индивидуальная корзина. - В конфигураторе проверены фильтр группы, поиск, пустой результат, блокировка добавления без выбранного упражнения; добавленное в программу упражнение остаётся после удаления библиотечной группы. - Заодно подтверждены значения по умолчанию: время новой тренировки «1 час», процент нового упражнения 80. - Все UI-проверки выполнены без скриншотов. Тестовые изменения делались только в отдельной базе. ## Выпадающий поиск — 26 сентября 2026 - Постоянный список заменён popover со строкой поиска; ширина соответствует полю, высота и направление раскрытия зависят от свободного места. - На отдельной копии базы проверены: скрытое начальное состояние, фильтрация, двойной клик без повторного добавления, одиночный выбор с кнопкой «Добавить», стрелки и Enter, Escape, закрытие по клику снаружи, отсутствие результатов и сохранение после перезагрузки. - Проверено размещение внутри уменьшенного окна и двойной клик при создании независимой копии упражнения в группе. - Сборка прошла. Скриншоты не выполнялись. ## Удаление клиента — 29 сентября 2026 - В карточку клиента добавлена корзина с подтверждением удаления клиента и всех его программ. - Сборка без предупреждений и ошибок, 11 тестов прошли; приложение обновлено в Docker. - В браузере на специально созданном тестовом клиенте проверены отмена удаления с сохранением программы, подтверждение, возврат к списку и недоступность удалённых клиента и программы по прямым ссылкам. Тестовый клиент удалён. Скриншоты не выполнялись. ## Данные клиента в PDF — 29 сентября 2026 - Миграция ClientProfile добавляет Goal, TrainingSchedule и HealthStatus с пустыми значениями; существующий столбец Notes сохраняется без изменений. - 11 тестов прошли; EF Core не обнаружил расхождений модели и миграций. Сборка Docker и применение миграции успешны. - На специально созданном клиенте проверены порядок полей, сохранение и загрузка после обновления страницы, экспорт PDF. Тестовые клиент и программа удалены после проверки. - Из PDF извлечены все новые значения; таблица содержит четыре строки и два столбца, находится перед неделями и встречается один раз. Проверены альбомные страницы и отсутствие приватной тестовой заметки. Скриншоты и визуальный рендер не выполнялись. ## Удаление программы — 29 сентября 2026 - В истории программ клиента добавлена корзина с подтверждением по названию программы. Удаление ограничено текущим тренером; дочерние недели и тренировки удаляются каскадно. - Сборка без предупреждений и ошибок, 11 тестов прошли; Docker-приложение обновлено. - В браузере без скриншотов на собственных тестовых данных проверены отмена, подтверждение, обновление счётчика, закрытие формы копирования удалённой программы, сохранение результата после перезагрузки и недоступность удалённой программы по ссылке. Клиент и другая программа сохранились. Тестовые данные удалены после проверки. ## Импорт упражнений из таблицы — 29 сентября 2026 - Сборка без предупреждений и ошибок, 16 тестов прошли. Тесты разбора буфера покрывают кавычки Excel, переносы внутри ячеек, пустые ячейки, CR/LF/CRLF, большие вставки и лимиты; проверена валидация ссылок и номера ошибочной строки. - В Docker-приложении без скриншотов проверена вставка 250 строк одним событием буфера обмена, автоматическое расширение таблицы, сохранение после перезагрузки, импорт в новую/существующую группу и без группы. - Ошибочная ссылка оставляет данные в модальном окне и не создаёт ни группу, ни упражнения. Проверены лишний столбец, обязательность названия новой группы, ручное исправление ячеек, вставка только в столбец ссылки, добавление/удаление строк, отмена и Escape. - Сохранённая ссылка проверена в библиотеке. Собственные тестовые записи удалены после проверки. Настоящее приложение Excel не автоматизировалось: использовалось событие paste с табличным текстом формата Excel. ## Очистка поиска после добавления — 29 сентября 2026 - После успешного добавления сбрасываются текст поиска и активный пункт, список закрывается; фильтр группы сохраняется. Сброс явно запрашивается родителем, поэтому обычный ввод и перерисовка не стирают следующий запрос. - Сборка успешна; приложение обновлено в Docker. В браузере без скриншотов проверены добавление кнопкой, двойным кликом и Enter, очистка поиска и выбора, закрытие списка и сохранение следующего введённого запроса. Собственные тестовые данные удалены. ## Плашка отмены удаления — 29 сентября 2026 - Плашка видна только в тренировке, где удалён блок, и исчезает через Planner:UndoDeleteDurationSeconds (по умолчанию 10 секунд). Повторное удаление заменяет предыдущую отмену и перезапускает таймер. - Таймер отменяется при восстановлении блока, удалении исходной тренировки/недели, смене программы и закрытии редактора. - Сборка успешна, 16 тестов прошли. В браузере без скриншотов на собственных тестовых данных проверены переключение тренировок, восстановление блока, автоматическое исчезновение и отсутствие повторного появления. Тестовые данные удалены; Docker-приложение обновлено. ## PDF без названия программы — 29 сентября 2026 - Название программы удалено из содержимого и метаданных PDF. - Сборка успешна, Docker-приложение обновлено. В тестовом экспорте проверено отсутствие названия на всех четырёх страницах и в метаданных, наличие данных клиента. Собственные тестовые записи удалены. Скриншоты не выполнялись. ## Отступ после данных клиента в PDF — 29 сентября 2026 - Добавлены пять пустых строк только между таблицей данных клиента и первой неделей. Настройка: Pdf:ClientDetailsGapLines, переопределение через .env. - Сборка и Docker-обновление успешны. Координаты текста тестового PDF подтверждают смещение первой недели вниз при неизменных следующих неделях и количестве страниц. Скриншоты не выполнялись; собственные тестовые записи удалены. ## Ширина таблицы и ресурс камеры — 29 сентября 2026 - Ширина таблицы PDF увеличена с 25,5 до 27,5 см настройками столбцов. Приложенный PNG без изменений включён как EmbeddedResource в Infrastructure; размер камеры 18 pt настраивается через Pdf:CameraSizePoints. - Иконка выровнена по центру абзаца и вертикально по центру ячейки. Сборка и Docker-обновление успешны. - Из PDF, экспортированного Docker-приложением, извлечена иконка: пиксели совпадают с исходным PNG. По координатам проверены ширина таблицы, границы страницы и центрирование (горизонтальное отклонение 0 pt, вертикальное менее 1 pt). - Скриншоты не выполнялись. Собственные тестовые данные удалены после экспорта. ## Полные ссылки и центрирование в PDF — 29 сентября 2026 - Вместо «Открыть видео» выводится полный URL с невидимыми возможностями переноса; адрес гиперссылки остаётся исходным. - Все столбцы после «Примечания», включая заголовки и итоговые значения, выровнены по горизонтальному и вертикальному центру. - Сборка и Docker-обновление успешны. В тестовом PDF проверены полный длинный URL внутри ячейки, неизменный адрес перехода в аннотациях PDF и центрирование числовых ячеек по координатам (отклонение менее 1 pt). Скриншоты не выполнялись; собственные тестовые данные удалены. ## Имя PDF — 30 сентября 2026 - Имя скачиваемого файла: «Имя клиента — dd.MM.yyyy.pdf», дата создания программы без времени, в том же локальном времени сервера, что и история программ. Недопустимые символы имени файла заменяются подчёркиванием. - Сборка и Docker-обновление успешны. Проверен Content-Disposition с кириллическим именем клиента и форматом даты. Собственные тестовые записи удалены, скриншоты не выполнялись.